Foro | | | | Julian Schmidt | Ciao, ich stehe gerade vor einen Problem. Und zwar erstelle ich circa die Listview.dll ein Listview auf einen Tabcontrol. Diesem Listview würde ich nun gerne per RaiseLine & RaiseColum andere Farben zuordnen. Diese Befehle scheinen allerdings auf einen Tabcontrol nicht zu funktionieren, da mein Listview nicht mit meiner gewollte Farbdarstellung dargestellt wird. Sobald ich das Listview auf dem Hauptfenster erstelle wird das Listview mit meiner gewollten Farbdarstellungen dargestellt! Wenn ich das Listview auf dem Hauptfenster erstelle kommt es leider zu Komplikationen mit anderen Controls, weswegen es so wichtig ist es auf dem Tabcontrol zu lassen.
Wie kann ich die Farbdarstellung eines Listview, welches auf einen Tabcontrol erstellt wurde, ändern?
LG
Julian57 |
| | | | |
| | Thomas Freier | Dieses Problem kenne ich eigentlich nicht. Fehler in deinem Code?
Declare lvdll&,listview&,text$,x&,z&,ilist&
$I Listview_Funktionen.inc
lvdll&=usedll("Listview.dll")
cls
var T&=CREATE("TABCTRL",%HWND,"Reiter1",10,10,400,360)
Var TAB2&=@InsertTab(T&,2,"Reiter2")
var ELEMENT1&=Control("DIALOG","",$54001100,0,25,400,380,t&,0,%hinstance,$0)
InitMessages(%hwnd)
InitMessages(ELEMENT1&)
var LVIEW&=CREATELISTVIEW(ELEMENT1&,%HINSTANCE,0,$FFFFFF,-1,$21)
InsertColumn LVIEW&,"SPALTE 1",60,0
InsertColumn LVIEW&,"SPALTE 2",60,0
InsertColumn LVIEW&,"SPALTE 3",60,0
whileLoop 10
SetItem LVIEW&,"123","345","678"
wend
SHOWLISTVIEW(LVIEW&,20,40,325,200)
text$="101"
RaiseColumns(LVIEW&,addr(text$),0,Rgb(185,209,249))
Var ELEMENT2&=Control("DIALOG","",$54001100,0,25,400,380,t&,0,%hinstance,$0)
InitMessages(ELEMENT2&)
var LVIEW2&=CREATELISTVIEW(ELEMENT2&,%HINSTANCE,0,$FFFFFF,-1,$21)
InsertColumn LVIEW2&,"Test 1",60,0
InsertColumn LVIEW2&,"Test 2",60,0
InsertColumn LVIEW2&,"Test 3",60,0
whileLoop 10
SetItem LVIEW2&,"abc","def","ghu"
wend
SHOWLISTVIEW(LVIEW2&,20,40,325,200)
text$="101"
RaiseColumns(LVIEW2&,addr(text$),0,Rgb(185,209,249))
Whileloop 0,10,2
RaiseLine(LVIEW2&,(&loop+1000000),0,Rgb(0,128,128))
Endwhile
RaiseLine(LVIEW2&,600,0,Rgb(128,128,128))
usermessages 16'--Beenden abfangen
WHILE 1
WAITINPUT
case %umessage=16:break'---Ende
Case @TabChanged(T&): TAB_WECHSEL GetActiveTab(T&)
ENDWHILE
CloseMessages(%hwnd)
CloseMessages(ELEMENT1&)
CloseMessages(ELEMENT2&)
FREEDLL lvdll&
DestroyWindow(%hwnd)
End
Proc TAB_WECHSEL
Parameters T_nr%
IF T_nr% = 0
Showwindow(Element1&,1)
Showwindow(Element2&,0)
ElseIF T_nr% = 1
Showwindow(Element1&,0)
Showwindow(Element2&,1)
EndIf
EndProc
|
| | | | |
| | Julian Schmidt | Ja, ich habe InitMessages, CloseMessages nicht spezifisch auf den TabControl angewand. Nun funktioniert das einfärben. Danke Thomas!
Allerdings habe ich festgestellt, dass die Farben ab und zu erst nach einen klick, bzw. scrollen innerhalb des Listview erscheinen,obwohl ich eigentlich mit UpdateListview das Listview aktualisiere!? Weiß jemand Rat? |
| | | | |
| | Thomas Freier | Ja, ist manchmal ein Problem. Versuch mal beim TAB-Wechsel "nach zu färben"
ElseIF T_nr% = 1
Showwindow(Element1&,0)
Showwindow(Element2&,1)
Whileloop 0,10,2
RaiseLine(LVIEW2&,(&loop+1000000),0,Rgb(0,128,128))
Endwhile
RaiseLine(LVIEW2&,600,0,Rgb(128,128,128))
oder denn meist ist der 1.TAB OK. |
| | | | |
| | Julian Schmidt | Ich tue eig. nach färben, dennoch kommt es ab und an zu den Problem.
Noch eine Frage: Kann man ermitteln, ob die Sortierung der Zeilen geändert wurde?. Sobald man alle Zeilen nach einer Spalte aufwärts, abwärts sortiert, stimmt die Farbgebung leider nicht mehr. Deswegen würde ich gerne abfragen und wenn nötig, das Listview neu einfärben. Jemand eine Idee? |
| | | | |
| | | Färben erst wenn der TAB aktiv ist? Du kannst ja abfragen, ob der Spaltenbutton gedrückt wurde. Eine Spalte mit Farbwert bei 0 Breite. Erst alle Zeilen entfärben und dann den Farbwert auslesen und Zeile per Zeile färben.Wenn die Spaltenbreiten nicht verändert werden dürfen ist es kein Problem. Sonst abfragen ob die Spaltenbreite des Farbwertes verändert wurde und wieder auf 0 setzen. Saluto Thomas |
| | | | |
| | Julian Schmidt | Unbenannt (27.01.12)
Du kannst ja abfragen, ob der Spaltenbutton gedrückt wurde. Eine Spalte mit Farbwert bei 0 Breite. Erst alle Zeilen entfärben und dann den Farbwert auslesen und Zeile per Zeile färben.Wenn die Spaltenbreiten nicht verändert werden dürfen ist es kein Problem. Sonst abfragen ob die Spaltenbreite des Farbwertes verändert wurde und wieder auf 0 setzen.
Sry. ich verstehe nicht wie du das meinst? Wie kann ich ermitteln ob die Sortierung des Zeilen geändert wurde? |
| | | | |
| | | Du bestimmst doch wo sortiert werden darf circa {{FROMQUOT2}}
Erklärung nicht gefunden: ASORTLISTVIEW(H,B,A)
AUTOSORTLISTVIEW H,S1,S2,S3,...,S12
BESTIMMT, IN WELCHER ART UND WEISE JEDE EINZELNE SPALTE EINES LISTVIEWS SORTIERT WERDEN SOLL, SOBALD DER ANWENDER DEN ENTSPRECHENDEN SPALTENBUTTON GEDRÜCKT HAT.
, dann kannst du - siehe Beispiel Alle_Maustasten_abfangen.prf nach einem Linksklick im Listview prüfen, in welcher Spalte der Linksklick statt fand. War es eine Spalte in der eine Sortierung zulässig war, so wurde neu sortiert und die Zeilen müssen, wenn die Farbgebung an eine Zeile gebunden war, neu gefärbt werden. |
| | | | |
| | Julian Schmidt | Ok so funktioniert zumindest das Abfragen. Es treten allerdings immernoch diverse Probleme mit dem aktualisieren auf!
Hier der wesentliche Quelltext.
'...
while 1
waitinput 30
'...
if (getfocus(neu&) or menuitem(101)) and (Getactivetab(hTab1&)<>4)'Wenn Button Hinzufügen gedrückt wurde....
'...
ColorListview(LV&[Getactivetab(hTab1&)])'wird nicht korrekt aktualisiert
Endif
'...
x&=GetVar(4)
If x&<>-1'Wenn ein beliebiger Spaltbutton gedrückt wurde...
ColorListview(LV&[Getactivetab(hTab1&)])'wird nicht korrekt aktualisiert
EndIf
'...
Endwhile
'...
Proc ColorListview
Parameters hdl&
declare spalte&
case hdl&=LV&[0] : spalte&=4
case hdl&=LV&[1] : spalte&=5
case hdl&=LV&[2] : spalte&=2
case hdl&=LV&[3] : spalte&=2
var erledigt&=RGB(0,190,0)
var unerledigt&=RGB(255,30,30)
whileloop 0,GetLines(hdl&)-1,1
GetItemText(hdl&,bereich#,spalte&,&loop)
case String$(bereich#,0)="Erledigt" : RaiseLine(hdl&,&loop+1000000,RGB(255,255,255),erledigt&)
case String$(bereich#,0)="Unerledigt" : RaiseLine(hdl&,&loop+1000000,RGB(255,255,255),unerledigt&)
Endwhile
UpdateListview(hdl&)
Return 1
EndProc
|
| | | | |
| | Detlef Jagolski | Versuch mal das!
while 1
waitinput 30
'...
if (getfocus(neu&) or menuitem(101)) and (Getactivetab(hTab1&)<>4)'Wenn Button Hinzufügen gedrückt wurde....
'...
ColorListview(LV&[Getactivetab(hTab1&)])'wird nicht korrekt aktualisiert
~RedrawWindow(LV&[Getactivetab(hTab1&)],0,0, ~RDW_FRAME | ~RDW_INVALIDATE | ~RDW_ALLCHILDREN | ~RDW_UPDATENOW | ~RDW_INTERNALPAINT)
Endif
'...
x&=GetVar(4)
If x&<>-1'Wenn ein beliebiger Spaltbutton gedrückt wurde...
ColorListview(LV&[Getactivetab(hTab1&)])'wird nicht korrekt aktualisiert
~RedrawWindow(LV&[Getactivetab(hTab1&)],0,0, ~RDW_FRAME | ~RDW_INVALIDATE | ~RDW_ALLCHILDREN | ~RDW_UPDATENOW | ~RDW_INTERNALPAINT)
EndIf
'...
Endwhile
'...
Proc ColorListview
Parameters hdl&
declare spalte&
case hdl&=LV&[0] : spalte&=4
case hdl&=LV&[1] : spalte&=5
case hdl&=LV&[2] : spalte&=2
case hdl&=LV&[3] : spalte&=2
var erledigt&=RGB(0,190,0)
var unerledigt&=RGB(255,30,30)
whileloop 0,GetLines(hdl&)-1,1
GetItemText(hdl&,bereich#,spalte&,&loop)
case String$(bereich#,0)="Erledigt" : RaiseLine(hdl&,&loop+1000000,RGB(255,255,255),erledigt&)
case String$(bereich#,0)="Unerledigt" : RaiseLine(hdl&,&loop+1000000,RGB(255,255,255),unerledigt&)
Endwhile
UpdateListview(hdl&)
Return 1
EndProc
|
| | | | |
| | Julian Schmidt | | | | | |
| | | ~Redraw... löst viele Problemchen, aber hast du es nach Franks, der ja sparsam programmiert, Beispiel mal versucht. d.h., n-1 mit &loop+100000 und letzte Zeile mit n?
var Spalte&=1
var text$=""
Whileloop 0,(GetCount(LVIEW2&)-2),1
text$=trim$(GetText$(LVIEW2&,&loop,Spalte&))
SELECT text$
CASEOF "erledigt"
RaiseLine(LVIEW2&,(&loop+1000000),0,Rgb(109,248,103))'alle unerledigten färben
CASEOF "unerledigt"
RaiseLine(LVIEW2&,(&loop+1000000),0,Rgb(210,222,222))'alle unerledigten färben
OTHERWISE
RaiseLine(LVIEW2&,(&loop+1000000),0,Rgb(255,255,255))'färben
ENDSELECT
Endwhile
text$=trim$(GetText$(LVIEW2&,(GetCount(LVIEW2&)-1),Spalte&))
SELECT text$
CASEOF "erledigt"
RaiseLine(LVIEW2&,(GetCount(LVIEW2&)-1),0,Rgb(109,248,103))'alle unerledigten färben
CASEOF "unerledigt"
RaiseLine(LVIEW2&,(GetCount(LVIEW2&)-1),0,Rgb(210,222,222))'alle unerledigten färben
OTHERWISE
RaiseLine(LVIEW2&,(GetCount(LVIEW2&)-1),0,Rgb(255,255,255))'färben
ENDSELECT
|
| | | | |
|
AnswerTopic-Options | 10.756 Views |
ThemeninformationenDieses Thema hat 4 subscriber: |