|
Registriert seit: 22. Dez 2009 5 Beiträge |
#1
Guten Morgen,
ja Probleme sind gelöst, das hier kann jetzt jeder verwenden, der ein Vieleck, wie MS-Paint zeichnen möchte... hier sind die relevanten Codeauschnitte:
Delphi-Quellcode:
private
var Zeichenart : Integer; // damit das Programm weiß welcher button grade geklickt ist Stiftart : TPenStyle; // Speichert die Stiftart zwischen Pinselart : TBrushStyle; // Speichert die Brushart zwischen Zeichnen : Boolean; // legt fest ob bei Mausbewegung gezeichnet werden soll Stiftfarbe,Pinselfarbe : TColor; // Farbe von Pinsel(Ausfüllen) und Stift x0,y0,x1,y1 : Integer; // ist für das Zeichnen wichtig (x,y Positionen) ... Anfangen : boolean; // für Vielecke zeichnen wichtig Punktezahl : integer; // für Vielecke zeichnen wichtig Punkte : array[0..100] of TPoint; // für Vielecke zeichnen wichtig (theoretisch bis zu einem 100-Eck, ist so gewählt, damit es nie passieren wird, da 100-eck sehr unwahrscheinlich ist Punkt : TPoint; // zum Auslesen eines Punktes aus dem Array nötig, da man die Koordinaten nicht direkt bekommt Punktezeichnen : array of TPoint; // dynamisches Array ist notwendig fürs Vieleck zeichnen
Delphi-Quellcode:
procedure TForm2.SpeedButton25Click(Sender: TObject); // Vieleck
begin Speedbutton25.Down; // Button soll unten bleiben beim Drücken Zeichenart := 10; // legt die Zeichenart fest Unsichtbar; // Labels und Editfleder unsichtbar machen end;
Delphi-Quellcode:
procedure TForm2.Image1MouseDown(Sender: TObject; Button: TMouseButton; // Wenn man die Maus über Image1 drückt
Shift: TShiftState; X, Y: Integer); var i,j : integer; // Lokale Zählvariablen begin x := round(x/Zoomfaktor); // wenn das Bild gezoomt ist müssen die Koordinaten entsprechend angepasst werden y := round(y/Zoomfaktor); // wenn nicht, dann ist der Faktor = 1 Zeichnen := true; // Es soll gezeichnet werden x0 := x; y0 := y; x1 := x; y1 := y; // X- und Y-Werte merken with Image1.Canvas do // Verkürzung begin Pen.Color := Stiftfarbe; // Pinselfarbe, Style usw übergeben Pen.Style := Stiftart; Brush.Color := Pinselfarbe; Brush.Style := Pinselart; case Zeichenart of // if Abfrage mit sehr vielen Möglichkeiten (welche Zeichenart?) // zeichenmodus für die einzelenn Zeichenarten festlegen ... 10: begin Pen.Mode := pmNotXor; // Vielecke ( Mode = mit Pixeln verknüpfen) if Anfangen = false then begin Punkt := Punkte[Punktezahl]; // letzten Punkt auslesen x0:= Punkt.X; // x und y-Wert des letzten Punktes auslesen y0:= Punkt.Y; Moveto(x0,y0); Lineto(x,y); end; end; ...
Delphi-Quellcode:
procedure TForm2.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, // wenn man die Maus über Image1 bewegt
Y: Integer); var i,j : integer; // Lokale Zählvariablen begin x := round(x/Zoomfaktor); // wenn das Bild gezoomt ist müssen die Koordinaten entsprechend angepasst werden y := round(y/Zoomfaktor); // wenn nicht, dann ist der Faktor = 1 if Zeichnen then begin with Image1.Canvas do begin case Zeichenart of // if Abfrage mit sehr vielen Möglichkeiten (wie soll gezeichnet werden?) ... 10: begin // Vieleck Moveto(x0,y0); // Es wird mit den alten werden gelöscht (durch erneutes Zeichnen) Lineto(x1,y1); Moveto(x0,y0); // Es wird mit den neuen Werten gezeichnet Lineto(x,y); end; ...
Delphi-Quellcode:
procedure TForm2.Image1MouseUp(Sender: TObject; Button: TMouseButton; // wenn man die Maustaste über Image1 wieder loslässt
Shift: TShiftState; X, Y: Integer); begin x := round(x/Zoomfaktor); // wenn das Bild gezoomt ist müssen die Koordinaten entsprechend angepasst werden y := round(y/Zoomfaktor); // wenn nicht, dann ist der Faktor = 1 Zeichnen := false; // nachdem die Maustaste losgelassen wurde soll nicht mehr gezeichnet werden with Image1.Canvas do //mit Image1.Canvas tue.. begin Pen.Mode := pmCopy; // das, was nun gezeichnet wird, soll auf Image1 überschrieben werden case Zeichenart of // fragt ab, wie gezeichnet werden soll ... 10: begin // Vieleck if Anfangen then // wenn man beginnt das Vieleck zu zeichnen (in dem Moment ist es dasselbe, wie ein Linie ziehen) begin Moveto(x0,y0); // Es wird mit den alten werden gelöscht (durch erneutes Zeichnen) Lineto(x1,y1); Moveto(x0,y0); // Es wird mit den neuen Werten gezeichnet Lineto(x,y); Anfangen := false; // Erste Linie ist gezogen Punkte := Point(x0,y0); // Ursprungspunkt speichern Punktezahl := Punktezahl + 1; // jetzt gibt es einen Punkt mehr Punkte[Punktezahl] := Point(x,y); // letzten Punkt abspeichern end else begin Moveto(x0,y0); // Es wird mit den alten werden gelöscht (durch erneutes Zeichnen) Lineto(x1,y1); Moveto(x0,y0); // Es wird mit den neuen Werten gezeichnet Lineto(x,y); Punktezahl := Punktezahl + 1; // jetzt gibt es einen Punkt mehr Punkte[Punktezahl] := Point(x,y); // letzten Punkt abspeichern end; end; ...
Delphi-Quellcode:
procedure TForm2.Image1DblClick(Sender: TObject); // Beim Doppelklick
var i :integer; begin if Zeichenart = 10 then // wenn ein Vieleck gezeichnet wird begin Lineto(x0,y0); // Letzte Linie, die durch den Doppelklich entstanden ist löschen // es ist immernoch pmNotXor aktiv setLength(Punktezeichnen, (Punktezahl)); // Dynamisches Array wird auf die richtige Länge gesetzt for i := 0 to Punktezahl - 1 do begin Punktezeichnen[i] := Punkte[i]; end; with Image1.Canvas do // Verkürzung begin Pen.Mode := pmCopy; // jetzt fest zeichnen Pen.Color := Stiftfarbe; // Pinselfarbe, Style usw übergeben Pen.Style := Stiftart; Brush.Color := Pinselfarbe; Brush.Style := Pinselart; Polygon(Punktezeichnen); Anfangen := true; Punktezahl := 0; end; end; end; mfg Alex //edit1: ein Fehler gefunden ![]() // edit2: code geupdatet genauso verwende ich ihn // edit3: code geupdatet //edit4: so funktioniert es jetzt, wie es soll ![]() und weiter ![]() |
![]() |
Ansicht |
![]() |
![]() |
![]() |
ForumregelnEs ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus. Trackbacks are an
Pingbacks are an
Refbacks are aus
|
|
Nützliche Links |
Heutige Beiträge |
Sitemap |
Suchen |
Code-Library |
Wer ist online |
Alle Foren als gelesen markieren |
Gehe zu... |
LinkBack |
![]() |
![]() |