[gelöst] BeginDrag

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
u-boot
Beiträge: 308
Registriert: Do 9. Apr 2009, 10:10
OS, Lazarus, FPC: Ubuntu 9.10 (L 0.9.28 FPC 2.2.4)
CPU-Target: 32Bit
Wohnort: 785..

[gelöst] BeginDrag

Beitrag von u-boot »

Ich kann folgenden kleinen Testcode nicht richtig zum laufen bringen.

Wenn ich das Delphi-Tutorial (http://www.delphi-treff.de/tutorials/vc ... hi/page/2/" onclick="window.open(this.href);return false;) richtig verstanden habe, müsste bei meinem Code durch das Drücken der linken Maustaste der Shape grün gefärbt werden. Wenn man dann anfängt den Cursor zu verschieben müsste der Shape rot gefärbt werden.

Bei mir lässt sich allerdings durch Betätigung der linken Maustaste keine Grünfärbung erreichen (Auch mit verschiedenen Threshold-Werten versucht), sondern der Shape wird augenscheinlich direkt rot eingefärbt.
Bin mir nun aber nicht sicher ob das ein Lazarus-Bug ist oder ob ich was übersehen oder falsch verstanden habe. Daher auch der Post hier und nicht im Bugtracker ....
Betriebssystem ist Ubuntu 9.10
Lazarusversion 0.9.28.2-beta

Dragmode ist übrigens auf dmManual eingestellt.

Code: Alles auswählen

procedure TForm1.MouseDown(Sender: TObject; Button: TMouseButton;  // (shape1 & shape2)Mousedown
  Shift: TShiftState; X, Y: Integer);
begin
  (Sender as Tshape).Brush.Color:=clgreen;
  application.ProcessMessages;
  if Button = mbLeft then (Sender as TControl).BeginDrag(False);     // Info: BeginDrag(Immediate: Boolean; Threshold: Integer = -1);
end;
 
procedure TForm1.StartDrag(Sender: TObject; var DragObject: TDragObject);  // (shape1 & shape2)StartDrag
begin
  (Sender as TShape).Brush.Color:=clred;
end;
Zuletzt geändert von u-boot am Mo 8. Feb 2010, 01:25, insgesamt 1-mal geändert.
Ubuntu 9.10 (L 0.9.28 FPC 2.4.x)

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: BeginDrag

Beitrag von Scotty »

http://lazarus-ccr.sourceforge.net/docs ... ndrag.html" onclick="window.open(this.href);return false;
Threshold: Minimum movement of cursor before dragging starts (in pixels); ignored if Immediate=True.

Dragging beginnt nach dem Klick, der "Cursor ändert sich" aber erst nach n Pixel. Dies ist kompatibel zu Delphi. Wenn du willst, dass erst beim Draggen die Farbe geändert wird, dann benutze OnDragOver, da in fast jedem Fall der erste DragOver-Punkt innerhalb des Shapes liegen wird.

Code: Alles auswählen

procedure TForm1.Shape1DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  if Source is TShape then
    (Sender as TShape).Brush.Color:=clRed;
end;
Ein großartiger Artikel zu Drag 'n Drop ist von Brain Long: http://www.blong.com/Conferences/BorCon ... p/4114.htm" onclick="window.open(this.href);return false;

u-boot
Beiträge: 308
Registriert: Do 9. Apr 2009, 10:10
OS, Lazarus, FPC: Ubuntu 9.10 (L 0.9.28 FPC 2.2.4)
CPU-Target: 32Bit
Wohnort: 785..

Re: BeginDrag

Beitrag von u-boot »

Dankeschön für die kompetente Antwort. Da hatte ich dann wohl was falsch verstanden.

Antworten