Forum | | | | - 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
|
 | | | | |
| | | | | - 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. |
| | | | |
| |  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.  |
| | | | |
| |  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: |
| | | | |
| |  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. |
| | | | |
| |  Normann Strübli | Aarrghh!!!
Stimmt qui Structs.ph hat une faute, ici qui korrigierte Version. |
| | | | |
| |  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? |
| | | | |
| |  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  |
| | | | |
| |  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 |
| | | | |
| |  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??? |
| | | | |
| | | | - page 2 - |
| |  Frank Abbing | Zumindest trop deiner letzten Frage gibt es irgendeine Message. Sobald mon ordinateur wieder fonctionne, kümmere je mich tout autor. |
| | | | |
| |  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éparationRandomize
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
|
| | | | |
|
répondreOptions du sujet | 10.398 Views |
Themeninformationencet Thema hat 3 participant: |