D
Hi,
ich kann aus Erfahrung sprechen da ich ein kleines Cad-Programm geschrieben habe. Ich hab die TPaintbox Komponente benutzt.
Dein vorhaben ist dagegen einfach. Denn du musst dir ja keine Formen merken, wie z.b Kreise, Vierecke etc.
Die TPaintBox besitzt doch TCanvas.
Du musst einfach in den TPaintBox Mous-Events, wie z.B OnMousDown, OnMousMove und OnMousUp eine logik einbauen die so gestaltet ist und erkennt ob du nun einen Strich Kreis Elipse oder Viereck malen willst.
Um so eine Logik zu verwirklichen baust du in die TForm-Header (form1.h) 4 public- bool's ein. Diese bools setzt du im Konstruktor deiner Form alle auf false (sicher ist sicher). Jetzt setzt du 4 TSpeedButtons ab, und verleist ihnen ein Symbol (Kreis viereck...) als Bitmap.
Also wenn du den kreis drückst dann wird die bool für den Kreis true die anderen false. (das gleiche Schema für den Viereck-Button....)
Jetzt kommt als nächstes das OnMousDown Ereigniss der TPaintBox-Komponente, da du mit zeichen anfangen wilst. Da du in OnMousDown ein logik hast die erkennt was du wilst, wird es funktionieren. Diese Logik muss auch für die anderen 2 Ereignisse verwendet werden.
Zum Anfang empfehle ich dir nur OnMousDown und OnMousUp zu verwenden.
Bei einem Strich musst du dir den Anfangspunkt der linie (global) merken (in OnMousDown wird X, Y Koordinate des Punktes (x1,y1) übergeben).
Bei OnMousUp wird die Linie beendet, also wenn du den Mous-Knopf loslässt.
Diesem Ereigniss wird ebenfalls die Koordinate übergeben (x2,y2).
Wenn das passiert ist dann machst du
PaintBox1->Canvas->MoveTo(x1,y1);
PaintBox1->Canvas->LineTo(x2,y2);
Strichfarbe:
PaintBox1->Canvas->Pen->Color=clBlue;
Strichdicke:
PaintBox1->Canvas->Pen->Width=5;
gestrichelt:
PaintBox1->Canvas->Pen->Mode=//Borland hilfe durch drücken von F1 um mode... oder ALT+Leertaste
Bei einer elipse machst du
PaintBox1->Canvas->Ellipse(x1,y1,x2,y2);
Rand einsellungen ist der Canvas->Pen
das Füllmuster ist Canvas->Brush.
Als Krönung deines Vorhabens kannst du noch das OnMouseMove Ereigniss dazu benutzen um in Echtzeit einen vorgeschack der zu zeichnenden Linie zu geben. Dazu den alten strich übermalen und mit neuem ersetzen.
(such mal in der Borland hilfe nach pmNotXor, ich kann nicht mehr sagen ob diese Konstante zum Brush oder Pen Mode gehört.
Auf jedenfall kannst du so irgendwie verhindern das in OnMouseMove der alte Strich auch die Darunter liegende Form mit löscht, und z.B in einem Kreis ein weiser strich bleibt!!!)
Güsse