Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Falsche Anzeige im TreeView. (https://www.delphipraxis.net/150044-falsche-anzeige-im-treeview.html)

Garfield 6. Apr 2010 08:51


Falsche Anzeige im TreeView.
 
Liste der Anhänge anzeigen (Anzahl: 4)
Mit diesem Artikel bei Delphi 3000 kann man sich in einem TreeView einen Verzeichisbaum eintragen lassen. Das habe ich mit Turbo Delphi ausprobiert und es hat gut funktioniert. Nur die kyrillischen und griechischen Zeichen wollten logischerweise nicht so wie ich. Deshalb habe ich den TreeView und was dazu gehört in die Unit uPathExplorer kopiert und anschließend einige Funktionen von A nach W geändert. Aber irgend etwas fehlt noch. Denn im Tree sehe ich bei Ansistrings nur das erste Zeichen, bei Widestrings Quadrate und Sonderzeichen. Der Text der Nodes dürfte richtig sein, denn er wird im Label richtig dargestellt.

Nachdem ich stundenlang gesucht habe, habe ich jetzt die Delphi 2010 Trial installiert und da funktioniert das modizifierte TreeView. Also fehlt noch irgendwas. Hat jemand eine Idee, was ich da übersehen habe bzw wo ich suchen müsste?

mkinzler 6. Apr 2010 08:53

Re: Falsche Anzeige im TreeView.
 
Es könnte an der damals glorreichen Idee von Borland liegen die W Varianten auf die A Varianten umzuleiten.
Du benötigst zudem Unicodefähige Komponenten

Garfield 6. Apr 2010 13:22

Re: Falsche Anzeige im TreeView.
 
In der procedure TCustomTreeView.CNNotify gibt es diese Passage:

Delphi-Quellcode:
    TVN_GETDISPINFO:
    with PTVDispInfoW(NMHdr)^
    do begin
      Node := GetNodeFromItem(item);
      if Node <> nil
      then begin
        if (item.mask and TVIF_TEXT) <> 0
        then lstrcpynW(item.pszText, PWideChar(Node.Text), item.cchTextMax - 1);
        if (item.mask and TVIF_IMAGE) <> 0
        then begin
          GetImageIndex(Node);
          item.iImage := Node.ImageIndex;
        end;
        if (item.mask and TVIF_SELECTEDIMAGE) <> 0
        then begin
          GetSelectedIndex(Node);
          item.iSelectedImage := Node.SelectedIndex;
        end;
      end;
    end;
Hier werden die Strings, welche im Treeview zu sehen sind, eingetragen (lstrcpynW im Original StrLCopy). Da es bei der Delphi 2010 Trial keine Sourcen gibt, kann ich nicht schnell mal vergleichen, ob es Unterschiede in der Deklaration gibt.

Garfield 6. Apr 2010 17:22

Re: Falsche Anzeige im TreeView.
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von mkinzler
Du benötigst zudem Unicodefähige Komponenten

Das was wir bei Turbo Delphi haben, reicht in diesem Falle aus. Ich habe mich nur ins Bockshorn jagen lassen, weil beim Case einmal beide Varianten der Variable (A und W) angegeben waren. Die anderen Variablen waren aber nur A-Versionen. Deshalb waren nach dem PWideChar nur noch die ersten Buchstaben zu sehen. Und nach dem Umschalten auf Unicode-TreeView gar nichts. Jetzt geht es. Und für diejenigen, welche es brauchen können, gibt es das ganze im Anhang. Mit Turbo Delphi ist das Beispiel auch nur halb so groß wie mit Delphi 2010.

Garfield 7. Apr 2010 10:24

Re: Falsche Anzeige im TreeView.
 
In uPathExplorer kann man die Unit Widestrings aus den Uses löschen. Beim Compilieren findet man dann die Deklaration und den Free-Befehl einer Variable vom Typ TWideStringList, welche man löschen kann. Dann kann man das ganze zum Beispiel unter D7 verwenden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:45 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz