ERLEDIGT
JA
JA
ANTWORTEN
28
28
ZUGRIFFE
2806
2806
EMPFEHLEN
-
Ich soll ein Programm schreiben was einer Pivot-Tabelle in Excel ähnelt,
dazu brauche ich Buttons die ich mit der maus in ein anderes feld auf der Form verschieben kann!
Kann mir da irgendjemand weiterhelfen?
Über eine schnelle antwort würde ich mich sehr freuen...
Mfg
ZeroGirlGeändert von ZeroGirl (29.06.04 um 14:52 Uhr)
-
Das Verschieben mit der Maus erfordert, dass du auf Mausereignisse reagierst. Du willst einen Button verschieben, das heißt, der Empfänger dieser Mausereignisse ist ein Button. Indem du nun Handler-Prozeduren für die jeweiligen Ereignisse des Buttons schreibst, kannst du so das Verschieben realisieren. Diese Mausereignisse sind beispielsweise OnMouseDown und OnMouseMove.
Gawayn
-
Danke für die Antwort!
Ich werde es mal versuchen!
Mir hat jemand irgendetwas von dem OnDragDrop Ereigniss erzählt, was hat es denn damit aufsich?
-
Mit OnDragDrop kann man auch Objekte mit der Maus ziehen und "fallenlassen". Allerdings ist diese Methode nicht so sehr etwas für Anfänger. Wenn du nähere Informationen möchtest, schau einfach in der Delphi-Hilfe zu dem Thema nach. Du kannst die Sache ja mal ausprobieren und gucken, was besser funktioniert!
Gawayn
-
In der Hilfe stehen leider keine wirklich brauchbaren Beispiele drinne.
Naja, mal sehen vielleicht findet man ja noch was im i-net...
-
Wäre das, das was ich suche?:
procedure TFMForm.FileListBox1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if Button = mbLeft then { Nur ziehen, wenn linke Maustaste gedrückt ist }
with Sender as TFileListBox do { Sender als TFileListBox behandeln }
begin
if ItemAtPos(Point(X, Y), True) >= 0 then { Element vorhanden? }
BeginDrag(False); { Wenn ja, dann ziehen }
end;
end;
Oder liege ich da immer noch falsch?
Kann man das überhaupt mit Buttons machen?
Oder geht es mit was anderem leichter oder so?
-
Hast du es denn noch nicht in einem eigenen Programm ausprobiert? Ich analysiere den Code, den du da reingeschrieben hast, jetzt nicht, weil es grundsätzlich nicht so sinnvoll ist, sich über Code Gedanken zu machen, den man noch gar nicht getestet hat. Ich würde dir den Rat geben, einfach ein wenig mit Delphi herumzuprobieren, und wenn etwas nicht funktioniert, zu fragen.
Gawayn
-
Ich muss ja erstmal was finden was ich zum ausprobieren nehmen kann!
Aber trotzdem danke erstmal für deine Hilfe...
-
Mir wird immer wieder dieser fehler angezeigt!
[Fehler] Unit1.pas(56): Undefinierter Bezeichner: 'ItemAtPos'
Das ist der Quelltext dazu:
begin
if Button = mbLeft then {Nur ziehen, wenn linke Maustaste gedrückt ist}
with Sender as TButton do {Sender als Button behandeln}
begin
if ItemAtPos(Point(X, Y), True) >= 0 then {Element vorhanden?}
BeginDrag(False); {Wenn ja, dann ziehen}
end;
end;
Wo isn da der fehler?
-
O.K. das mit dem fehler hat sich erledigt, habe ihn endlich gefunden!
Jetzt wird das Prog wieder Compiliert...
Aber so ganz klappen tut es immer noch nicht! Der Button will sich einfach
nicht bewegen! Nur der Pfeil der Maus sieht so aus als würde der Button
schon gezogen werden...
Naja, wenigstens etwas...
-
Ich sehe schon, es ist zu kompliziert, um es hier mit Worten zu erklären. Deswegen will ich einmal vollständigen Code hier posten. Den hab ich extra für dich geschrieben
.
Mein Programm hat ein Fenster (namens MainWin) mit einem einzigen Button (namens Button). Wenn du mit der rechten Maustaste auf den Button klickst, kannst du ihn ziehen. Die Variable OldDelta ist notwendig, damit der Button nicht dauernd hin- und herspringt. Wenn man nämlich den Button bewegt, während der Mauszeiger über ihm steht, wird ein neues MouseMove-Ereignis ausgelöst, was wiederum ein Bewegen des Buttons verursacht, was wiederum ein MouseMove-Ereignis verursacht... usw. Mit OldDelta berechne ich, ob sich der Mauszeiger tatsächlich selber bewegt hat oder ob sich nur der Button unter dem Mauszeiger bewegt hat. In letzterem Fall darf der Button nicht erneut bewegt werden.
Ist es das, was du realisieren wolltest? Ich hoffe...
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
unit MoveButton_Main; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls; type TMainWin = class(TForm) Button: TButton; procedure ButtonMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure ButtonClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure ButtonMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure ButtonMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); private { Private declarations } public { Public declarations } OldPos: TPoint ; OldDelta: TPoint ; Dragging: Boolean ; end; var MainWin: TMainWin; implementation {$R *.dfm} procedure TMainWin.ButtonMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if( Button=mbRight ) then begin Dragging := True ; end ; end; procedure TMainWin.ButtonClick(Sender: TObject); begin ShowMessage( 'Clicked' ) ; end; procedure TMainWin.FormCreate(Sender: TObject); begin Dragging := False ; end; procedure TMainWin.ButtonMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if( Dragging and ((X-OldDelta.X<>OldPos.X) or (Y-OldDelta.Y<>OldPos.Y)) ) then begin OldDelta.X := OldPos.X-X ; OldDelta.Y := OldPos.Y-Y ; Button.Left := Button.Left-OldDelta.X ; Button.Top := Button.Top-OldDelta.Y ; end ; OldPos.X := X ; OldPos.Y := Y ; end; procedure TMainWin.ButtonMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Dragging := False ; end; end.Geändert von Gawayn (24.06.04 um 13:02 Uhr)
-
So, problem gelöst!
Das mit den Buttons funktioniert jetzt!
Zwar bewegen sich die Buttons an sich nicht aber wenn man auf den Button
Klickt und ihn zu senem zielort zieht ist an der Maus ein kleines Blatt zu sehen!
Die daten werden also übertragen...
-
100000 Dank!
Find ich cool das du dich da extra hingesetzt hast und das geproggt für mich hast!
Bin dir voll dankbar!
Du bist ein schatz!
Küsschen an dich!
Ich weiß gar nicht wie ich dir da danken soll!
-
Null problemo & gern geschehen
-
So, die Buttons kann man ja nun über die Form bewegen!
Nun steht ein weiteres Problem an!
Die Coordinaten des Buttons sollen in einem Label ausgegeben werden!
Also wo sich der Button grade auf der Form befindet!
Kann mir da jemand weiterhelfen?
Mfg
ZeroGirl
Ähnliche Themen
-
Hintergrund mit Maus verschieben
Von mxxxx im Forum Javascript & AjaxAntworten: 11Letzter Beitrag: 15.04.10, 11:44 -
Link mit Maus verschieben
Von hadda im Forum Javascript & AjaxAntworten: 15Letzter Beitrag: 25.05.08, 19:50 -
IE7 Streikt: DIV mit Maus verschieben
Von X-Color im Forum Javascript & AjaxAntworten: 3Letzter Beitrag: 10.10.07, 09:34 -
Form mit Maus verschieben
Von Meldur im Forum .NET Windows FormsAntworten: 5Letzter Beitrag: 09.07.07, 14:25 -
Anwender soll im Browser Bild mit Maus verschieben können
Von lispelchen im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 1Letzter Beitrag: 10.02.04, 02:56





Zitieren
Login





