Pointer auf Komponente übergeben, wie?
-
Hallo,
ich möchte gerne für eine "isMouseOver" Funktion einen Pointer auf eine Komponente übergeben. Leider klappt das alles nicht so wie gedacht

Ich habe eine Funktion:
bool __fastcall TfMain::isMouseOverComponent(TWinControl * Handle) { TPoint P; P = Mouse->CursorPos; P = Handle->ScreenToClient(P); struct cField { int x; int y; }; cField p1, p2; p1.x = Handle->Left; p1.y = Handle->Top; p2.x = p1.x + Handle->Width; p2.y = p1.y + Handle->Height; if ((P.x >= p1.x && P.y >= p1.y) && (P.x <= p2.x && P.y <= p2.y)) { return true; } else { return false; } }welche ich wie folgt aufrufe:
if (isMouseOverComponent((TWinControl)leAuftragx->Handle) == true) { setAuftraXEdit(true); setAuftraNrEdit(false); }allerdings bekomme ich immer ein Fehlermeldung um die Ohren gehauen, die mir mitteilt, dann void * nicht in TWinControll gewandelt werden kann.
Ich möchte eigentlich nur einen Pointer auf die Komponente kriegen, und anschliesend über den Pointer auf Methoden (ScreenToClient()) der Komponente auf die der Pointer zeigt zugreifen.
Wie kann ich das machen!!Danke!
-
hallo clip
was ist "leAuftragx" ?
wenns ein TWinControl bzw. davon abgeleitet wurde, probier mal
if (isMouseOverComponent((TWinControl)leAuftragx) == true)anstatt
if (isMouseOverComponent((TWinControl)leAuftragx->Handle) == true)vielleicht klappts dann ja
Meep Meep
-
weil Control->Handle nun mal ein void-Zeiger und kein Zeiger auf ein TWinControl ist!
warum übergibst du das control nicht direkt (z.B. IsMouseOver(Button))? sollte mit allem gehen, was von TWinControl erbt.
-
leAuftragX ist ein TLabeledEdit. Ich möchte aber auch Edits, und eine ComboBox übergeben. Da ich nur auf Eigenschaften zugreife die alle dieser Komponenten habe, dürfte es ja eingentlich kein Problem geben.
@Sunday:
ich probiere es mal aus, es schein tzu gehen.@Meep:
Dann will der Bcb die Variable mit bew instantiiert haben....
-
Super geht
Danke!Ich musste nur noch den Parent mit übergeben, dann funst alles:
Code:
bool __fastcall TfMain::isMouseOverComponent(TWinControl * Handle, TWinControl * Parent) { TPoint P; P = Mouse->CursorPos; P = Parent->ScreenToClient(P); struct cField { int x; int y; }; cField p1, p2; p1.x = Handle->Left; p1.y = Handle->Top; p2.x = p1.x + Handle->Width; p2.y = p1.y + Handle->Height; if ((P.x >= p1.x && P.y >= p1.y) && (P.x <= p2.x && P.y <= p2.y)) { return true; } else { return false; } }Aufruf:
if (isMouseOverComponent(leAuftragx, gbAunu) == true) { setAuftraXEdit(true); setAuftraNrEdit(false); }
-
Aus der Hilfe des BCB:
Beschreibung
Die Eigenschaft Handle gibt das Fenster-Handle des zugrundeliegenden Microsoft Windows-Bildschirmobjekts zurück. Verwenden Sie die Eigenschaft Handle, um die VCL-API zu umgehen und direkt auf das zugrundeliegende Fenster zuzugreifen.
Greifen Sie während einer Streaming-Operation oder der Komponentenerstellung nicht auf die Eigenschaft Handle zu. Das zugrundeliegende Fenster existiert erst, nachdem die Eigenschaft Handle erstmals referenziert wurde. Wenn dies geschieht, wird die Methode HandleNeeded automatisch aufgerufen.
Handle ist eine schreibgeschützte Eigenschaft.
Noch Fragen)
