![]() |
Re: Komponente für "Brainstorm"-Diagramme gesucht
hehe, muss ich wohl noch mal genauer lesen ^^
Naja, aber ich sag mal so: Selber machen, macht ja auch mehr Spass. Mal sehen wie ich damit klar komme, ansonsten werd ich auf die fertige Komponente zurückgreifen. Aufjedenfalll gut zu wissen, das es sowas gibt :D |
Re: Komponente für "Brainstorm"-Diagramme gesucht
Liste der Anhänge anzeigen (Anzahl: 1)
Was habt ihr denn gegen den Vorschlag: Mit etwas Denkarbeit hab ich ganz schnell so eine Linie gebaut: (Siehe Anhang)
Benutzte Procedure:
Delphi-Quellcode:
procedure TForm1.Paint(x,y: integer; col: TColor; img: TImage);
var xm: integer; begin // 250 = img.Width div 2 // 150 = img.Heigth div 2 xm:=(250-x) div 2 ; with img.Canvas do begin Pen.Color:=col; moveto(250,150); // Mitte des images lineto(250-xm,150); // Waagrecht lineto(250-xm,y); // Senkrecht lineto(x,y); // nochmal waagrecht end; end; // of paint |
Re: Komponente für "Brainstorm"-Diagramme gesucht
Liste der Anhänge anzeigen (Anzahl: 1)
Soweit schonmal geil... Jetzt müsste man nur noch einbauen, dass der auch mal vertikal anfängt...
Delphi-Quellcode:
Kommt das hin? Ich konnte es leider nicht testen...
procedure TForm1.Paint(x1, y1, x2, y2: integer; col: TColor; img: TImage);
var xm, ym: integer; begin with img.Canvas do begin Pen.Color:=col; moveto(x1,y1); // Mitte des images if abs(x1-x2)>abs(y1-y2) then begin xm:=(x1-x2) div 2 ; lineto(x1-xm,y1); // Waagrecht lineto(x1-xm,y2); // Senkrecht lineto(x2,y2); // nochmal waagrecht end else begin ym:=(y1-y2) div 2 ; lineto(x1,y1-ym); // Senkrecht lineto(x2,y1-ym); // Waagerecht lineto(x2,y2); // nochmal Senkrecht end; end; end; // of paint EDIT: getestet, verändert, läuft super Nebenbei, wie hast du die Koordinaten beim Klick ausgelsen? (EDIT: hat sich erledigt) |
Re: Komponente für "Brainstorm"-Diagramme gesucht
Das sollte aber kein wirkliches Problem darstellen, oder? Skizze machen und dann kurz nachdenken.
Der Code ist fast exakt der gleiche wie der schon gepostete, also selbst ist der Programmierer :coder: |
Re: Komponente für "Brainstorm"-Diagramme gesucht
Zitat:
Zitat:
Und wie das bei Editoren so üblich ist, werden die Wünsche nach der Bedienbarkeit explodieren. Wenn man ein "Panel" verschieben kann, dann dürfte schnell der Wunsch entstehen mehrere "Panels" auf einmal verschieben zu können. Dann will der Anwender bestimmt auch die Verbindungslinien manipulieren können. Da die Diagramme bestimmt größer werden sollen als der zur Verfügung stehende Bildschirmplatz muss man Scrollen können. Dann ist folglich der nächste Wunsch, dass man Zoomen kann. Bestimmt will man das Diagramm nicht nur auf dem Bildschirm bewundern, sondern auch drucken können. Und wem ist es noch nicht passiert, dass er aus Versehen etwas gelöscht hat. Dann flucht man über die Programme die kein Undo zur Verfügung stellen. Es geht also um viel mehr als nur ein paar waagerechte und senkrechte Linien zu zeichnen. |
Re: Komponente für "Brainstorm"-Diagramme gesucht
Ja und? Diese ganzen Eigenschaften lassen sich ja auch realisieren. Bis jetzt war nur eine Möglichkeit gesucht, solche Linien zu zeichnen. Was jetzt damit gemacht wird, ist doch eigentlich wieder Tyler's Sache.
|
Re: Komponente für "Brainstorm"-Diagramme gesucht
@Eisenherz
hehe... stimmt natürlich, früher oder später steigen dann die Ansprüche. Aber mühsam ernährt sich das Eichhörnchen... ich fang erstmal klein an. Realisieren lässt sich das ja dann immer noch :) Aber erstmal folgendes, achtung, viel Code ^^
Delphi-Quellcode:
Dem Form.Paint-Ereigniss hab ich nun den ButtonClick zugeordnet, bin mir aber nicht sicher ob das der beste Weg ist.
procedure TForm1.Button1Click(Sender: TObject);
var x1, y1, x2, y2 : Integer; xdif1, ydif1 : Integer; xdif2, ydif2 : Integer; begin // PaintBox1.Canvas.Brush.Color := Form1.Color; // PaintBox1.Canvas.Rectangle(-1,-1,Form1.Width,Form1.Height); PaintBox1.Canvas.Pen.Color := Form1.Color; PaintBox1.Canvas.MoveTo(x1_,y1_); PaintBox1.Canvas.LineTo(x1_,ydif1_); PaintBox1.Canvas.MoveTo(x2_,y2_); PaintBox1.Canvas.LineTo(x2_,ydif1_); PaintBox1.Canvas.MoveTo(x1_,ydif1_); PaintBox1.Canvas.LineTo(x2_,ydif1_); PaintBox1.Canvas.LineTo(xdif1,y1); PaintBox1.Canvas.LineTo(xdif1,y2); PaintBox1.Canvas.MoveTo(xdif1,y1); PaintBox1.Canvas.LineTo(xdif1,y2); if (Panel1.Top + Panel1.Height >= Panel2.Top) then begin x1 := Panel1.Left + Panel1.Width; y1 := Panel1.Top + (Panel1.Height div 2); x2 := Panel2.Left; y2 := Panel2.Top + (Panel2.Height div 2); ydif1 := Panel2.Top - ((Panel2.Top - (Panel1.Top + Panel2.Height)) div 2); xdif1 := x1 + (Panel2.Left - ((Panel2.Left - Panel1.Left + Panel1.Width) div 2)); PaintBox1.Canvas.Pen.Color := clRed; PaintBox1.Canvas.MoveTo(x1,y1); PaintBox1.Canvas.LineTo(xdif1,y1); PaintBox1.Canvas.MoveTo(x2,y2); PaintBox1.Canvas.LineTo(xdif1,y2); PaintBox1.Canvas.MoveTo(xdif1,y1); PaintBox1.Canvas.LineTo(xdif1,y2); end else begin x1 := Panel1.Left + (Panel1.Width div 2); y1 := Panel1.Top + (Panel1.Height); x2 := Panel2.Left + (Panel2.Width div 2); y2 := Panel2.Top; ydif1 := Panel2.Top - ((Panel2.Top - (Panel1.Top + Panel2.Height)) div 2); xdif1 := (Panel2.Left - Panel1.Left + Panel1.Width) div 2; PaintBox1.Canvas.Pen.Color := clBlue; PaintBox1.Canvas.MoveTo(x1,y1); PaintBox1.Canvas.LineTo(x1,ydif1); PaintBox1.Canvas.MoveTo(x2,y2); PaintBox1.Canvas.LineTo(x2,ydif1); PaintBox1.Canvas.MoveTo(x1,ydif1); PaintBox1.Canvas.LineTo(x2,ydif1); end; x1_ := x1; y1_ := y1; x2_ := x2; y2_ := y2; ydif1_ := ydif1; xdif1_ := xdif1; end; Was mich wundert, die rote Linie wird nicht ganz korrekt gelöscht, daher hab ich (hier jetzt auskommentiert) einfach jedesmal ein grosses Rectangle in FormFarbe gemalt. Das dürfte nichts ausmachen. So schwer isses ja tatsächlich nicht :D |
Re: Komponente für "Brainstorm"-Diagramme gesucht
Das löschen per Rectangle kannst du später nicht mehr nutzen, ohne alle Verbindungen neu zu zeichnen. Benutz zum zeichnen lieber eine Procedure der du die (Anfangs- und) Endpunkte, sowie die zeichenfarbe und die Zeichenfläche übergibts. Das macht den Code übersichtlicher und du kannst einfacher an unterschiedlichen Stellen auf die procedure zugreifen. Tipp für Leserlichkeit:
Delphi-Quellcode:
=
PaintBox1.Canvas.Pen.Color := clRed;
PaintBox1.Canvas.MoveTo(x1,y1); PaintBox1.Canvas.LineTo(xdif1,y1);
Delphi-Quellcode:
with paintbox1.canvas do
pen.color:=clred; moveto(x,y); lineto(x,y); end; |
Re: Komponente für "Brainstorm"-Diagramme gesucht
Zitat:
Andererseits bedarf es dafür einer gewissen Erfahrung. Woher bekommt man die Erfahrung? Indem man selbst etliche male in solche Sackkgassen reingerannt ist. Also vergesst meinen Vorschlag und geht euren eigenen Weg. :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:49 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz