Français
Forum

Ownerdraw Listview

 
- page 1 -



Normann
Strübli
allô Frank, allô Community,

je bastel justement à einem Listview welches Bargraphen et Bilder enthalten peux.
(était oui aussi déjà la fois irgendwo gefordert )
cette Code ist lediglich un Anfang mais peux et soll avec Eurer Aider weiterentwickelt volonté.
malheureusement habe je ihn aussi encore pas auskommentiert, mais so schwer ist il glaub je aussi pas trop comprendre.

je hoffe allerdings Frank en überzeugen trop peut so une Funktion dans sa Listview avec aufzunehmen ;D
comme Anhang habe je la fois Vorlagen qui avec masm programmiert sommes beigefügt. -Am besten la fois angucken
qui Beispiele sommes aussi comme ausführbare Dossier vorhanden. FRANK BITTE GUCK DIR DAS AN!!!

juste encore une Frage:
j'ai dem Listview den LVS_OWNDERDRAWFIXED   Style verpasst, là oui ansonsten aucun wm_drawitem
nouvelle à cela Elternfenster gesand wird. peux on es hinbekommen cela seulement chez einer Spalte cet nouvelle
verschickt wird, ensuite devrait on pas cela komplette control selbst zeichnen?!...

Salut
Normann
KompilierenMarqueSéparation
 $H Windows.ph
 $H Structs.ph
 $H Messages.ph
 $H Commctrl.ph
 $H Structs.ph
Set(FastMode,1)
Def Hiword(1) And(&(1)>>16,$Ffff)
Def Loword(1) And(&(1),$Ffff)
declare test&,itemtext$
itemtext$ = TestItem
Struct Hd_notify = ~Hd_notify
Declare Hd_notify#
Dim Hd_notify#,Hd_notify
Struct NMHDR = ~NMHDR
Declare NMHDR#
Dim NMHDR#,NMHDR
Struct DRAWITEMSTRUCT = ~DRAWITEMSTRUCT
Declare DRAWITEMSTRUCT#
Dim DRAWITEMSTRUCT#,DRAWITEMSTRUCT
Struct Rect = ~Rect
Declare Rect#
Dim Rect#,Rect
struct TWindowClass = ~WndClass
struct TMsg = ~Msg
declare WindowClass#, Msg#
declare AppName$
 $I Listview_Funktionen.inc
Declare lvdll&
lvdll&=usedll(Listview.dll)
AppName$ = Listview Test

proc WindowProc

    parameters Window&, Message&, WParam&, LParam&

    If Message& = ~Wm_notify

        NMHDR# = Lparam&

        if NMHDR#.hwndfrom& = listview&

            if NMHDR#.code& = ~NM_KILLFOCUS  Das Control hat den Focus verloren

            elseif NMHDR#.code& = ~NM_SETFOCUS  Das Control hat den Focus bekommmen

            elseif NMHDR#.code& = ~NM_CLICK  Der Anwender hat die linke Maustaste im Control geklickt

            elseif NMHDR#.code& = ~NM_DBLCLK  Der Anwender hat die linke Maustaste im Control doppel-geklickt

            elseif NMHDR#.code& = ~NM_OUTOFMEMORY  Das Control konnte die Aktion Aufgrund zu wenig Speicher nicht ausführen

            elseif NMHDR#.code& = ~NM_RCLICK  Der Anwender hat die rechte Maustaste im Control geklickt.

            elseif NMHDR#.code& = ~NM_RDBLCLK  Der Anwender hat die rechte Maustaste im Control doppel-geklickt.

            elseif NMHDR#.code& = ~NM_RETURN  Der Anwender hat die ENTER-Taste im Control gedrückt

            elseif NMHDR#.code& = ~LVN_COLUMNCLICK  Das Control hat den Focus bekommmen

            Endif

        endif

    endif

    if Message& = ~wm_drawitem

        if Wparam& = listviewid&

            DRAWITEMSTRUCT# = lparam&
            Long Rect#,0 = Long(DRAWITEMSTRUCT#,28)
            Long Rect#,4 = Long(DRAWITEMSTRUCT#,32)
            Long Rect#,8 = Long(DRAWITEMSTRUCT#,36)
            Long Rect#,12 = Long(DRAWITEMSTRUCT#,40)

            If And(Long(Lparam&,16),1)

                ~SelectObject(DRAWITEMSTRUCT#.Hdc&,~CreateSolidBrush(@RGB(200,0,0)))
                ~SetBkColor(DRAWITEMSTRUCT#.hdc&,@RGB(100,100,200))

            else

                ~SetBkColor(DRAWITEMSTRUCT#.hdc&,@RGB(200,200,200))
                ~SelectObject(DRAWITEMSTRUCT#.Hdc&,~CreateSolidBrush(@RGB(0,200,0)))

            endif

            ~Exttextout(DRAWITEMSTRUCT#.Hdc&,rect#.left&,rect#.top&,~Eto_OPAQUE,Rect#,Addr(Itemtext$),Len(Itemtext$),0)
            ~Rectangle(DRAWITEMSTRUCT#.Hdc&,120,rect#.top&,120 + rect#.top&,rect#.bottom&)

        endif

    endif

    if Message& = ~wm_Destroy

        CloseProc
        ~PostQuitMessage(0)
        END

    endif

    return ~DefWindowProc(Window&, Message&, WParam&, LParam&)

endproc

proc WinMain

    declare Window&, Message&
    dim WindowClass#,TWindowClass
    dim Msg#,TMsg

    with WindowClass#

        .style& = 0
        .lpfnWndProc& = ProcAddr(WindowProc,4)
        .cbClsExtra& = 0
        .cbWndExtra& = 0
        .hInstance& = %HInstance
        .hIcon& = ~LoadIcon(0,~idi_Information)
        .hCursor& = ~LoadCursor(0, ~idc_Arrow)
        .hbrBackground& = ~GetStockObject(~white_Brush)
        .lpszMenuName& = Addr(AppName$)
        .lpszClassName& = Addr(AppName$)

    endwith

    if ~RegisterClass(WindowClass#) = 0

        ~MessageBox(0,Fenster konnte nicht registriert werden!,Fehler,0)
        end

    endif

    Window& = ~CreateWindowEx(
    0,
    Addr(AppName$),
    Addr(AppName$),
    ~ws_OverlappedWindow,
    ~cw_UseDefault,
    ~cw_UseDefault,
    ~cw_UseDefault,
    ~cw_UseDefault,
    0,
    0,
    %HInstance,
    0)
    ~ShowWindow(Window&, ~sw_ShowNormal)
    ~UpdateWindow(Window&)
    InitMessages(Window&)
    Declare listview&,ListviewId&,Column$
    Listview& = CreateListview(Window&,%HInstance,0,-1,-1,$23)
    ~SetWindowLong(Listview&,~GWL_STYLE,@Or(~Getwindowlong(Listview&,~GWL_STYLE),~LVS_OWNERDRAWFIXED))
    ~Setprop(Listview&,OldCallback,~Setwindowlong(Listview&,~Gwl_wndproc, Procaddr(Listviewcallback,4)))
    ListviewId& = ~Getwindowlong(Listview&,~GWL_ID)
    Autosortlistview Listview&,1,1,1,1,2,2
    Column$ = Column 1
    IColumn(Listview&,addr(Column$),120,0)
    Column$ = Column 2
    IColumn(Listview&,addr(Column$),120,0)
    Column$ = Column 3
    IColumn(Listview&,addr(Column$),120,0)
    Declare bereich#,text1$,text2$,text3$
    dim bereich#,1000
    text1$=Neues_Item 1
    text2$=Neues_Item 2
    text3$=Neues_Item 3
    long bereich#,0=addr(text1$)
    long bereich#,4=addr(text2$)
    long bereich#,8=addr(text3$)

    WhileLoop 8

        SItem(listview&,bereich#,3)

    EndWhile

    Showlistview(Listview&,32,32,500,400)
    Dispose bereich#

    while ~GetMessage(Msg#, 0, 0, 0) > 0

        ~TranslateMessage(Msg#)
        ~DispatchMessage(Msg#)

    endwhile

    end

endproc

WinMain

Proc Listviewcallback

    Parameters Wnd&, Msg&, Wparam&, Lparam&

    If Msg& = ~Wm_notify

        NMHDR# = Lparam&

        If (NMHDR#.code& = ~Hdn_begintrackw) OR (NMHDR#.code& = ~Hdn_DIVIDERDBLCLICKw) Die HDN_BeginTrack Botschaft abfangen und löschen!

            Hd_notify# = Lparam&

            if (Hd_notify#.iButton& = 0) OR (Hd_notify#.iButton& = 1)

                Return 1

            Endif

        Endif

    Endif

    Return ~Callwindowproc(~Getprop(Wnd&,OldCallback),Wnd&, Msg&,Wparam&,Lparam&)

Endproc

Proc Closeproc

    Clo
ages(window&) $I Listview_dispose.inc endproc

272 kB
Hochgeladen:03.11.2005
Downloadcounter154
Download
 
03.11.2005  
 



 
- page 1 -



Normann
Strübli
Salut,

@Frank: je hoffe tu as qui célébration schadenfrei überstanden

je werd encore wahnsinnig chez qui Owerdraw-Geschichte s'il te plaît helft mir !!!

folgendes Problem:

qui WM_DRAWITEM -nouvelle wird toujours seulement einmal pro la ligne verschickt, qui SubItems doit oui mais
aussi récente gezeichnet volonté et oui c'est ca là fehlt mir qui richtige Lösungsansatz.

maintenant lese dans einer Boucle chaque Spalten aus, mais c'est eh bien wirklich pas optimal...

s'il te plaît schaut Euch cela Beispiel einmal à et gebt mir quelque chose Hilfestellung comment je es besser lösen peux.

4 kB
Kurzbeschreibung: Ownerdraw Listview -Lösungsansatz
Hochgeladen:09.11.2005
Downloadcounter155
Download
 
08.11.2005  
 




Frank
Abbing
allô Normann,

oui, qui célébration était bien.
mon ordinateur était mais dans Reparatur et verhält sich toujours quelque chose seltsam. je suis encore pas trop deinen Sachen gekommen. demain, hoffe je.
 
08.11.2005  
 




Normann
Strübli
Hi,

Neue Version, s'il te plaît Testen! (maintenant sans juste une Farbflash trop bekommen)
Sollte sich maintenant comment un entier normales Listview-Contrôle verhalten.

qui Vorteil ist z.B. cela qui Hintergrundfarbe qui selektierten la ligne toujours erkennbar bleibt

Salut
Normann

ici maln Screenshot:

95 kB
Hochgeladen:09.11.2005
Downloadcounter294
Download
 
09.11.2005  
 




Frank
Abbing
Hi,

Normann, Poste ici aussi la fois deine ph-Fichiers. je bekomme une Fehlermeldung et kanns pas testen.

qui Assembler.dll kannte je déjà. si je mich richtig erinnere, ist vous mais nie fertig geworden.
pourquoi soll je qui Dll-Funktionen car pour qui Listview.dll umsetzen, si du qui zusätzliche Dll déjà la hâte? Kombiniere doch simple beide Dlls.
 
09.11.2005  
 




Normann
Strübli
Aarrghh!!!

Stimmt qui Structs.ph hat une faute, ici qui korrigierte Version.

13 kB
Hochgeladen:09.11.2005
Downloadcounter159
Download
 
09.11.2005  
 




Frank
Abbing
Hi,

ok, habs getestet.
mais quoi bezweckst du maintenant avec cela? quoi oui c'est ca vouloir du de mir? veux du poutre et Torten dans Listviews?
 
09.11.2005  
 




Michael
Wodrich
Zumindest doch qui poutre. peux je mir comme Prozentbalken chez einem Dossier-Downloader bien présenter. là gibt es avec Sicherheit viele Opportunités.

belle Grüße
Michael Wodrich
 
Programmieren, das spannendste Detektivspiel der Welt.
09.11.2005  
 




Normann
Strübli
allô Frank,

je voudrais eigentlich (inzwischen) avec cela bezwecken quoi je avant long Zeit la fois avec dem X-menu bezweckt habe.
un Listview-Contrôle komplett den eigenen Bedürfnissen anzupassen.
Ursprünglich voulais je oui seulement une Balkenanzeige einbauen, là ca pas so sans weiters funktioniert hat, habe je
je mich avec dem Ownerdraw-Listview beschäftigt, et so gings ensuite plus...

une Unterstützung de z.B. Bargraphen de Deiner Dll wäre une Super l'affaire, je crois so penser pas
seulement Michael et je.

mon Ansatz soll une Nischenlösung son pour denjenigen qui plan et avec ca d'autre comme Text- ou bien icons dans
den Zeilen stehen avons voudrais, quoi oui theroretisch so déjà funktioniert.
(z.B. Bitmaps, Graphen, mehzeilige Felder usw...)

Votre Dll peux cela naturellement pas ersetzen et soll dem interessierten seulement la fois aufzeigen cela so une joli
bunte Listview aussi dans reinem (X-)Profan trop erschaffen ist.

mon Hauptproblem ist eh bien qui Geschwindigkeit chez qui ganzen Geschichte, et là était mon Frage
comment je meinen Code- besonders chez qui Abarbeitung qui Wm_notify-nouvelle optimaliser et plus rapide faire peux.
et qui hat là plus Ahnung de Tabellen comme Du, Frank

Comme je le disais pour Votre Listview.dll wäre cela quoi je vorhabe trop individuel, et là je cela ganze maintenant trop Fuß erledige
wäre je pour jeden Tip reconnaissant comment je cela ganze optimaliser peux...

plus voulais je doch gar pas
 
09.11.2005  
 




Normann
Strübli
@Frank:

Je länger je mich avec qui Listview-Geschichte beschäftige umso plus Probleme ergeben sich là
maintenant habe je qui Sortierung qui Zeilen avec Aider des XPIA fertiggestellt et la fois un comparaison avec
Deiner Listview.dll gemacht.
chez ca. 20.000 Entrées dauert es chez meiner variante toujours stolze 21 sekunden, chez qui Listviev.dll
seulement knapp 3 sekunden. (alors ca. 10la fois plus rapide)
cela wird oui bestimmt par den lahmen Aufruf de Profan venons.

là dans meiner liste mais bestimmt 13.000 Einträge vorhanden son volonté, habe je mir qui ganze travail wohl
umsonst gemacht -mais immerhin habe je viel dazugelernt.

alors habe Votre Listview.dll vite wieder eingebunden, malheureusement aller eh bien qui Zeilenfarben pour einer Sortierung flöten.
Ist oui aussi bien sûr là je cela lParam& member de LV_ITEM# en supplément abus habe qui Farbinformationen pour qui Entsprechende la ligne trop Sauver.
Du benutzt richtigerweise la valeur de lParam um pour qui Sortierung den neuen index qui Zeilen trop Sauver.

mais si je pas plus sais quelle la ligne pour qui Sortierung welchen index hat, et qui Befehl RaiseLine sur
seulement 1024 Zeilen beschränk ist doit je wohl anfangen trop pratiquer la magie um einer la ligne une eindeutigen Farbwert zuzuordnen
qui indépendant de qui Sortierung ist.
Irgendwo la hâte Du Schonmal sur une Frage geantwortet:
[quote-part:06c4627aa6]si du Zeilen einfügst et vouloir, cela qui farbige Markierung mitwandert, dois du cela selber programmieren.[/quote-part:06c4627aa6]
Zum Glück ist cela Superdupieinfach

...non, j'ai je n'en sais rien!
Irgendeinen Vorschlag??? *verzweifel*

Salut
Normann
 
12.11.2005  
 




Normann
Strübli
hab je encore oublier qc:

Frank, peux Du peut-être une Funktion einbauen à Zeilenhöhe einzustellen?
ou bien sais jmd. comment cela chez einer Listview funktioniert???
 
12.11.2005  
 



 
- page 2 -



Frank
Abbing
Zumindest trop deiner letzten Frage gibt es irgendeine Message.
Sobald mon ordinateur wieder fonctionne, kümmere je mich tout autor.
 
13.11.2005  
 




Frank
Abbing
Hi,

hab qui Zeilenhöhe incorporé. une Message donnais es hierzu pas, hab un peu avec Imagelisten getricks. dans qui prochain Version.

Incidemment. ici Fortschrittsbalken im Listview:
KompilierenMarqueSéparation
Randomize
Declare listview&,lvdll&,text$,text2$,x&,y&,z&,font&
Def GetSysColor(1) !USER32,GetSysColor
 $I Listview_Funktionen.inc
lvdll&=usedll(Listview.dll)
Windowstyle 543
Windowtitle Listview.dll / Prozentanzeige
Window 0,0-400,256
Cls GetSysColor(15)
font&=Create(Font,MS Sans Serif,13,0,0,0,0)
x&=MixRGBs(GetSysColor(15),$00ffffffff)
listview&=CreateListView(%hwnd,%hinstance,0,x&,-1,$31)
SetFont listview&,font&
InsertColumn listview&,Text,60,0
InsertColumn listview&,Prozent,240,0

Whileloop 12

    text2$=
    x&=Rnd(30)

    Whileloop x&

        text2$=text2$+Chr$(127)

    Wend

    text2$=text2$+     +Str$(Int(100/30*x&))+%
    text$=Item +Str$(&loop)
    SetItem listview&,text$,text2$

Wend

AutoSortListview listview&,1,1
ShowListView(listview&,8,8,370,200)
InitMessages(%hwnd)
SetTimer 1500

While 1

    waitinput
    Case %key=2:BREAK
    y&=Rnd(4)

    Whileloop 12

        text2$=
        x&=Rnd(30)

        Whileloop x&

            text2$=text2$+Chr$(127)

        Wend

        Case y&=0:text2$=text2$+     +Str$(Int(100/30*x&))+%
        SetItemText(listview&,addr(text2$),1,(&loop-1))

    Wend

Wend

KillTimer
DestroyWindow(listview&)
CloseMessages(%hwnd)
freedll lvdll&
DeleteObject font&
 $I Listview_Dispose.inc
ass=s4 href='./../../funktionsreferenzen/XProfan/end/'>Fin
 
26.11.2005  
 




répondre


Topictitle, max. 100 marque.
 

Systemprofile:

ne...aucune Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

s'il te plaît s'inscrire um une Beitrag trop verfassen.
 

Options du sujet

10.398 Views

Untitledvor 0 min.
Andre Rohland16.06.2019
Member 154727723.09.2018
Michael W.04.07.2016
Ernst04.05.2016
plus...

Themeninformationen



Admins  |  AGB  |  Applications  |  Auteurs  |  Chat  |  protection des données  |  Télécharger  |  Entrance  |  Aider  |  Merchantportal  |  Empreinte  |  Mart  |  Interfaces  |  SDK  |  Services  |  Jeux  |  cherche  |  Support

un projet aller XProfaner, qui il y a!


Mon XProfan
Privé Nouvelles
Eigenes Ablageforum
Sujets-La liste de voeux
Eigene Posts
Eigene Sujets
Zwischenablage
Annuler
 Deutsch English Français Español Italia
Traductions

protection des données


Wir verwenden Cookies seulement comme Session-Cookies à cause de qui technischen Notwendigkeit et chez uns gibt es aucun Cookies de Drittanbietern.

si du ici sur unsere Webseite klickst ou bien navigierst, stimmst du unserer Erfassung de Informationen dans unseren Cookies sur XProfan.Net trop.

Weitere Informationen trop unseren Cookies et en supplément, comment du qui Kontrolle par-dessus behältst, findest du dans unserer nachfolgenden Datenschutzerklärung.


d'accordDatenschutzerklärung
je voudrais keinen Cookie