Zugriff einer Komponente über ihr Handle



  • Ich würde gerne den Text eines einfachen Label herausfinden (jedoch möchte ich auch oft auf irgendwelche andere Komponente zugreifen)

    Ich hatte mir das so vorgestellt (ich bin mir aber ziemlich sicher, dass es nicht so einfach geht).

    TLabel *DiesesLabel = GetComponentfromHandle(MeinHandle); //leider gibt es diese Funktion nicht
    ShowMessage(DiesesLabel->Caption);

    Jedoch möchte ich sowas auch mit anderen Komponenten anstellen;
    z.B.: DieseListbox->Items->Add("TEST");

    Ist das möglich?



  • Was ist MeinHandle?! Außerdem sieht mir das eher nach VCL aus 🙄



  • Ein Label aus einer anderen Anwendung ???

    Erst mal mußt du das Handle des Labels finden!
    Das Problem ist aber, das normale Labels kein Handle haben, wenn doch, dann

    HWND FindWindow(
        LPCTSTR lpClassName,	// pointer to class name
        LPCTSTR lpWindowName 	// pointer to window name
       );
    

    Den Klassennamen mußt du dann hier angeben (Kannst du über Hilfsprogramme z.B. Spy++ erfahren). Wenn natürlich mehrere Labels dieser Klasse vorhanden sind, wirds schon wieder schwer.
    Dann kannst du den Text auslesen über (glaube ich, habs im Moment nicht genau im Kopf)

    int GetWindowText(
    
        HWND hWnd,	// handle of window or control with text
        LPTSTR lpString,	// address of buffer for text
        int nMaxCount 	// maximum number of characters to copy
       );
    


  • MeinHandle is das Handle auf die jeweilige Komponente.
    Mir ist nur klar geworden, das nicht alle Komponenten ein Hanlde besitzen.:(🙄



  • Versuchs mal mit der Komponente "StaticText" (Komponentenpalette unter "Zusätzlich" ).
    Das ist ein Label, das von TWinControl abgeleitet wurde und daher ein Handle besitzt.

    Aber vielleicht kann dir auch die Funktion "FindComponent" oder "TComponent->Components[i]" weiterhelfen.


Anmelden zum Antworten