Ich möchte die Position eines Controls in einer Form an eine andere Form weitergeben um diese analog eines Popups anzeigen zu können.
Solange die Positionsermittlung (Top,Left) innerhalb der aufrufenden Form erfolgt funktioniert auch die Anzeige des aufzurufenden Form.
Übergebe ich stattdessen das Control an eine Unit (Wrapper) bekomme ich falsche Koordinaten des Controls. Die Anzeige des Forms ist immer nach unten rechts verschoben.
Folgendes OnClick für beliebige Controls funktioniert, da in der Form defeniert:
Code: Alles auswählen
procedure TForm1.ControlClick(Sender: TObject);
var
p :tPoint;
begin
p := ClientToScreen(Point((Sender as TControl).Left,(Sender as TControl).Top));
TLWH.Top := P.y;
TLWH.Left := P.x;
TLWH.Width := (Sender as TControl).Width;
TLWH.Height:= (Sender as TControl).HelpContext;
FrmMyHelp.Show;
end;
Übergebe ich stattdessen das Control an den Wrapper bekomme ich falsche Koordinaten
Code: Alles auswählen
procedure TForm1.ControlClickDirekt(Sender: TObject);
begin
ShowMyForm((Sender as TControl));
end;
//Wrapper in UNIT
procedure ShowMyForm(myCont: TControl);
var
CP : TPoint;
mP : string;
begin
//mP := myCont.Parent.Name;
CP := myCont.ClientToScreen(Point(myCont.Left,myCont.Top));
TLWH.Top := CP.y;
TLWH.Left := CP.x;
TLWH.Width := myCont.Width;
TLWH.Height:= myCont.HelpContext;
FrmMyHelp.Show;
end;
Die Angaben zu Width und Height (umgewandelt) werden überigens korrekt ausgewertet! ControlToScreen liefert auch kein anderes Resultat,
Wo hab ich denn diesmal meinen Denkfehler