![]() |
AW: Komponenten während der Laufzeit verschieben
Zitat:
|
AW: Komponenten während der Laufzeit verschieben
Ich hatte das seinerzeit einmal ins MouseMove verschoben, nur fällt mir gerade der Grund nicht mehr ein.
|
AW: Komponenten während der Laufzeit verschieben
Hallo,
erst mal Danke für die Anregungen. Da ich unbedingt das mousemove benötige, um beim Verschieben des Panels die Koordinaten zu berechnen (wegen Scrollen in einer Scrollbox), bin ich wieder zum ursprünglichen Code zurück, auch wenn ich wegen der beschriebenen Probleme nicht glücklich bin. Ich habe nun versucht, irgendwie zu tricksen, dass der Mauszeiger auch bei schnellen Bewegungen das Panel nicht verlassen kann. Hierzu wollte ich mouseleave einsetzen. Aber in der beschriebenen Situation wird die Prozedur nicht aufgerufen. Wieso ? Als zweiten Versuch wollte ich im mousemove die übergebenen X,Y Koordinaten mit der Breite bzw. Höhe des Panels abgleichen, d.h. wenn die = sind, darauf reagieren. Das hat auch nicht funktioniert. Daraufhin habe ich mir während dem Ziehen X und Y im Panel ausgeben lassen (bei mousemove), da habe ich dann gesehen, dass diese sich nach dem ersten mousedown nicht mehr verändern.....:?: Hat jemand noch einen Tipp, wie ich da vorgehen könnte ? Vielen vielen Dank Christof |
AW: Komponenten während der Laufzeit verschieben
Zitat:
Zitat:
Du könntest dir mal mit
Delphi-Quellcode:
den Wert vom MouseCapture ins Ereignisprotokoll schreiben lassen. Jeweils am Anfang und Ende von ...Down, ...Up und ...Move. Vielleicht wird das vom Panel weggenommen. Denn wenn MouseCapture an ist, bekommt nur noch dieses Control die Mausnachrichten, selbst wenn sich die Maus außerhalb der Controls befindet.
OutputDebugString(PChar(Format('ControlMouse...: Sender.MouseCapture= %s', [BoolToStr(TMoveCracker(Sender).MouseCapture, True)])));
Einbeliebigername. |
AW: Komponenten während der Laufzeit verschieben
Hallo,
verstehe ich nicht. Habe den OutputDebugString eingebaut, und nur im mouseup wird true ausgegeben, sonst immer false. Trotzdem funktioniert ja grundsätzlich das Verschieben :? Christof |
AW: Komponenten während der Laufzeit verschieben
Hallo Christof,
ich füge hier mal einige Codeschnipsel aus meiner Komponente ein, vielleicht kannst Du damit etwas anfangen.
Delphi-Quellcode:
DoubleBuffered sollte auch aktiviert werden.
// Benötigte Variable
FDragging: Boolean; procedure OnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin ... // Drag wird begonnen FDragging := True; ReleaseCapture; Perform(WM_SysCommand, $F012, 0); // Folgende Zeile ist sehr wichtig! Sonst keine Auslösung if Assigned(OnMouseUp) then MouseUp(Button, Shift, X, Y); end; procedure OnMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if FDragging then begin ... end; end; procedure OnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if FDragging then begin // Drag wird beendet FDragging := False; ... end; end; Gruß roga |
AW: Komponenten während der Laufzeit verschieben
Wird das bei Dir aufgerufen ?
Zitat:
|
AW: Komponenten während der Laufzeit verschieben
Liste der Anhänge anzeigen (Anzahl: 1)
Du hast Recht, in dieser Komponente brauchte ich nur das MouseUp-Ereignis für Korrekturen. Die einfachste Lösung wäre über einen Timer, hänge Dir mal eine Demo und die Source an.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:42 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