Español
Foro

Ownerdraw Listview

 

Normann
Strübli
¡Hola Franco, hallo Comunidad,

Yo bastel gerade a una Listview welches Bargraphen y Bilder enthalten kann.
(war en efecto ya veces irgendwo gefordert )
Dieser Code es lediglich una Anfang aber kann y se con Eurer Ayuda weiterentwickelt voluntad.
Leider Yo ihn auch todavía no auskommentiert, aber así schwer es él glaub Yo auch no a verstehen.

Yo hoffe allerdings Franco su überzeugen a puede así una Función en seine Listview con aufzunehmen ;D
Als Anhang Yo veces Vorlagen el con masm programmiert son beigefügt. -Am besten veces angucken
el Beispiele son auch como ausführbare Expediente disponible. FRANK BITTE GUCK DIR DAS AN!!!

Gleich ni Cuestión:
Yo habe el Listview el LVS_OWNDERDRAWFIXED   Style verpasst, como sí ansonsten no wm_drawitem
nachricht a el Elternfenster gesand se. Kann uno lo hinbekommen el sólo en uno Spalte esta Nachricht
verschickt se, entonces debería uno no el komplette control incluso dibujar?!...

Saludo
Normann
KompilierenMarcaSeparación
 $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
Ladeanzahl147
Descargar
 
03.11.2005  
 




Frank
Abbing
Hi,

nein, Ownerdraw umfasst todos Sachen. Entweder oder. Nur una bischen va no.
Su Sachen seh Yo morgen a. Muss igual los para Betriebsfest
 
03.11.2005  
 




Normann
Strübli
¡Hola,

@Franco: Yo hoffe Usted hast el Feier schadenfrei überstanden

Yo werd todavía wahnsinnig en Owerdraw-Geschichte Por favor, helft me !!!

folgendes Problema:

El WM_DRAWITEM -Nachricht se siempre sólo una vez pro Línea verschickt, el SubItems necesario sí aber
auch redibujar y ser exactamente fehlt me el richtige Lösungsansatz.

Jetzt lese en uno Bucle cada Spalten de, aber el es nun wirklich no optimal...

Bitte schaut Euch el Ejemplo una vez a y gebt me algo Hilfestellung Yo lo mejor lösen kann.

4 kB
Kurzbeschreibung: Ownerdraw Listview -Lösungsansatz
Hochgeladen:09.11.2005
Ladeanzahl137
Descargar
 
08.11.2005  
 




Frank
Abbing
¡Hola Normann,

sí, el Feier war bien.
Mein Computer war aber en Reparatur y verhält se siempre todavía algo seltsam. Yo bin todavía no a deinen Sachen gekommen. Morgen, hoffe Yo.
 
08.11.2005  
 




Normann
Strübli
Hi,

Neue Versión, Por favor, Testen! (Jetzt sin igual una Farbflash a bekommen)
Sollte se ahora como una bastante normales Listview-Control comportamiento.

Der Vorteil es z.B. el el Color de fondo el selektierten Línea siempre erkennbar restos

Saludo
Normann

Hier maln Screenshot:

95 kB
Hochgeladen:09.11.2005
Ladeanzahl281
Descargar
 
09.11.2005  
 




Frank
Abbing
Hi,

Normann, poste hier auch veces deine ph-Archivos. Yo bekomme una Fehlermeldung y kanns no testen.

El Ensamblador.dll kannte Yo ya. Wenn Yo mich correcto erinnere, es ellos aber nie fertig geworden.
¿Por qué se Yo el Dll-Características porque para el Listview.dll umsetzen, si du el zusätzliche Dll ya hast? Kombiniere doch simplemente beide Dlls.
 
09.11.2005  
 




Normann
Strübli
Aarrghh!!!

Stimmt el Structs.ph ha una Fehler, hier el korrigierte Versión.

13 kB
Hochgeladen:09.11.2005
Ladeanzahl146
Descargar
 
09.11.2005  
 




Frank
Abbing
Hi,

ok, habs getestet.
Aber qué bezweckst du ahora así? Was genau möchtest du de me? Willst du Balken y Torten en Listviews?
 
09.11.2005  
 




Michael
Wodrich
Zumindest doch el Balken. Kann Yo como Prozentbalken en una Expediente-Downloader bien vorstellen. Puesto que hay lo con Sicherheit viele Möglichkeiten.

Schöne Grüße
Michael Wodrich
 
Programmieren, das spannendste Detektivspiel der Welt.
09.11.2005  
 




Normann
Strübli
¡Hola Franco,

Yo möchte eigentlich (inzwischen) así bezwecken Yo antes langer Tiempo veces con el X-menü bezweckt habe.
Ein Listview-Control komplett el eigenen Bedürfnissen anzupassen.
Ursprünglich Yo quería sí sólo una Balkenanzeige einbauen, como esto no es así sin weiters funktioniert ha, Yo
Yo mich con el Ownerdraw-Listview beschäftigt, y así gings entonces más...

Un Unterstützung de z.B. Bargraphen de Deiner Dll wäre una Super Sache, Yo glaube así denken no
sólo Michael y yo.

Mein Ansatz se una Nischenlösung ser para denjenigen el eben todavía algo que no sea de texto- oder icons en
el Zeilen posición haben möchte, qué sí theroretisch así ya funktioniert.
(z.B. Bitmaps, Graphen, mehzeilige Felder usw...)

Su Dll puede natürlich no sustituir y se el interessierten sólo veces aufzeigen el así una hübsch
bunte Listview auch en reinem (X-)Profano a erschaffen es.

Mein Hauptproblem es nun el Geschwindigkeit en ganzen Geschichte, y como war mi Cuestión
Yo media Code- besonders en Abarbeitung el Wm_notify-Nachricht optimieren y más rápido hacer kann.
Und wer ha como mehr Idea de Tabellen como Usted, Franco

Como ya he dicho para Su Listview.dll wäre el Yo vorhabe a individuell, y como Yo todos ahora a Fuß erledige
wäre Yo para cada Tip dankbar como yo todo optimieren kann...

mehr Yo quería doch nada
 
09.11.2005  
 




Normann
Strübli
@Franco:

Je länger Yo mich con el Listview-Geschichte beschäftige umso mehr Problemas ergeben se como
Jetzt Yo el Sortierung el Zeilen con Ayuda des XPIA fertiggestellt y veces una Vergleich con
Deiner Listview.dll gemacht.
En ca. 20.000 Einträgen dauert lo en meiner Variante siempre todavía stolze 21 sekunden, en Listviev.dll
sólo knapp 3 sekunden. (also ca. 10veces más rápido)
Das se sí determinado por el lahmen Aufruf de Profano kommen.

Como en meiner Liste aber determinado 13.000 Einträge disponible ser voluntad, Yo me el todo Arbeit wohl
umsonst gemacht -aber immerhin Yo viel dazugelernt.

Also habe Su Listview.dll rápidamente otra vez eingebunden, desafortunadamente ir nun el Zeilenfarben después de uno Sortierung flöten.
Ist en efecto klar como Yo el lParam& member de LV_ITEM# dazu mißbraucht habe el Farbinformationen para el Entsprechende Línea a Guardar.
Usted benutzt richtigerweise valor de lParam en después de el Sortierung el neuen Index el Zeilen a speichern.

Aber si yo no mehr weiß welche Línea después de el Sortierung welchen index ha, y Befehl RaiseLine en
sólo 1024 Zeilen beschränk es muß Yo wohl anfangen a Zaubern en uno Línea una eindeutigen Farbwert zuzuordnen
el unabhängig de el Sortierung es.
Irgendwo hast Usted schonmal en una Cuestión geantwortet:
[quote:06c4627aa6]Wenn du Zeilen einfügst y möchtest, el el farbige Markierung mitwandert, mußt Si es usted el selber programa.[/quote:06c4627aa6]
Zum Glück es el Superdupieinfach

...nein, Yo ni idea!
Irgendeinen Vorschlag??? *verzweifel*

Saludo
Normann
 
12.11.2005  
 




Normann
Strübli
tener Todavía vergessen:

Franco, kannst Usted tal vez una Función einbauen a Zeilenhöhe einzustellen?
Oder weiß jmd. como en el uno Listview funktioniert???
 
12.11.2005  
 




Respuesta


Título del Tema, max. 100 Signo.
 

Systemprofile:

Kein Systemprofil creado. [anlegen]

XProfan:

 Contribución  Font  Smilies  ▼ 

Bitte registro en una Contribución a verfassen.
 

Tema opciones

9.487 Views

Untitledvor 0 min.
Andre Rohland16.06.2019
Member 154727723.09.2018
Michael W.04.07.2016
Ernst04.05.2016
Más...

Themeninformationen



Admins  |  AGB  |  Applications  |  Autores  |  Chat  |  Política de Privacidad  |  Descargar  |  Entrance  |  Ayuda  |  Merchantportal  |  Pie de imprenta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Juegos  |  Búsqueda  |  Support

Ein Projekt aller XProfan, el lo son!


Mi XProfan
Privado Noticias
Eigenes Ablageforum
Temas-Merkliste
Eigene Beiträge
Eigene Temas
Zwischenablage
Cancelar
 Deutsch English Français Español Italia
Traducciones

Política de Privacidad


Wir uso Cookies sólo como Session-Cookies wegen el technischen Notwendigkeit y en uns hay no Cookies de Drittanbietern.

Wenn du hier en unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung de Informationen en unseren Cookies en XProfan.Net a.

Weitere Informationen a unseren Cookies y dazu, como du el Kontrolle darüber behältst, findest du en unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Yo möchte no Cookie