AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein OnMouseDown and Parent Weiterleiten
Thema durchsuchen
Ansicht
Themen-Optionen

OnMouseDown and Parent Weiterleiten

Ein Thema von jacky213 · begonnen am 27. Jun 2019 · letzter Beitrag vom 28. Jun 2019
Antwort Antwort
Seite 1 von 2  1 2      
jacky213

Registriert seit: 2. Mär 2011
146 Beiträge
 
#1

OnMouseDown and Parent Weiterleiten

  Alt 27. Jun 2019, 20:30
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?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: OnMouseDown and Parent Weiterleiten

  Alt 27. Jun 2019, 20:32
Einfach den Händler des Panels zuweisen?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
jacky213

Registriert seit: 2. Mär 2011
146 Beiträge
 
#3

AW: OnMouseDown and Parent Weiterleiten

  Alt 27. Jun 2019, 20:33
Hättest du vielleicht ein kleines Beispiel zur Hand?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: OnMouseDown and Parent Weiterleiten

  Alt 27. Jun 2019, 20:35
Image anklicken, auf dem „Ereignisse“-Reiter OnMouseDown auswählen und da denselben Handler nehmen, den Du auch dem dazugehörigen Panel zugewiesen hast.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
jacky213

Registriert seit: 2. Mär 2011
146 Beiträge
 
#5

AW: OnMouseDown and Parent Weiterleiten

  Alt 27. Jun 2019, 20:48
also ich habe im OnCreate der Form folgenden Code um auch später erzeugte Panels verschieben zu können

Delphi-Quellcode:
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)='PanConthen
       begin
       TPanel(frmMain.Components[I]).OnMouseDown := frmMain.ControlMouseDown;
       TPanel(frmMain.Components[I]).OnMouseMove := frmMain.ControlMouseMove;
       TPanel(frmMain.Components[I]).OnMouseUp := frmMain.ControlMouseUp;
       end;
end;
auf den Panels befinden sich auch die TImages
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: OnMouseDown and Parent Weiterleiten

  Alt 27. Jun 2019, 20:57
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
jacky213

Registriert seit: 2. Mär 2011
146 Beiträge
 
#7

AW: OnMouseDown and Parent Weiterleiten

  Alt 27. Jun 2019, 21:02
Hab das jetzt so versucht, aber es klappt nicht

Delphi-Quellcode:
    for I:=0 to frmMain.ComponentCount-1 do
    if frmMain.Components[I] is TImage then
    if Copy(TImage(frmMain.Components[I]).Name,0,5)='Imagethen
       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;
und habe geprüft ob der Parent also das Panel ist und das Stimmt.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: OnMouseDown and Parent Weiterleiten

  Alt 27. Jun 2019, 21:22
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;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
jacky213

Registriert seit: 2. Mär 2011
146 Beiträge
 
#9

AW: OnMouseDown and Parent Weiterleiten

  Alt 27. Jun 2019, 22:48
Vielen Dank DeddyH, das funktioniert sehr gut vielen Dank
  Mit Zitat antworten Zitat
jziersch

Registriert seit: 9. Okt 2003
Ort: München
240 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: OnMouseDown and Parent Weiterleiten

  Alt 28. Jun 2019, 08:45
Wie schaffe ich es, dass ich den OnMouseDown Event des Panels auslöse wenn ich den OnMouseDown auf dem TImage auslöse?
Wenn bei einem Control "Enabled" = false ist, wird es bei der Mausabfrage ignoriert. Vielleicht hilft dies ja bereits.
WPCubed GmbH
Komponenten für Delphi:
WPTools, wPDF, WPViewPDF
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz