![]() |
So lange Linke Maustaste gedrückt
hey,
ich habe in diesem Forum das hier gefunden:
Delphi-Quellcode:
und habe es einbisschen umgebaut:
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Label1: TLabel; procedure Button1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure FormCreate(Sender: TObject); procedure Button1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); private { Private-Deklarationen } FDown: Boolean; public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var Zahl: Cardinal; begin Zahl := 0; FDown := true; while FDown do begin inc(Zahl); Label1.Caption := Format('%d',[Zahl]); Application.ProcessMessages; end; end; procedure TForm1.FormCreate(Sender: TObject); begin FDown := false; end; procedure TForm1.Button1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin FDown := false; end; end.
Delphi-Quellcode:
aber irgendiwe ist das eine endlosschleife, warum?
procedure TForm3.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); var meinControl: TWinControl; begin MDown:=true; if move=true then begin if (Sender is TWinControl) then meinControl := (Sender as TWinControl) else Exit; while MDown=true do begin meinControl.Left:=(Mouse.CursorPos.x-Form3.Left)+(Mouse.CursorPos.x-(meinControl.Left+Form3.Left)); Form3.Refresh; end; end else Exit; end; procedure TForm3.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin MDown:=false; end; zusatz: ich will das das objekt, das bewegt werden soll, der maus folgtaber nicht an einer eck sondern so wie geklickt wurde so wollte ich das lösen:
Delphi-Quellcode:
aber irgendwie will das nicht richtig funktionieren
meinControl.Left:=(Mouse.CursorPos.x-Form3.Left)+(Mouse.CursorPos.x-(meinControl.Left+Form3.Left));
|
AW: So lange Linke Maustaste gedrückt
Hallo,
Zitat:
Kannst du deine Frage => Zitat:
WAS ist bei dir eine Endlosschleife? Übrigens sollte man boolsche Werte nie mit
Delphi-Quellcode:
abfragen.
If boolean-Value = true
Stattdessen
Delphi-Quellcode:
oder eben
If boolean-Value
Delphi-Quellcode:
...
if not boolean-Value
|
AW: So lange Linke Maustaste gedrückt
Zum Theam Endlosschleife, hab ich inzwischen geklärt, das problem war das die procedure FormMouseUp nicht zugewisen war :D
und zum thema mit der Maus bewegen, da ist das Problem, das mein Textfeld ziwschen zwei positionen hin und her springt ganz schnell in zwischen sieht der Befehl so aus
Delphi-Quellcode:
Wenn ich ein Label bewegen will kommt mein Programm hat einen External <<SIGSEGV>> ausgelöst in
procedure TForm3.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); var meinControl: TWinControl; begin MDown:=true; if move=true then begin if (Sender is TWinControl) then if (Sender<>Form3) then meinControl := (Sender as TWinControl) else Exit; while MDown=true do begin meinControl.Left:=((Mouse.CursorPos.x-Form3.Left)+(Mouse.CursorPos.x-(meinControl.Left+Form3.Left))); meinControl.Top:=((Mouse.CursorPos.y-Form3.Top)+(Mouse.CursorPos.y-(meinControl.Top+Form3.Top))); Form3.Refresh; Application.ProcessMessages; end; end else Exit; end; include\control.inc in zeile 3953 irgendwas da steht drin
Delphi-Quellcode:
procedure TControl.SetLeft(Value: Integer);
begin {$IFDEF CHECK_POSITION} if CheckPosition(Self) then DebugLn('[TControl.SetLeft] ',Name,':',ClassName,' ',DbgS(Value)); {$ENDIF} if csLoading in ComponentState then begin inc(FReadBounds.Right, Value - FReadBounds.Left); FReadBounds.Left := Value; Include(FControlFlags, cfLeftLoaded); end; SetBounds(Value, FTop, FWidth, FHeight); end; |
AW: So lange Linke Maustaste gedrückt
Zitat:
Am einfachsten dürfte folgendes sein: - Du merkst dir zu Beginn die ursprünglichen Positionen der Maus und der Komponente - In der Schleife: Du ermmittelst wie weit die Maus von der urspr. Pos. entfernt ist und addierst das zu urspr. Pos der Komponente |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:45 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