Autor Téma: TreeView  (Přečteno 303 krát)

Offline Viktor Marek

  • Mladík
  • **
  • Příspěvků: 65
  • Karma: 0
    • Verze Delphi: Delphi 5
TreeView
« kdy: 27-11-2017, 20:19:16 »
Pro zobrazení struktury adresářů a zobrazení uložených souborů používám TreeView.
Je možno v závislosti na šířce jednotlivých větví struktury adresářů (jejich názvů ) a délce názvu soborů měnit šířku TreeView včetne Formu?

Offline Delfin

  • Hrdina
  • ****
  • Příspěvků: 431
  • Karma: 21
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
Re:TreeView
« Odpověď #1 kdy: 27-11-2017, 20:24:33 »
Nee. Rodic muze se zmenou velikosti ovlivnit velikost potomku. Ne naopak. Nastavenim velikosti tree view komponenty tedy nezmenis velikost formu. Opacne to lze. Staci si spocitat velikost pro form a pro komponentu pouzit vhodny Align.
« Poslední změna: 27-11-2017, 20:28:58 od Delfin »
A co chudinky ovce? Koupíš jim snad plovací vesty? Nebo jim nasadíš chůdy? Ještě lepší, kdybys je zkřížil s delfíny na ovce hopkavé!

Offline Viktor Marek

  • Mladík
  • **
  • Příspěvků: 65
  • Karma: 0
    • Verze Delphi: Delphi 5
Re:TreeView
« Odpověď #2 kdy: 27-11-2017, 20:34:12 »
>spocitat velikost pro form

můžeš mě prosím ještě trochu popostrčit - jak na to?

Offline Delfin

  • Hrdina
  • ****
  • Příspěvků: 431
  • Karma: 21
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
Re:TreeView
« Odpověď #3 kdy: 27-11-2017, 20:36:23 »
>spocitat velikost pro form

můžeš mě prosím ještě trochu popostrčit - jak na to?

Jde o TTreeView z VCL?
A co chudinky ovce? Koupíš jim snad plovací vesty? Nebo jim nasadíš chůdy? Ještě lepší, kdybys je zkřížil s delfíny na ovce hopkavé!

Offline Viktor Marek

  • Mladík
  • **
  • Příspěvků: 65
  • Karma: 0
    • Verze Delphi: Delphi 5
Re:TreeView
« Odpověď #4 kdy: 27-11-2017, 20:44:48 »
Ano, je z palety komponent Delphi 5 (Win32)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2996
  • Karma: 29
    • Verze Delphi: XE7 professional
Re:TreeView
« Odpověď #5 kdy: 27-11-2017, 20:46:49 »
No, ide to spočítať a potom zmeniť čo potrebuješ. Ale pekne by som sa Ti poďakoval, keby sa mi formulár začal všelijako zmršťovať či rozťahovať po obrazovke. To musí byť jedine v réžii užívateľa! On jediný vie kedy, kde, koľko a ako.
Ja si v jednom prípade dynamicky generujem obsah VST (VirtualStringTree), myslím tým názvy stĺpcov, a šírku stĺpcov. To urobím iba pri zmene obsahu. Ostatné je na užívateľovi. Formulára sa nedotýkam.
Predstav si, že si užívateľ Tvoje okno pripne k pravej strane monitora. Zväčšenie jeho šírky znamená, že ideš za okraj obrazovky. Pozor, k ľavej strane má pripnutý iný program. Oba používa súčasne.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Delfin

  • Hrdina
  • ****
  • Příspěvků: 431
  • Karma: 21
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
Re:TreeView
« Odpověď #6 kdy: 27-11-2017, 23:01:14 »
>spocitat velikost pro form

můžeš mě prosím ještě trochu popostrčit - jak na to?

Muzu, ale jen pro viditelne vetve stromu. Windows tree view nenabizi mereni pro vetve ktere nejsou aktualne expandovane :-[ Makro TreeView_GetItemRect funguje jen pro viditelne vetve.

No, ide to spočítať a potom zmeniť čo potrebuješ. Ale pekne by som sa Ti poďakoval, keby sa mi formulár začal všelijako zmršťovať či rozťahovať po obrazovke. To musí byť jedine v réžii užívateľa! On jediný vie kedy, kde, koľko a ako.

Souhlas. Taky nemam rad kdyz se mi nekdo hybe s kurzorem nebo okny.
A co chudinky ovce? Koupíš jim snad plovací vesty? Nebo jim nasadíš chůdy? Ještě lepší, kdybys je zkřížil s delfíny na ovce hopkavé!

Offline Viktor Marek

  • Mladík
  • **
  • Příspěvků: 65
  • Karma: 0
    • Verze Delphi: Delphi 5
Re:TreeView
« Odpověď #7 kdy: 28-11-2017, 19:59:58 »
Neměl jsem vůbec v úmyslu měnit velikost formuláře v okamžiku kdy uživatel otevře větve stromu.
Moje představa byla, že v okamžiku kdy se otevře modální okno s TreeView se jeho šířka potažmo šířka Formu nastaví na šířku nejdelší větve a souboru v něm. Aby okno nezmizelo za obzor, byla by podmínka na jakou maximální šířku se může form roztáhnout. Pak by bylo na uživateli, zda použije posuvník, nebo si myší okno upraví.

Offline Delfin

  • Hrdina
  • ****
  • Příspěvků: 431
  • Karma: 21
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
Re:TreeView
« Odpověď #8 kdy: 28-11-2017, 20:38:09 »
Neměl jsem vůbec v úmyslu měnit velikost formuláře v okamžiku kdy uživatel otevře větve stromu.
Moje představa byla, že v okamžiku kdy se otevře modální okno s TreeView se jeho šířka potažmo šířka Formu nastaví na šířku nejdelší větve a souboru v něm. Aby okno nezmizelo za obzor, byla by podmínka na jakou maximální šířku se může form roztáhnout. Pak by bylo na uživateli, zda použije posuvník, nebo si myší okno upraví.

Chapu; on je jen problem s merenim velikosti vetvi. Musi byt viditelne, jinak TreeView_GetItemRect makro resp. patricna zprava nevrati obdelnik s velikosti. Slo by to "hrubym" odhadem. Sirku textu i odsazeni vetvi zjistit lze; nejsou vsak popsany rozmery margins okolo textu a mam takovy dojem ze se budou v ruznych verzich Windows lisit.
A co chudinky ovce? Koupíš jim snad plovací vesty? Nebo jim nasadíš chůdy? Ještě lepší, kdybys je zkřížil s delfíny na ovce hopkavé!

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2996
  • Karma: 29
    • Verze Delphi: XE7 professional
Re:TreeView
« Odpověď #9 kdy: 28-11-2017, 22:06:13 »
Citace
Sirku textu i odsazeni vetvi zjistit lze; nejsou vsak popsany rozmery margins okolo textu a mam takovy dojem ze se budou v ruznych verzich Windows lisit.
V takých prípadoch používam u nás obľúbenú bulharskú konštantu :)  To asi autorovi otázky postačí.
Keď si to dobre pamätám, tak ani skutočnú dĺžku textu v pixeloch som nedostal späť presne. Mám pocit, že bold dokáže narobiť paseku.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Ondřej Pokorný

  • Guru
  • *****
  • Příspěvků: 706
  • Karma: 41
    • Verze Delphi: Primárně Lazarus, jinak D7 až aktuální
    • Kluug.net
Re:TreeView
« Odpověď #10 kdy: 28-11-2017, 22:22:41 »
Mám pocit, že bold dokáže narobiť paseku.

 ;D  ;D  ;D (nic ve zlém :) )
Embarcadero Technology Partner, juj. Člen Lazarus týmu, oj.

Offline Viktor Marek

  • Mladík
  • **
  • Příspěvků: 65
  • Karma: 0
    • Verze Delphi: Delphi 5
Re:TreeView
« Odpověď #11 kdy: 28-11-2017, 22:30:31 »
Neberu to osobně - kdo se nezeptá nic se nedoví.

Offline Delfin

  • Hrdina
  • ****
  • Příspěvků: 431
  • Karma: 21
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
Re:TreeView
« Odpověď #12 kdy: 29-11-2017, 01:19:22 »
Napadlo me jeste ze vsech vetvi ulozit stav rozbaleni, cely strom rozbalit, zmerit a nastavit vetvim zpet jejich stav rozbaleni.

Ta TreeView_GetItemRect potvora mi ale nedokaze vratit rozumne vysledky. S priznakem ze chci nejen text vraci stale stejnou sirku obdelniku (pri variabilnich sirkach vetvi), pri mereni jen textu zase hodnoty o nekolik pixelu vetsi nez text skutecne zabira. Jde o 64-bit Windows 7 se vsemi updaty. Kontroloval jsem i deklarace podle Windows SDK 10.0.16299.0 a chybu v Delphi Tokyo nevidim. Nechapu co s tim je :(
A co chudinky ovce? Koupíš jim snad plovací vesty? Nebo jim nasadíš chůdy? Ještě lepší, kdybys je zkřížil s delfíny na ovce hopkavé!

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2996
  • Karma: 29
    • Verze Delphi: XE7 professional
Re:TreeView
« Odpověď #13 kdy: 29-11-2017, 08:03:50 »
Ešte si môžeš vybrať mnou hore spomenutý VirtualStringTree. Tam to ide urobiť.

OT: že to so zistením šírky textu nie je tak celkom jednoduché/jednoznačné dokazuje aj Excel. Dám nastaviť šírku stĺpca podľa obsahu. Vidím, že tam je ešte nejaká rezerva. A niekedy dosť veľká. Dám tlačiť/zobraziť náhľad pred tlačou a text nie vidieť celý. Možno to má len súvislosť s tlačou, ale aj tak...
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Delfin

  • Hrdina
  • ****
  • Příspěvků: 431
  • Karma: 21
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
Re:TreeView
« Odpověď #14 kdy: 29-11-2017, 08:26:29 »
Ešte si môžeš vybrať mnou hore spomenutý VirtualStringTree. Tam to ide urobiť.

Snad s trochou stesti. OP ma Delphi 5, VT je oficialne od Delphi 7.

OT: že to so zistením šírky textu nie je tak celkom jednoduché/jednoznačné dokazuje aj Excel. Dám nastaviť šírku stĺpca podľa obsahu. Vidím, že tam je ešte nejaká rezerva. A niekedy dosť veľká. Dám tlačiť/zobraziť náhľad pred tlačou a text nie vidieť celý. Možno to má len súvislosť s tlačou, ale aj tak...

Pokud vis jak se text vykresluje, pak mas pomerne velkou sanci si ho pomoci daneho API i zmerit. WinAPI ma napr. funkci DrawText, a s pouzitim flagu DT_CALCRECT si muzes zmerit velikost obsahu ktery by se bez toho flagu vykreslil (v Delphi VCL je zabalena metodou Canvas.TextRect).
A co chudinky ovce? Koupíš jim snad plovací vesty? Nebo jim nasadíš chůdy? Ještě lepší, kdybys je zkřížil s delfíny na ovce hopkavé!

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 2996
  • Karma: 29
    • Verze Delphi: XE7 professional
Re:TreeView
« Odpověď #15 kdy: 29-11-2017, 09:09:01 »

Citace
Snad s trochou stesti. OP ma Delphi 5, VT je oficialne od Delphi 7.
Hm, na tejto stránke sa spomína aj Delphi 5 https://www.jam-software.com/virtual-treeview/features.shtml
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

 

S rychlou odpovědí můžete používat BB kódy a emotikony jako v běžném okně pro odpověď, ale daleko rychleji.

Jméno: E-mail:
Ověření:
Kolik je šest plus čtyři (slovem):