ListView - šířka sloupce   otázka

VB6/VBA

Dobrý den.

Prosím, jak mohu v objektu ListView zamknout šířku sloupce, aby nemohla být změnena uživatelem? Našel jsem řešení zde:

http://vbnet.cz/forum-tema--470-zamknout...

..ale to je pro VB.NET. Já bohužel s tímto jazykem zatím nejsem natolik obeznámem, abych si analogický algoritmus vypracoval pro VB6 sám..

Proto prosím pana Linharta nebo kohokoli ochotného, zda byste mi neporadili :)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

http://vbnet.mvps.org/index.html?code/su...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Uff.. díky za odkaz.. ale je to docela hustý na mě:). Řešení zřejmě bude spočívat ve sledování jakési systémové zprávy HDN_BEGINTRACK, zřejmě zprostředkované nějakou zprávou WM_NOTIFY, což jsem vyčetl na msdn. Moc tomu nerozumím, ale tuším, že se k tomu bude využívat asi Windows API, což jsem ale nikdy nevyužíval a taky nevím, kterou knihovnu a jak využít.. Určitě už vás to plno řešilo, tak se pochlubte:)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Bohužel některé události nejsou dostupné pro vb6

jako je tomu pro vb.net a nezbývá než subclassing.

Podobně je tomu pro scroll event a události kolem

záhlaví sloupců, třeba zobrazit menu při stisknutí

pravého tlačítka myši nad záhlavím sloupců apod.

Subclassing Listview Scrollbar Messages

http://vbnet.mvps.org/index.html?code/su...

Určitě narazíte na spoustu dalších věcí, které bez API

prostě neuděláte...

Např.

Počet viditelných položek v ListView

Private Const LVM_FIRST = &H1000
Private Const LVM_GETCOUNTPERPAGE = (LVM_FIRST + 40)

Private Function GetListviewVisibleCount() As Long
 
   GetListviewVisibleCount = SendMessageLong(ListView1.hwnd, LVM_GETCOUNTPERPAGE, 0&, ByVal 0&)
  
End Sub

Automatická šířka sloupců v ListView

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal _
    hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _
    lParam As Any) As Long

Const LVM_SETCOLUMNWIDTH = &H1000 + 30
Const LVSCW_AUTOSIZE = 65535
Const LVSCW_AUTOSIZE_USEHEADER = 65534

'Nastaví šířku každého sloupce tak, aby všechny položky byly viditelné. Pokud bude
'druhý argument True, zahrne se do přepočítání i délka textu záhlaví sloupce

Sub ListViewAdjustColumnWidth(LV As ListView, _
   Optional AccountForHeaders As Boolean)

    Dim col As Integer, lParam As Long
    
    If AccountForHeaders Then
        lParam = LVSCW_AUTOSIZE_USEHEADER
    Else
        lParam = LVSCW_AUTOSIZE
    End If
    
    For col = 1 To LV.ColumnHeaders.Count
        SendMessage LV.hwnd, LVM_SETCOLUMNWIDTH, col, lParam
    Next

End Sub

Představte si procházet textwidth subitems v listview

cyklem a podle toho nastavit šířku sloupců...

Disable Column Resizing in ListView Report Mode(.Net)

http://www.codeproject.com/KB/cpp/LVHead...

Zde případně také naleznete další inspiraci:

http://www.vbaccelerator.com/home/VB/ind...

Chlubit se cizím peřím rozhodně nechci,

snad Vám i ostatním to bude k užitku...

Mnoho zdaru!

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback