AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Baumstruktur selber zeichnen

Ein Thema von erich.wanker · begonnen am 4. Jul 2016 · letzter Beitrag vom 4. Jul 2016
Antwort Antwort
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

AW: Baumstruktur selber zeichnen

  Alt 4. Jul 2016, 15:43
Der Level (also die Y Position) ist nicht so das Problem. Die X Position ist da etwas komplexer.

Und die Struktur kann er schon lesen. Es geht um die Ermittlung der X Position der jeweiligen Elemente. (oh, nee, das Lesen der Struktur ist auch noch ein Knackpunkt)
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#2

AW: Baumstruktur selber zeichnen

  Alt 4. Jul 2016, 15:54
Der Level (also die Y Position) ist nicht so das Problem. Die X Position ist da etwas komplexer.

Und die Struktur kann er schon lesen. Es geht um die Ermittlung der X Position der jeweiligen Elemente. (oh, nee, das Lesen der Struktur ist auch noch ein Knackpunkt)
die braucht er doch auch nur mitzuführen..oder macht aus der Prozedur eine Funktion und gibt diesen dann zurück


Delphi-Quellcode:
function printTree(const aPR, alevelY:integer; alevelX:integer):integer;
var
 aQuery:TQuery
begin
  aQuery:=TQuery.Create(nil);
  try
    aQuery.Database := 'myTrallalal'
    aQuery.SQL.Text := 'select INR,aa,bb,cc from myTable where PR=:pPR';
    aQuery.params[0].asinteger = aPR;
    aQuery.Open;
    while not aQuery.eof do
    begin
      inc(alevelX);

      // der Datensatz hat jetzt die Position (alevelx, alevely)

      // hier jetzt print Daten, den aLevel kann man
      // als Multiplikator für den Einzug benutzen
      ....
      alevelx:= printTree(aQuery.fieldbyname('INR',alevelY+1, alevelX); // rekursiver Aufruf der Childs
      aQuery.next;
    end;
  finally
    aQuery.Free;
  end;

  result := alevelx;
end


begin
  ..
  printTree(1,0,0);
  ..
end;

Geändert von ibp ( 4. Jul 2016 um 16:11 Uhr)
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.388 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Baumstruktur selber zeichnen

  Alt 4. Jul 2016, 17:06
Es gab da mal einen 3-teiligen Artikel von Holger Klemt, ich meine im Entwickler, vor so 15 Jahren, in dem er das für Firebird recht einfach in einer StoredProcedure implementiert hat. Diese hat sich selbst rekursiv aufgerufen und den Level damit selbst berechnet. Von daher wäre die Abfrage (wenn bei deiner DB StoredProceures unterstützt werden, recht einfach möglich) - falls du das brauchst kann ich mal nachschauen wo ich das Teil habe.

Und bzgl. der Darstellung: Müssen das unbedingt Panels sein die du irgend wo rein positionierst? Reicht für die Darstellung ggf. der VIrtualStringtree nicht auch aus?

Grüße
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Baumstruktur selber zeichnen

  Alt 4. Jul 2016, 18:57
Hattest du an so etwas gedacht
TreeStructure.PNG

Source und EXE im Anhang.

Zur Info:

Da ich nur ein kleiner Geist bin und ich mich immer nur auf eins konzentrieren kann, habe ich hierfür ein paar Klassen angelegt.
  • TFooData hat die Daten
  • TFooModel stellt die Beziehungen zwischen den Daten her
  • TFooViewModel kümmert sich um die Aufbereitung für die Anzeige (Berechnung von Width, Level, Position)
  • Die Form klatscht den ganzen Rotz dann in eine Paintbox abhängig von dem, was das ViewModel sich da zusammengerechnet hat
Angehängte Dateien
Dateityp: zip TreeStructure.zip (885,0 KB, 21x aufgerufen)
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Antwort Antwort


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 +1. Es ist jetzt 00:46 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 by Thomas Breitkreuz