![]() |
Anzeige:
|
|
|||||||
| Helfer & Tools Programme für und in XProfan und Fragen dazu. |
|
![]() |
|
|
LinkBack | Themen-Optionen | Ansicht |
|
|
#16 (Direktlink) | |
|
Weiß worum´s geht
![]() Registriert seit: 08.12.2009
Ort: Mecklenburg
Beiträge: 202
|
Zitat:
Code:
$H windows.ph Sie enthält noch jede Menge andere API/Messages-Definitionen - bin aber selber noch nicht durchgestiegen. Auf jeden Fall liegt da 'ne Menge Potenzial drin Beim Aufruf nicht die Tilde vergessen: ~InvalidateRect(ku&, 0, 1)
__________________
Gruß Jörg Ideen gibt es viele - man muß sie nur haben... XProfan 11.2, XP-Pro SP2/3 Geändert von JörgG (23.11.2011 um 01:17 Uhr) |
|
|
|
|
|
|
#17 (Direktlink) |
|
Weiß worum´s geht
![]() Registriert seit: 08.12.2009
Ort: Mecklenburg
Beiträge: 202
|
Hab grad noch ein wenig geforscht: wenn du im Prog NUR diese eine externe Funktion brauchst & diese sehr oft im Prog aufrufst, lohnt es sich, die Funktion am Anfang statisch zu laden:
Code:
...
u32& = UseDll("user32.dll")
@ImportFunc(u32&,"InvalidateRect","InvalidateRect")
...
'der aufruf dann ohne Tilde:
InvalidateRect(ku&, 0, 1)
...
__________________
Gruß Jörg Ideen gibt es viele - man muß sie nur haben... XProfan 11.2, XP-Pro SP2/3 Geändert von JörgG (23.11.2011 um 01:41 Uhr) |
|
|
|
|
|
#18 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.093
|
Genau, bitte die Borde in meinem Posting beachten. Ist API...
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. |
|
|
|
|
|
#19 (Direktlink) |
|
Dauergast
![]() Registriert seit: 06.02.2009
Ort: Wien, Österreich
Beiträge: 1.078
|
Danke, klappt wieder super!
__________________
Win7-64HomPremSP1,XProfan11.2a,XPIA,JWasm,XPSE,IntelCoreQuad2.5GHz/4GB/je1TB HD intern:esataBay:USB2:USB3 |
|
|
|
|
|
#20 (Direktlink) |
|
Weiß worum´s geht
![]() Registriert seit: 08.12.2009
Ort: Mecklenburg
Beiträge: 202
|
sooooooo - erwartungsgemäß hat das Einfärben mit InvalidateRect(ku&, 0, 1) mit W7 funktioniert
Bei XP flackert aber jetzt die Tabelle etwas. Bei W7 ist das Flackern deutlich stärker. Ich vermute mal, daß das Aktualisieren/Neuzeichnen langsamer oder mehrmals ausgeführt wird. Am besten funzt es also bei XP nur mit der Listview.dll ohne InvalidateRect(ku&, 0, 1) Ist aber auf jeden Fall ein großer Fortschritt, weil mein Prog. jetzt auf W7 wenigstens benutzt werden kann Nochmals Danke an Alle für die Beratung & Mittüfteln.
__________________
Gruß Jörg Ideen gibt es viele - man muß sie nur haben... XProfan 11.2, XP-Pro SP2/3 |
|
|
|
|
|
|
#21 (Direktlink) |
|
Weiß worum´s geht
![]() Registriert seit: 08.12.2009
Ort: Mecklenburg
Beiträge: 202
|
Hier nochmal der Code vom 1. Beitrag mit den hier besprochenen & eingebauten Änderungen (rot):
Code:
'w7-verhalten bei einfärbung von zeilen-/spaltenfarben
Declare lvh&, ku&, spa&, aspm&, u32& '&
declare mark# '#
Def GetSysColor(1) !"USER32","GetSysColor" 'win farbschema laden
lvh& = @importdll("Listview.dll","") 'listview.dll laden & statisch linken
u32& = UseDll("user32.dll")
@ImportFunc(u32&,"InvalidateRect","InvalidateRect")
dim mark#, 64
Windowstyle 512 + 8 ' dialogfensterstil + 8
WindowTitle " Testtabelle"
Window 1024,700 'größe des hauptfensters
Cls GetSysColor(15) 'hauptfenster in den systemfarben darstellen
Proc beenden
CloseMessages(%HWND)
FreeDll lvh& 'dlls entladen
end
EndProc
Proc listebauen
Declare fn#
dim fn#, 50
ku& = CreateListView(%hwnd,%hinstance,$0,$FFFFFF,$FFFFFF,$21) 'tabelle erstellen
buildlistview(ku&,10,0,100,0) '10 spalten mit breite 100 erzeugen
WhileLoop 0, 10 'alle 10 spalten durchlaufen
String fn#, 0 = "Spalte " + Str$(&loop) ' feldnamen in speicherbereich schreiben
SetColumnName(ku&,fn#,&loop) 'betreffenden spaltennamen gemäß feldnamenliste festlegen
EndWhile
Dispose fn#
EndProc
Proc listefuellen
declare spalte#[10],zeiger#,z%
Dim spalte#[], 80
Dim zeiger#, 40 'bereich für 10 adressen
z%= -1 'indexzähler für spalte#[]
WhileLoop 0,36,4
inc z%
Long zeiger#, &loop = spalte#[z%] 'zeigerbereich mit den adressen des bereichsarrays füllen
EndWhile
WhileLoop 0,20 '20 zeilen anhängen
z%= -1 'indexzähler für spalte#[]
While z% < 10 'alle elemente von spalte#[] durchlaufen
Inc z%
String spalte#[z%], 0, "Zeile " + Str$(&loop) + "- Spalte " + Str$(z%) 'aktuellen spalteninhalt in bereichsarray schreiben
EndWhile
SItem(ku&,zeiger#,9) 'zeile mit den vorbelegten werten einfügen (zeile 0-9)
EndWhile
Dispose spalte#[]
Dispose zeiger#
EndProc
Proc spmark
'färbt eine spalte (hintergrund) im listview in eine andere farbe - (index der spalte, die eingefärbt werden soll, wird in globale longvariable spa& gelesen)
Clear mark# 'speicherbereich für die spaltenfarben mit nullen füllen
Byte mark#,spa&,1 'das der spaltennr. entsprechende byte auf 1 setzen
RaiseColumns(ku&,mark#,0,$D9FBDA) 'spaltenhintergrundfarbe setzen (helles grün)
InvalidateRect(ku&, 0, 1)
locate 1,1
Print "Spalte",spa&;" "
setfocus(ku&) 'focus auf die tabelle setzen
EndProc
listebauen 'listview erstellen & spaltenköpfe beschriften
listefuellen 'testdaten ins listview schreiben
ShowListview(ku&,5,30,1010,400) 'tabelle anzeigen
InitMessages(%HWND) 'subclassing für das hauptfenster aktivieren
Usermessages $1400 'messages, die das listview ans hauptfenster schicken soll
spa& = 5 'spaltenzeiger setzen
spmark 'spalte einfärben
locate 1,30
Print "Mit Cursor links/rechts kann eine Spalte markiert werden - Esc=Ende"
while 1
waitinput
'tastencodes auswerten, die vom system kommen
If %key = 2
beenden
ElseIf %key = 13 'wenn enter in der tabelle gedrückt wurde
Print "Enter"
setfocus(ku&) 'focus auf die tabelle setzen
EndIf
'usermessages, die das listview sendet, auswerten
if %umessage = $1400 'wenn eine taste gedrückt wurde
if (&ulParam = 38) or (&ulParam = 40) 'wenn cursor hoch/runter gedrückt wurde
'aktion bei cursor hoch/runter
ElseIf &ulParam = 37 'wenn cursor links gedrückt wurde
if spa& > 0 'wenn akt. spaltenindex mindestens 1 ist
dec spa& 'sp.index um eins verringern
spmark 'markierung in tabelle setzen
EndIf
ElseIf &ulParam = 39 'wenn cursor rechts gedrückt wurde
if spa& < 9 'wenn akt. spaltenindex höchstens 8 ist
inc spa& 'sp.index um eins erhöhen
spmark 'edit-markierung in tabelle setzen
EndIf
EndIf 'ende von tastendruck &ulParam = ...
EndIf 'ende von %umessage = ....
endwhile
beenden
__________________
Gruß Jörg Ideen gibt es viele - man muß sie nur haben... XProfan 11.2, XP-Pro SP2/3 |
|
|
|
|
|
#22 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.093
|
Bei dieser Dll-Version reicht der Gebrauch von UpdateListview(). Das Flackern wird auch auf ein Minimum reduziert. Weniger geht bei Neuzeichnen wohl nicht.
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. |
|
|
|
|
|
#23 (Direktlink) |
|
Dauergast
![]() Registriert seit: 06.02.2009
Ort: Wien, Österreich
Beiträge: 1.078
|
Und woran lag es nun, Frank? Vielleicht löst das ja auch mein Altprogramm-Pluginproblem (Einmalig nutzbar, danach streikt es unter Win7)...
Danke im voraus!
__________________
Win7-64HomPremSP1,XProfan11.2a,XPIA,JWasm,XPSE,IntelCoreQuad2.5GHz/4GB/je1TB HD intern:esataBay:USB2:USB3 Geändert von p. specht (23.11.2011 um 19:17 Uhr) |
|
|
|
|
|
#24 (Direktlink) | |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.093
|
Zitat:
InvalidateRect() kann aber auch in einem anderen Modus betrieben werden, in dem WM_ERASEBKGND vor dem Neuzeichnen nicht angewendet wird. Funktioniert ebenfalls und das Geflacker hält sich im Rahmen. Darum arbeitet diese API jetzt zusätzlich in UpdateListview().
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. |
|
|
|
|
|
|
#25 (Direktlink) |
|
Weiß worum´s geht
![]() Registriert seit: 08.12.2009
Ort: Mecklenburg
Beiträge: 202
|
Hey - es funzt! Und das Flackern ist auch viel weniger
Danke, Frank! Sollte ich ich bei Progstart die WinVers ermitteln und updateListview(listview&) nur höher 5.1 ausführen oder fällt das bei XP nicht ins Gewicht? Und da ist mir aufgefallen, daß die neue Listview.dll 89kb groß ist - meine bisherige hatte 28kb? Stecken da etwa vllt. noch Sachen drin, von denen wir nichts ahnen
__________________
Gruß Jörg Ideen gibt es viele - man muß sie nur haben... XProfan 11.2, XP-Pro SP2/3 |
|
|
|
|
|
|
#26 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.093
|
Nein, ist nur ungepackt.
Du kannst eine Unterscheidung einbauen. Bei meinen Tests unter XP kann ich aber keinen Unterschied zu vorher feststellen.
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. |
|
|
|
![]() |
|
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
|
|
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Win7 home premium auf Win7 Ultimate upgraden | Betatester | Windows 7 | 8 | 15.12.2010 21:09 |
| Win7-64bit gegen Win7-32bit | Daryll | Windows 7 | 7 | 31.05.2010 18:34 |
| Wie baue ich listview ein? | Peter C. | Dlls, Includes, Units & Prozeduren | 12 | 31.03.2009 08:14 |
| listview | Peter C. | Spezielles | 6 | 29.03.2009 00:41 |
| Listview | Peter C. | Helfer & Tools | 3 | 28.03.2009 09:30 |