ListView - Header selber gestallten



  • Cool, bin jetzt schon mal nen stück weiter, aber einen typenkonflikt hab ich noch:

    __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
    {
        HWND hwnd = ListView1->Handle;
        g_OldCtrlProc = (FARPROC) GetWindowLong(hwnd, GWL_WNDPROC);
        SetWindowLong(hwnd, GWL_WNDPROC, NewCtrlProc); // Fehler bei NewCtrlProc
    }
    //---------------------------------------------------------------------------
    
    LRESULT CALLBACK TForm1::NewCtrlProc(HWND hwnd, UINT uiMsg, WPARAM wParam, LPARAM lParam)
    {
    ...
    }
    

    Fehler: [C++ Fehler] Unit1.cpp(17): E2034 Konvertierung von 'long (__stdcall * (_closure )(void *,unsigned int,unsigned int,long))(void *,unsigned int,unsigned int,long)' nach 'long' nicht möglich



  • SetWindowLong(hwnd, GWL_WNDPROC, (LONG)NewCtrlProc);
    


  • @flenders: wenn ich das (LONG) davor schreib kommt nun folgender fehler:
    [C++ Fehler] Unit1.cpp(17): E2235 Elementfunktion muß aufgerufen oder ihre Adresse übernommen werden



  • Na dann hast du die Funktion wohl nicht als static deklariert. 😃



  • ok, static ist drin, aber da kommt auch schon der nächste fehler:

    LRESULT CALLBACK TForm1::NewCtrlProc(HWND hwnd, UINT uiMsg, WPARAM wParam, LPARAM lParam)
    {
        ....
    
        return CallWindowProc(g_OldCtrlProc, hwnd, uiMsg, wParam, lParam);
                              // ^---- hier kommt der Fehler
    }
    

    Fehler: [C++ Fehler] Unit1.cpp(38): E2231 Element TForm1::g_OldCtrlProc kann nicht ohne ein Objekt verwendet werden



  • Wo und wie hast du g_OldCtrlProc deklariert?



  • g_OldCtrlProc ist als FARPROC im private teil des header-files deklariert.



  • Kann es sein das du gar keine Ahnung von C++ hast?

    In statischen Member-Funktionen kann man nicht auf nicht-statische Member-Variablen zugreifen.



  • doch kann man, aber erst wenn man den Zeiger auf die Klasse hat 🙄 😉 Da hilft den this Zeiger mit SetProp oder SetWindowLong bzw. SetWindowLongPtr als User Data zu setzen oder eine Thunk Klasse zu nehmen.

    aber ich glaube Jester sollte es lieber lassen und sich mit grundlegenden WinAPI Themen beschäftigen. 😞 😉



  • ok, ich geb ja zu, dass ich von der winapi nicht wirklich nen plan hab. daher hab ich es jetzt anders gelöst. man kann beim ListView den Header ausblenden. das hab ich jetzt gemacht und hab mir nen eigenen gezeichnet, nach meinen vorstellungen.
    trotzdem danke für eure bemühungen


Anmelden zum Antworten