Hi Andy77
Du solltest folgendes versuchen:
Setze linke Seite eine Bibliothek, aus welcher du dir Elemente ziehen kannst. Damit diese wissen wohin, mußt du dir gültige xy-Koordinaten setzen.
Ich hab’s über onMouseDown gelöst. Nun, vielleicht nicht so effektiv und schnell wie ein Record, aber einfach.
Delphi-Quelltext
1:
| Var MousePoint : String; |
Initialisieren mit
Delphi-Quelltext
Im OnMousedown
MousePoint:=IntToStr(x)+‘;‘+IntToStr(y);
Im Programm gibst du deine Bibliothek nur frei, wenn ein gültiger MousePoint vorliegt...
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| If MousePoint<>‘x‘ then Begin X:=StrToInt(Copy(MousePoint, 1, Pos(‚;‘,MousePoint)-1)); Y:= StrToInt(Copy(MousePoint, Pos(‚;‘,MousePoint)+1,Length(MousePoint)- Pos(‚;‘,MousePoint))); ..... Deine Platzberechnung und das weitere Programm... .... end; |
In deine Bibliothek baust du dir die BitBTn ein, die du brauchst:
Rohrstück
T-Stück
Bogen 1-4
Ventil
Pumpe
Kesselzulauf
Kesselablauf
etc.
Im OnClick dieser Bibliotheks-Buttons fragst du die Gültigkeit der Variable Mousepoint ab und generierst zur Laufzeit ein BitBtn unter Zuhilfenahme der Biblotheks –Objekte. Lediglich die Ereignisprozeduren sind anders. Damit du diese benutzen kannst, mußt du sie im Vorfeld deklarieren. Ich nehme immer ein Object, und erzeuge die Ereignisprozeduren aus dem Objektinspektor. Dann geb ich den Procedures meinen Namen. Zur Laufzeit wird diese Procedure dann dem Ereignis zugeordnet. Das Hilfs-Object wird wieder entfernt. Es hat seinen Job gemacht. Hier ein Beispiel
Delphi-Quelltext
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| MyRohrBtn:=TBitBtn.Create( Self); MyRohrBtn.Name:=Rohr+IntToStr(Rohrzaehler); MyRohrBtn.Left:=x+(Offsetx); MyRohrBtn.Top:=y+Offsety); MyRohrBtn.Glyph:= Bib_Rohr.Glyph; MyRohrBtn.OnClick:=myProcedure; MyRohrBtn.Parent:=myForm1 Mousepoint:=‘x‘; |
Wenn du Panel erzeugst, kannst du sogar x-beliebige Seiten verwalten. Du mußt nur deinen erzeugten Objecten einen Namensanteil der Seite verpassen. Und wenn du diese Namen speicherst, kannst du aus der Namensstruktur deine Objekte wieder erzeugen. Wenn du da Hilfe brauchst kann ich dir ein paar Tipps geben. Wie gesagt, ähnliches mache ich mit Logikelementen.
Übrigends, wenn du MousePoint aus einer Recordvariablen, oder TPoint nehmen willst, kannst du auch eine der beiden Werte auf eine negative Zahl setzen, um die Ungültigkeit zu erklären.
Gruß oldmax
Zier dich nich so, ich krieg dich schon....