![]() |
OnMouseDown and Parent Weiterleiten
Ich kann alle Panels mit einem Bestimmten Namen während der Laufzeit verschrieben solange eine Checkbox Checked ist. Nun habe ich aber auf einigen dieser Panels ein TImage mit dem Align auf alClient, sodass das TImage das komplette Panel bedeckt.
Wie schaffe ich es, dass ich den OnMouseDown Event des Panels auslöse wenn ich den OnMouseDown auf dem TImage auslöse? |
AW: OnMouseDown and Parent Weiterleiten
Einfach den Händler des Panels zuweisen?
|
AW: OnMouseDown and Parent Weiterleiten
Hättest du vielleicht ein kleines Beispiel zur Hand?
|
AW: OnMouseDown and Parent Weiterleiten
Image anklicken, auf dem „Ereignisse“-Reiter OnMouseDown auswählen und da denselben Handler nehmen, den Du auch dem dazugehörigen Panel zugewiesen hast.
|
AW: OnMouseDown and Parent Weiterleiten
also ich habe im OnCreate der Form folgenden Code um auch später erzeugte Panels verschieben zu können
Delphi-Quellcode:
auf den Panels befinden sich auch die TImages
procedure TfrmMain.ControlMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
const minWidth = 20; minHeight = 20; var newPos: TPoint; frmPoint : TPoint; begin if frmMain.inReposition then begin with TWinControl(Sender) do begin GetCursorPos(newPos); if ssShift in Shift then begin //resize Screen.Cursor := crSizeNWSE; frmPoint := ScreenToClient(Mouse.CursorPos); if frmPoint.X > minWidth then Width := frmPoint.X; if frmPoint.Y > minHeight then Height := frmPoint.Y; end else //move begin Screen.Cursor := crSize; Left := Left - frmMain.oldPos.X + newPos.X; Top := Top - frmMain.oldPos.Y + newPos.Y; frmMain.oldPos := newPos; end; end; end; end; (*ControlMouseMove*) procedure TfrmMain.ControlMouseUp( Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if frmMain.inReposition then begin Screen.Cursor := crDefault; ReleaseCapture; frmMain.inReposition := False; end; end; (*ControlMouseUp*) procedure TfrmMain.ControlMouseDown( Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if (MoveControls=true) AND (Sender is TWinControl) then begin frmMain.inReposition:=True; SetCapture(TWinControl(Sender).Handle); GetCursorPos(frmMain.oldPos); end; end; Procedure CM; var i : integer; begin for I:=0 to frmMain.ComponentCount-1 do if frmMain.Components[I] is TPanel then if Copy(TPanel(frmMain.Components[I]).Name,0,4)='PanCon' then begin TPanel(frmMain.Components[I]).OnMouseDown := frmMain.ControlMouseDown; TPanel(frmMain.Components[I]).OnMouseMove := frmMain.ControlMouseMove; TPanel(frmMain.Components[I]).OnMouseUp := frmMain.ControlMouseUp; end; end; |
AW: OnMouseDown and Parent Weiterleiten
Dann schau doch einfach nach, ob der Parent des jeweiligen Images ein TPanel ist und rufe in dem Fall dessen Handler auf, wobei Du den Sender-Parameter auf das Panel selbst setzt.
|
AW: OnMouseDown and Parent Weiterleiten
Hab das jetzt so versucht, aber es klappt nicht
Delphi-Quellcode:
und habe geprüft ob der Parent also das Panel ist und das Stimmt.
for I:=0 to frmMain.ComponentCount-1 do
if frmMain.Components[I] is TImage then if Copy(TImage(frmMain.Components[I]).Name,0,5)='Image' then begin TImage(frmMain.Components[I]).OnMouseDown := TPanel(TImage(frmMain.Components[I]).Parent).OnMouseDown; TImage(frmMain.Components[I]).OnMouseMove := TPanel(TImage(frmMain.Components[I]).Parent).OnMouseMove; TImage(frmMain.Components[I]).OnMouseUp := TPanel(TImage(frmMain.Components[I]).Parent).OnMouseUp; end; |
AW: OnMouseDown and Parent Weiterleiten
Dann steppe doch mal mit F7 durch, dabei wird Dir auffallen, dass ein TImage kein TWinControl ist. Du musst schon einen eigenen Händler für die Images schreiben, in der Art
Delphi-Quellcode:
if Sender is TImage then
if Timage(Sender).Parent is TPanel then begin ThePanel := TPanel(TImage(Sender).Parent); if Assigned(ThePanel.OnMouseDown) then ThePanel.OnMouseDown(ThePanel,ShiftState, X, Y); end; |
AW: OnMouseDown and Parent Weiterleiten
Vielen Dank DeddyH, das funktioniert sehr gut vielen Dank
|
AW: OnMouseDown and Parent Weiterleiten
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:25 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz