Autor Beitrag
René R.Fo.
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 116

Win7
Delphi5 Delphi2005
BeitragVerfasst: Sa 31.10.09 17:44 
Hallo
Ich möchte einen Button auf einen anderen Fixiren ich kann ihn zwar bewegen:
ausblenden 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,$f0120); 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: 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:)

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
René R.Fo. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 116

Win7
Delphi5 Delphi2005
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 116

Win7
Delphi5 Delphi2005
BeitragVerfasst: So 01.11.09 15:17 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
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:

_________________
If Promille or Cannabis.Volumen > IQ then
dec(Gehirnzellen.Anzahl);
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 116

Win7
Delphi5 Delphi2005
BeitragVerfasst: So 01.11.09 15:46 
Prüfen ob sie sich berühren wenn Ja dann übereinanderlegen z.b.:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 116

Win7
Delphi5 Delphi2005
BeitragVerfasst: 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:

_________________
If Promille or Cannabis.Volumen > IQ then
dec(Gehirnzellen.Anzahl);
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 04.11.09 19:28 
user profile iconRené R.Fo. hat folgendes geschrieben Zum zitierten Posting springen:
ich kann auch keine Hilfe Öffnen :oops: :oops:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
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)
BeitragVerfasst: Mi 04.11.09 23:32 
Man könnte es ja auch von Hand machen:

ausblenden 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.

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1555
Erhaltene Danke: 70

Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
BeitragVerfasst: Sa 07.11.09 01:34 
user profile iconXion hat folgendes geschrieben Zum zitierten Posting springen:

Anmerkung: Aufm Desktop ists so, dass sich die Icons einem Raster anordnen. Falls du sowas hast, ists natürlich viel einfacher.

ausblenden 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. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 116

Win7
Delphi5 Delphi2005
BeitragVerfasst: Do 19.11.09 20:41 
user profile iconXion hat folgendes geschrieben Zum zitierten Posting springen:


Anmerkung: Aufm Desktop ists so, dass sich die Icons einem Raster anordnen. Falls du sowas hast, ists natürlich viel einfacher.

ausblenden 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. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 116

Win7
Delphi5 Delphi2005
BeitragVerfasst: So 20.12.09 13:43 
Ich habe es jetzt anders gelöst trotzdem danke für die antworten:
ausblenden 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,$f0120);

     If (Button1.Top<48and (Button1.Left<48then
     begin
          Button1.Top := Button2.Top;
          Button1.Left := Button2.Left;
     end;

     If (Button1.Top<216and (Button1.Top>176and (Button1.Left<48and (Button1.Left>8then
     begin
          Button1.Top := Button3.Top;
          Button1.Left := Button3.Left;
     end;

     If (Button1.Top<264and (Button1.Top>224and (Button1.Left<120and (Button1.Left>80then
     begin
          Button1.Top := Button4.Top;
          Button1.Left := Button4.Left;
     end;

noch mal danke :)

_________________
If Promille or Cannabis.Volumen > IQ then
dec(Gehirnzellen.Anzahl);