AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Komponenten während der Laufzeit verschieben
Thema durchsuchen
Ansicht
Themen-Optionen

Komponenten während der Laufzeit verschieben

Ein Thema von tofse · begonnen am 10. Jan 2012 · letzter Beitrag vom 12. Jan 2012
Antwort Antwort
Seite 2 von 2     12   
tofse

Registriert seit: 6. Jun 2011
Ort: Saarlouis
131 Beiträge
 
Delphi XE Professional
 
#11

AW: Komponenten während der Laufzeit verschieben

  Alt 11. Jan 2012, 13:20
@DeddyH: Das ganze würde im MouseDown aber bedeutend mehr Sinn machen oder übersehe ich irgendwas?
Hatte ich schon, aber mousemove wird danach leider nicht mehr aufgerufen
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#12

AW: Komponenten während der Laufzeit verschieben

  Alt 11. Jan 2012, 13:21
Ich hatte das seinerzeit einmal ins MouseMove verschoben, nur fällt mir gerade der Grund nicht mehr ein.
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
tofse

Registriert seit: 6. Jun 2011
Ort: Saarlouis
131 Beiträge
 
Delphi XE Professional
 
#13

AW: Komponenten während der Laufzeit verschieben

  Alt 11. Jan 2012, 16:52
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
  Mit Zitat antworten Zitat
einbeliebigername

Registriert seit: 24. Aug 2004
140 Beiträge
 
Delphi XE8 Professional
 
#14

AW: Komponenten während der Laufzeit verschieben

  Alt 11. Jan 2012, 19:51
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.....
Ich weiß jetzt nicht, wie du die Werte ausgegeben hast. Ein Label z.B. kommt, während das MouseCapture an ist, nicht zum Neuzeichnen, so das sich scheinbar nichts ändert.

Hat jemand noch einen Tipp, wie ich da vorgehen könnte ?

Du könntest dir mal mit OutputDebugString(PChar(Format('ControlMouse...: Sender.MouseCapture= %s', [BoolToStr(TMoveCracker(Sender).MouseCapture, True)]))); 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.

Einbeliebigername.
  Mit Zitat antworten Zitat
tofse

Registriert seit: 6. Jun 2011
Ort: Saarlouis
131 Beiträge
 
Delphi XE Professional
 
#15

AW: Komponenten während der Laufzeit verschieben

  Alt 12. Jan 2012, 07:57
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
  Mit Zitat antworten Zitat
Benutzerbild von roga
roga

Registriert seit: 15. Jun 2008
Ort: Sachsen-Anhalt
109 Beiträge
 
Delphi XE8 Professional
 
#16

AW: Komponenten während der Laufzeit verschieben

  Alt 12. Jan 2012, 08:50
Hallo Christof,

ich füge hier mal einige Codeschnipsel aus meiner Komponente ein, vielleicht kannst Du damit etwas anfangen.

Delphi-Quellcode:
// 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;
DoubleBuffered sollte auch aktiviert werden.

Gruß roga
Ronald
  Mit Zitat antworten Zitat
tofse

Registriert seit: 6. Jun 2011
Ort: Saarlouis
131 Beiträge
 
Delphi XE Professional
 
#17

AW: Komponenten während der Laufzeit verschieben

  Alt 12. Jan 2012, 09:04
Wird das bei Dir aufgerufen ?
Code:
procedure OnMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if FDragging then
  begin
    ...
  end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von roga
roga

Registriert seit: 15. Jun 2008
Ort: Sachsen-Anhalt
109 Beiträge
 
Delphi XE8 Professional
 
#18

AW: Komponenten während der Laufzeit verschieben

  Alt 12. Jan 2012, 10:01
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.
Angehängte Dateien
Dateityp: zip PanelMoveDemo.zip (211,6 KB, 25x aufgerufen)
Ronald
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 04:47 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