Entwickler-Ecke
Sonstiges (Delphi) - Button auf einen anderen fixieren
René R.Fo. - Sa 31.10.09 17:44
Titel: Button auf einen anderen fixieren
Hallo
Ich möchte einen Button auf einen anderen Fixiren ich kann ihn zwar bewegen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin ReleaseCapture; Button1.Perform(wm_syscommand,$f012, 0); end; |
aber ich möchte ihn auf denn Button fixieren.
Ich habe 2 Button wo man sich entscheiden kann denn 1. draufzulegen
Das Problem:
das Fixiren, nur wenn es 100% übereinander ist geht es "weiter"
Lannes - Sa 31.10.09 20:20
Hallo,
dann prüf in Button1MouseMove ob einer der Buttons 100%-Übereinstimmung bezogen auf die Koordinaten X / Y hat, dann gehts "weiter".
(was auch immer "weiter" bedeuten mag, es entzieht sich meiner Kenntnis :wink:)
René R.Fo. - So 01.11.09 12:44
NahGut habe ich schon aber ich möchte wenn Der 1. Button einen anderen berührt das der dann komplett darauf kommt wie z.b. auf´m desktop mit den Symbolen.
jaenicke - So 01.11.09 14:15
Dann musst du beim Loslassen schauen, ob er den anderen Button berührt. Wenn ja, dann musst du die Position auf die des anderen Buttons setzen, fertig.
René R.Fo. - So 01.11.09 15:17
jaenicke hat folgendes geschrieben : |
| Dann musst du beim Loslassen schauen, ob er den anderen Button berührt. Wenn ja, dann musst du die Position auf die des anderen Buttons setzen, fertig. |
das ist mein Problem :oops:
jaenicke - So 01.11.09 15:19
Die Prüfung, ob eine Ecke des einen Knopfes in dem Bereich des anderen Knopfes liegt (sie sich überlappen also)? Oder das Setzen der Position? :gruebel:
René R.Fo. - So 01.11.09 15:46
Prüfen ob sie sich berühren wenn Ja dann übereinanderlegen z.b.:
Delphi-Quelltext
1: 2: 3: 4: 5:
| If (fehlender Code) then begin Button2.Left := Button1.Left; Button2.Top := Button1.Top; end; |
ungefähr so.
jaenicke - So 01.11.09 16:02
Zwei Möglichkeiten:
Erstens mit PtInRect alle vier Ecken prüfen, ob die im Rechteck des anderen Buttons liegen.
Oder zwei Regionen erstellen und testen, ob diese sich irgendwo überschneiden, dafür gibt es API Funktionen. Ich finde das nicht so sinnvoll, aber es ist vielleicht ein kleines bisschen einfacher.
René R.Fo. - Mi 04.11.09 12:27
Ok kannst du mit bitte denn text vervollständigen denn ich geschickt habe?
ich kann auch keine Hilfe Öffnen :oops: :oops:
Xion - Mi 04.11.09 23:32
Man könnte es ja auch von Hand machen:
Delphi-Quelltext
1: 2: 3:
| if ( (Button1.Left>Button2.Left)and(Button1.Left+Button1.Width<Button2.Left) or (Button2.Left>Button1.Left)and(Button2.Left+Button2.Width<Button1.Left)) and (Top analog) then |
Anmerkung: Aufm Desktop ists so, dass sich die Icons einem
Raster anordnen. Falls du sowas hast, ists natürlich viel einfacher.
Delphi-Quelltext
1:
| Button1.Left:=Button1.Left-(Button1.Left mod RASTERGROESSE); |
Boldar - Sa 07.11.09 01:34
Xion hat folgendes geschrieben : |
Anmerkung: Aufm Desktop ists so, dass sich die Icons einem Raster anordnen. Falls du sowas hast, ists natürlich viel einfacher.
Delphi-Quelltext 1:
| Button1.Left:=Button1.Left-(Button1.Left mod RASTERGROESSE); | |
Das ist aber auch falsch, denn so geht es immer nach links. Man müsste eher so eine art round implementieren.
René R.Fo. - Do 19.11.09 20:41
Xion hat folgendes geschrieben : |
Anmerkung: Aufm Desktop ists so, dass sich die Icons einem Raster anordnen. Falls du sowas hast, ists natürlich viel einfacher.
Delphi-Quelltext 1:
| Button1.Left:=Button1.Left-(Button1.Left mod RASTERGROESSE); | |
Delphi erkennt RASTERGOESSE nicht wendarn habe ich das falsch verstanden oder es geht nicht
ich habe Delphi5
René R.Fo. - So 20.12.09 13:43
Ich habe es jetzt anders gelöst trotzdem danke für die antworten:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| ReleaseCapture; Button1.Perform(wm_syscommand,$f012, 0);
If (Button1.Top<48) and (Button1.Left<48) then begin Button1.Top := Button2.Top; Button1.Left := Button2.Left; end;
If (Button1.Top<216) and (Button1.Top>176) and (Button1.Left<48) and (Button1.Left>8) then begin Button1.Top := Button3.Top; Button1.Left := Button3.Left; end;
If (Button1.Top<264) and (Button1.Top>224) and (Button1.Left<120) and (Button1.Left>80) then begin Button1.Top := Button4.Top; Button1.Left := Button4.Left; end; |
noch mal danke :)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!