Hallo,
da hast Du etwas vorgenomen. Ok ich habe das bei einem Projekt von mir
folgendermaßen realisiert:
1. Es gibt ein Basisobjekt, welches alle grundlegenden Methoden wie
Create, Destroy, Draw, DrawSelectors, PtInObejkt (Punkt oder Maus befindet sich im Object), SaveToStream, LoadFromStream als virtuelle Methoden enthält.
2. Diese werden das an die eigentlichen Objekte, wie Linien, Kreise, Vierecke u.s.w vererbt und mit Leben gefüllt.
3. Alle Objekte werden in einer Liste vom Typ des Grundobjekts gespeichert. Da alle grundlegenden Methoden virtuell generiert sind reicht es z.B. zum Zeichnen aus, mit einer For-Schleife durch die Liste zu wandern und die Draw-Routinen aufzurufen.
Ich benutzte zum Zeichnen, Verschieben die Ereignisse MouseDown, MouseMove, MouseUp. Das OnDrag-Event eignet sich meiner Meinung nach nur für Objekte die auf Basis der VCL erstellt wurden, wie Shape.
Nun noch ein bischen Code für das Grid-Problem:
Die Routine verschiebt einen Punkt auf das nächste Raster.
Grid ist eine globale Variable, die das Raster enthält.
Für vertikale und horizontale Koordinaten muss die Routine zweimal
aufgerufen werden.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| function TMainForm.MoveToGrid(c: integer): integer; begin if Grid = 1 then Result := c else if c < 0 then Result := (c - Grid div 2) div Grid * Grid else Result := (c + Grid div 2) div Grid * Grid; end; |
Moderiert von
Peter Lustig: Code- durch Delphi-Tags ersetzt