AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Kreis/Linie zwischen 2 TButtons

Ein Thema von Schwedenbitter · begonnen am 5. Okt 2020 · letzter Beitrag vom 7. Okt 2020
Antwort Antwort
Seite 2 von 2     12
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.187 Beiträge
 
Delphi 10.4 Sydney
 
#11

AW: Kreis/Linie zwischen 2 TButtons

  Alt 6. Okt 2020, 21:52
Willst Du die Linien irgendwie mit der Maus beeinflussen können?

Wie viele Möglichkeiten der Verbindungen gibt es?
- LinieLinksUntenNachRechtsOben
- LinieRechtsUntenNachLinksOben
- Vollkreis
- LeererKreis

Wenn Du eine begrenzte Anzahl hast, könnte man mit einer Image überlegen.
Dann kannst Du den Status (Linienart) zuweisen, die Größe festlegen und die Linien werden passend gezeichnet.

Wenn die Anzahl der Linien oder Figuren sehr groß werden kann oder die Linien nicht auf die Maus reagieren müssen, dann würde ich eher die Buttons anordnen, die Linien in ein Bitmap zeichnen und dieses auf den Canvas des Formulars kopieren.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
v2afrank

Registriert seit: 9. Mai 2005
Ort: Bocholt
537 Beiträge
 
Delphi XE2 Professional
 
#12

AW: Kreis/Linie zwischen 2 TButtons

  Alt 7. Okt 2020, 06:54
Auch wenn es wahrscheinlich nicht hilft möchte ich die Jedis mit Ihren Diagramshapes nicht unerwähnt lassen. Schau Dir mal die Demos an.
Damit habe ich das folgende Bild realisiert
Miniaturansicht angehängter Grafiken
jedis.jpg  
  Mit Zitat antworten Zitat
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#13

AW: Kreis/Linie zwischen 2 TButtons

  Alt 7. Okt 2020, 08:15
Willst Du die Linien irgendwie mit der Maus beeinflussen können?
Nein - wird vermutlich auch nie nötig werden.

Wie viele Möglichkeiten der Verbindungen gibt es?
- LinieLinksUntenNachRechtsOben
- LinieRechtsUntenNachLinksOben
Ich habe mal weiter probiert. Vom Grundsatz her scheine ich mit den Linien klarzukommen (Screenshot). Da ein Kind i.d.R. nicht von mehr als 2 Eltern abstammt, sind es maximal 2 Verbindungen; eher nur eine.

DENN:
- Vollkreis
- LeererKreis
Der Kreis steht als Symbol für eine Ehe/Beziehung etc. Daher eben nur eine Verbindung des Kindes zu diesem Kreis (Screenshot - wo ich gern hin will). Beim Kreis komme ich wohl an einem anderen TObject nicht vorbei. Sonst wird wohl die Rechnerei zwischen Kreis und Linien zu umfangreich.

...
Dann kannst Du den Status (Linienart) zuweisen, die Größe festlegen und die Linien werden passend gezeichnet.
Verstehe ich das richtig, dass die Linien dann "automatisch" angepasst/gezeichnet werden
Falls ja, gibt es da irgendwo Beispiele zu finden?

Wenn die Anzahl der Linien oder Figuren sehr groß werden kann oder die Linien nicht auf die Maus reagieren müssen, dann würde ich eher die Buttons anordnen, die Linien in ein Bitmap zeichnen und dieses auf den Canvas des Formulars kopieren.
Was spricht dagegen, wenn man die Linien gleich auf das Canvas malt, außer vielleicht, dass sie dann beim Verschieben mal kurz verschwinden?

P.S. Zu meinem 2. Screenshot mal die (Zusatz)Frage:
Wieso erscheinen die Linien nicht beim Programmstart? Meine Malroutine lasse ich jetzt sowohl bei FormCreate (da gibt es vermutlich die Buttons noch nicht) als auch bei FormShow aufrufen. Die Linien sehe ich aber immer erst, wenn ich einen Button bewege.
Miniaturansicht angehängter Grafiken
screenshot_02.png   screenshot_03.png  
Angehängte Dateien
Dateityp: zip _move_mit_Linie_2.zip (1,8 KB, 1x aufgerufen)
Alex Winzer
  Mit Zitat antworten Zitat
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#14

AW: Kreis/Linie zwischen 2 TButtons

  Alt 7. Okt 2020, 08:35
... Jedis mit Ihren Diagramshapes ...
Danke für den Hinweis

Im Moment will ich da aber aus mind. 2 Gründen nicht ran:

Zum einen habe ich mein Programm im Grunde fertig. Ich nutze es seit gut 3 Jahren. Die Linien male ich von Hand in exportierte png-Dateien hinein. Denn i.d.R. ändern sich die Stammbäume äußerst selten. Mein neuer Ansatz ist also eher akademischer Natur und damit ich das Programmieren nicht verlerne und weil ich wissen will, ob ich es irgendwie hinbekomme
Zum anderen hatte ich mit den Jedis noch nie wirklich zu tun. Ich kenne sie und ich hatte dort wegen anderer Sachen reingeschaut (IP-Datentransfer etc.). Allerdings vermute ich, dass ich mich ewig einarbeiten muss, um annähernd so ein tolles Schaltdiagramm hinzubekommen. Und ich bin mir noch nicht einmal sicher, ob die Jedis am Ende flexibel genug für meine "Kinderzeichnungen" wären.
Alex Winzer
  Mit Zitat antworten Zitat
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#15

AW: Kreis/Linie zwischen 2 TButtons

  Alt 7. Okt 2020, 09:40
ganz so einfach wird es wohl nicht werden.

Ich habe gerade versucht, mein kleines Beispiel rudimentär in mein Programm zu implementieren.
Dummer Weise liegen meine Personen (alias TBitBtn ) in einer TScrollBox . Und wie ich feststellen musste, hat nun ausgerechnet diese kein TCanvas , auf das ich einfach mal eben malen könnte.
Meine Suche führte mich unter anderem zu diesem Beitrag. Und aus der fehlenden Antwort schließe ich nun, dass es keine (einfache) Lösung für dieses Problem gibt

Bevor ich weiter experimentiere:
Lege ich da einfach ein TImage in den Hintergrund und male auf dem?
Da habe ich aber wieder das Problem mit der nicht funktionierenden Transparenz.
Alex Winzer
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.691 Beiträge
 
Delphi 6 Enterprise
 
#16

AW: Kreis/Linie zwischen 2 TButtons

  Alt 7. Okt 2020, 09:46
Kann man nicht einfach ein Panel in die Scrollbox packen und die Buttons auf das Panel?
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.187 Beiträge
 
Delphi 10.4 Sydney
 
#17

AW: Kreis/Linie zwischen 2 TButtons

  Alt 7. Okt 2020, 10:26
Verstehe ich das richtig, dass die Linien dann "automatisch" angepasst/gezeichnet werden
Falls ja, gibt es da irgendwo Beispiele zu finden?
Ja, wenn Du die Verbindungen in eine grafische Komponente kapselst und die Art der Darstellung als Eigenschaft vorgibst.
Im Grunde genau wie ein TPanel oder TBevel.
Da hast Du z.B. eine Eigenschaft BevelOuter, die vorgibt, wie der Rahmen zu zeichnen ist.
Wenn Du die Komponente in der Größe änderst oder verschiebst, wird diese und das Formular entsprechend neu gezeichnet.

Du könntest also eine Komponente schreiben, die die Linien oder Kreise nach bestimmten Vorgaben immer gemäß der Komponentengröße passen zeichnet.


ABER:

Wenn man Dein Bild ansieht, wird das wohl eher nicht so günstig sein.
Du müsstest dann wohl mehrere Komponenten miteinander überlagern (Kreis, Linie1, Linie2, Linie3). Oder Du musst eine recht komplexe Komponente erstellen, die alle diese Figuren zusammen darstellt.
Dann wird es aber schwierig, wenn die Kinder in unterschiedlicher Höhe oder Winkel zu den Eltern ausgerichtet sind.


ALSO:

Ich würde die Verbindungen in den Hintergrund zeichnen.

Dafür könntest Du eine Panel und Paintbox oder Image nutzen, die Du in die Scrollbox legst. Auf das Panel dann auch Deine Buttons.
Dann brauchst Du Du Dich auch um das Scrollen usw nicht kümmern. Einfach nur die Größe des Panels einstellen und dann passt das.

Mit dem Erstellen der Linien in ein Bitmap und dann kopieren in den Canvas kann man Flackern verhindern, allerdings auch nur wenn man mit Threads arbeitet.
Zusätzlich hast Du die Verbindungen dann aber auch schon als Bild vorliegen, das Du dann ggf. leichter drucken kannst.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)

Geändert von stahli ( 7. Okt 2020 um 13:53 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.276 Beiträge
 
Delphi 10.4 Sydney
 
#18

AW: Kreis/Linie zwischen 2 TButtons

  Alt 7. Okt 2020, 14:54
Wieso erscheinen die Linien nicht beim Programmstart? Meine Malroutine lasse ich jetzt sowohl bei FormCreate (da gibt es vermutlich die Buttons noch nicht) als auch bei FormShow aufrufen. Die Linien sehe ich aber immer erst, wenn ich einen Button bewege.
Weil das falsch ist?

In OnPaint

und bei Änderungen ein Repaint auslösen. (falls es durchs Verschieben der Buttons nicht schon passiert)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es 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

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +2. Es ist jetzt 04:24 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf