Wenn dies Ihr erster Besuch hier ist,
lesen Sie bitte zuerst die Hilfe - Häufig gestellte Fragen
durch. Sie müssen sich vermutlich registrieren,
bevor Sie Beiträge verfassen können. Klicken Sie oben auf 'Registrieren', um den Registrierungsprozess zu
starten. Sie können auch jetzt schon Beiträge lesen. Suchen Sie sich einfach das Forum aus, das Sie am meisten
interessiert.
kann man einen Bitbtn während des laufenden Programmes Verschieben?
wenn ja, bitte mit Erklärung.
Danke, Christian Weber
If it's there and you can see it – it's REAL
If it's there and you can't see it – it's TRANSPARENT
If it's not there and you can see it – it's VIRTUAL
If it's not there and you can't see it – it's GONE!
willst du auch andere Komponenten verschieben änderst du dann im OI den Namen der Ereignisprozedur "OnMouseDown" in "MEINMOUSEDOWN" und belegst dies dann folgendermaße,
Procedure tform1.MEINMOUSEDOWN(sender;tobject; Button:TmouseButton; Shift:Tshiftstate; x, y : Integer);
begin
twincontrol(sender).Perform(WM_LBUTTONUP, 0 , 0);
twincontrol(sender).Perform(WM_SysCommand, SC_MOVE+2 ,2);
end;
dann steht dir für alle Komponenten das verschieben zur Verfügung wenn du das MOUSEDOWNEVENT damit belegst.
Am Ende speicherst du alles brav irgendwo (Registry) und lädst die Koordinaten beim erstellen deines Formulares.
Aber.... eine anständige Benutzerschnittstelle wird das nicht ...
Christian,
Ich hoffe, ich habe die Frage verstanden...
Man kann jede sichtbare Komponente zur Laufzeit verschieben, dazu haben sie ja die Properties LEFT, TOP, WIDTH und HEIGHT - die man einzeln oder per SetBounds setzen kann.
Hallo. Ich wollte Eigentlich Den Button während der laufzeit mit der Maus an verschiedene BESTIMMTE Positionen ziehen und wenn der Btn an der Position ist, soll man Draufklicken können, das funzt nich.
@ Pm Heiko: Was is OI?
Wat nu
If it's there and you can see it – it's REAL
If it's there and you can't see it – it's TRANSPARENT
If it's not there and you can see it – it's VIRTUAL
If it's not there and you can't see it – it's GONE!
2. Im OnMouseDownEvent des Buttons:
doMove := TRUE;
lastX := X;
lastY := Y;
3. Im OnMouseMoveEvent des Buttons:
if doMove then
begin
btnMoveMe.Left := btnMoveMe.Left + X - lastX;
btnMoveMe.Top := btnMoveMe.Top + Y - lastY;
end;
4. Im OnMouseUpEvent des Buttons:
doMove := FALSE;
Jetzt kannst Du den Button ganz leicht (mit gedrückter linker Maustaste) über die Oberfläche ziehen.
Du kannst dann nicht mehr den Button Drücken oder er Drückt immer sobald du verschieben willst also müsste man ein Flag einbauen womit man das Verschieben einschalten kan
Einfach das Verschieben nur erlauben, wenn eine Taste wie STRG zusätzlich gedrückt wird.
Also so innerhalb MouseDown:
<code>
if ssCtrl in Shift then
begin
...
end;
</code>
Comment