| Autor |
Beitrag |
René R.Fo.
      
Beiträge: 116
Win7
Delphi5 Delphi2005
|
Verfasst: Sa 31.10.09 17:44
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"
_________________ If Promille or Cannabis.Volumen > IQ then
dec(Gehirnzellen.Anzahl);
|
|
Lannes
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: 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  )
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
René R.Fo. 
      
Beiträge: 116
Win7
Delphi5 Delphi2005
|
Verfasst: 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.
_________________ If Promille or Cannabis.Volumen > IQ then
dec(Gehirnzellen.Anzahl);
|
|
jaenicke
      
Beiträge: 19341
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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. 
      
Beiträge: 116
Win7
Delphi5 Delphi2005
|
Verfasst: So 01.11.09 15:17
_________________ If Promille or Cannabis.Volumen > IQ then
dec(Gehirnzellen.Anzahl);
|
|
jaenicke
      
Beiträge: 19341
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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? 
|
|
René R.Fo. 
      
Beiträge: 116
Win7
Delphi5 Delphi2005
|
Verfasst: 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.
_________________ If Promille or Cannabis.Volumen > IQ then
dec(Gehirnzellen.Anzahl);
|
|
jaenicke
      
Beiträge: 19341
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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. 
      
Beiträge: 116
Win7
Delphi5 Delphi2005
|
Verfasst: 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 
_________________ If Promille or Cannabis.Volumen > IQ then
dec(Gehirnzellen.Anzahl);
|
|
jaenicke
      
Beiträge: 19341
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 04.11.09 19:28
René R.Fo. hat folgendes geschrieben : | ich kann auch keine Hilfe Öffnen  |
Erstens: Warum bringst du das nicht zuerst in Ordnung? Unter Vista z.B. gibt es dazu die Anleitung in der Library.
Zweitens: Kein Problem, nimm doch die Online-Hilfe:
ref.dp200x.de/?query=PtInRect
docs.embarcadero.com.../Types_PtInRect.html
www.delphibasics.co....TL.asp?Name=PtInRect
...
|
|
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: 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); |
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
Boldar
      
Beiträge: 1555
Erhaltene Danke: 70
Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
|
Verfasst: Sa 07.11.09 01:34
|
|
René R.Fo. 
      
Beiträge: 116
Win7
Delphi5 Delphi2005
|
Verfasst: Do 19.11.09 20:41
|
|
René R.Fo. 
      
Beiträge: 116
Win7
Delphi5 Delphi2005
|
Verfasst: 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 
_________________ If Promille or Cannabis.Volumen > IQ then
dec(Gehirnzellen.Anzahl);
|
|