![]() |
Kreis/Linie zwischen 2 TButtons
Hallo,
ich brauche beruflich immer mal wieder Stammbäume. Zu diesem Zweck habe ich mir ein Control
Delphi-Quellcode:
gebastelt, abgeleitet von
TPerson
Delphi-Quellcode:
. Darin sind zur Laufzeit jeweils die Personendaten enthalten. Diese Personen/Buttons kann ich wiederum in einer
TBitBtn
Delphi-Quellcode:
mit der Maus frei verschieben. Vielleicht ginge das eleganter. Aber als Hobbyprogrammierer fiel mir nichts besseres ein.
TScrollBox
Ich habe den Code nun nach Jahren mal wieder vorgekramt. Mein Ziel wäre es jetzt, zwischen den Buttons in Abhängigkeit der Verwandtschaft Linien zu ziehen. Zwischen 2 Verheirateten TPersons hätte ich gern einen Kreis. Jetzt haben ich schon ![]()
Delphi-Quellcode:
Allerdings muss ich auf Änderungen reagieren. Soll heißen:
procedure TForm1.FormPaint(Sender: TObject);
begin Canvas.Pen.Style:= psSolid; Canvas.Pen.Color:= clBlue; Canvas.Pen.Width:= 1; Canvas.MoveTo(Button1.Left + (Button1.Width div 2), Button1.Top + (Button1.Height div 2)); Canvas.LineTo(Button2.Left + (Button2.Width div 2), Button2.Top + (Button2.Height div 2)); end; Wenn eine TPerson verschoben wird, muss die alte Linie/der alte Kreis weg und eine neue gemalt werden (auch ![]() Gibt es da Möglichkeiten/Ideen, ohne dass ich meinen Code vollständig neu programmieren muss? Gruß, Alex |
AW: Kreis/Linie zwischen 2 TButtons
Wenn du es beruflich brauchst, wäre hier die Wahl eines professionellen Familienforschungsprogramms nicht besser?
Beispiel: ![]() |
AW: Kreis/Linie zwischen 2 TButtons
Liste der Anhänge anzeigen (Anzahl: 1)
Nein. Leider nicht.
Denn das Beispiel Ahnenblatt kann nicht "ahnnähernd" das, was ich brauche. Auf der anderen Seite ist es viel zu umfangreich. Und die Bedienung ist viel zu kompliziert. Es geht z.B. grundsätzlich von einer Familie Mutter, Vater, Kinder aus. Wenn ich mehrere "Eltern" durch Scheidung/Heirat habe, gibt es schon Probleme. Der Baum ist - sowie ich das noch in Erinnerung habe - nicht frei drehbar. Er wird von unten nach oben aufgebaut - vom Kind zu den Eltern, es sollen ja die "Ahnen" erforscht werden. Ich brauche es genau umgekehrt. etc. pp. Ich würde mir nie die Mühe machen, etwas zu programmieren, wenn es das schon genau so gäbe, wie ich es brauche. [edit]Ich habe mal angehängt, was ich schon habe.[/edit] |
AW: Kreis/Linie zwischen 2 TButtons
Zitat:
|
AW: Kreis/Linie zwischen 2 TButtons
Es gibt verschiedene Ansatzmöglichkeiten.
Was zu empfehlen ist hängt davon ab, wie erfahren Du in den einzelnen Themenbereichen bist. Man könnte mit VCL-Controls arbeiten, diese anordnen und nur auf deren Canvas zeichnen. Man könnte die Objekte als VCL-Controls aufbauen und die Verbindungen auf das Formular malen. Oder man könnte alles auf einen Canvas malen und die Positionen virtuell merken und sozusagen bei einem Klick auf das Formular ermitteln, welches "virtuelle Control" wohl gemeint war. Ich habe alles schon gemacht. Wenn Du willst, schau mal meine Turniersoftware und dort das KO-System an. Da sind die Verbindungen mit Teil der Spiele. Die Raster der Designer sind dagegen in den Hintergrund gemalt. Den dritten Ansatz habe ich hier angewendet: ![]() und hier: ![]() Vielleicht hilft Dir das bei grundsätzlichen Überlegungen. Im Detail bleibt da natürlich noch vieles zu überlegen... |
AW: Kreis/Linie zwischen 2 TButtons
Oder man verwendetet Komponenten für Diagramme.
|
AW: Kreis/Linie zwischen 2 TButtons
Danke erstmal für die zahlreichen Tipps!
Zitat:
Zitat:
Zitat:
Für mich ist mein Programm an sich perfekt - nur die Linien fehlen. Zitat:
Ich habe mir auch ein paar der verlinkten youtube-Videos angeschaut. Gibt es da irgendwo Code-Beispiele? Das entspricht so ziemlich genau dem, was ich mir vorstelle. Die CPU-Last ist mir dabei nahezu egal. Selbst bei umfangreichen Bäumen komme ich so auf ca. 40 "Mitspieler". Und häufig wird das Bild nur einmal gebastelt und danach immer nur zum Anschauen/Drucken geladen. |
AW: Kreis/Linie zwischen 2 TButtons
Deine erste Frage zu den Images zwischen den Buttons: Ja.
Es ist halt die Frage, was Du anklicken, verschieben und in den Größen ändern willst. Danach musst Du entscheiden, ob Du Controls brauchst, die auf Mausereignisse reagieren können oder nicht. Dann ist auch die Frage, wie komplex die Linien, Kreise und andere Figuren so werden können. Wenn Du z.B. einen Kreis hast und der sich neu zeichnet, wenn Du die Größe des Images änderst, ist das komfortabel. In anderen Fällen, wenn Du z.B. eine längere Verbindungslinie über verschiedene Verwinkelungen zeichnen willst, ist ein Image vielleicht schlecht geeignet. Wenn Du nur Deine Buttons anklicken und schieben willst, dann würde ich die Figuren drum herum auf den Hintergrund malen. Dann kannst Du den Canvas auch gleich nutzen, um ein Bitmap für die Wiederverwendung zu speichern. Meinen Code könnte ich Dir geben aber das würde Dir wohl nicht viel helfen, fürchte ich. War ein ziemlich komplexes Projekt mit eigenem Framework usw. |
AW: Kreis/Linie zwischen 2 TButtons
Liste der Anhänge anzeigen (Anzahl: 2)
Die Idee mit dem Code ist total nett, würde mich aber wohl wirklich überfordern.
Ich habe mal quick & dirty etwas zusammengebastelt. Daran kann man sehen, wo ich gern hin käme. Bevor ich mich z.B. um das weitere Problem
Delphi-Quellcode:
vor/über
Button2
Delphi-Quellcode:
kümmere, hätte ich dazu mal 2 Fragen:
Button1
Für "Downloadmuffel" hier mal der Code:
Delphi-Quellcode:
Procedure TForm1.Button2MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); Const SC_DRAGMOVE = $F012; Begin If (ssLeft in Shift) Then // nur bei linker Maustaste Begin ReleaseCapture; // Freigeben der Maus Button2.Perform(WM_SYSCOMMAND, SC_DRAGMOVE, 0); // Ziehen = Bewegen Image1.Picture.Assign(nil); // Bild löschen Image1.Transparent:= True; // ==> Funktioniert schon einmal NICHT! Image1.Left:= Button1.Left + (Button1.Width div 2); Image1.Top:= Button1.Top + (Button1.Height div 2); Image1.Width:= Button2.Left - Button1.Left; Image1.Height:= Button2.Top - Button1.Top; Image1.Canvas.Pen.Style:= psSolid; Image1.Canvas.Pen.Color:= clBlue; Image1.Canvas.Pen.Width:= 5; Image1.Canvas.MoveTo(0, 0); // wohin auch sonst Image1.Canvas.LineTo(Image1.Width, Image1.Height); End; End; |
AW: Kreis/Linie zwischen 2 TButtons
Probier mal das:
Image1.Picture.Bitmap.TransparentColor := clWhite; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:15 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