| |
|
|
Ernst | Hallo,
Cls
Var Dlg& = Create("Dialog", %Hwnd, "", 300, 200, 400, 200)
Var hGrid& = Create("GridBox", Dlg&,"Links;2;180;Mitte;2;100;Rechts;2;80", 2, 0, 0, 400, 190)
While 1
WaitInput
EndWhile
End
so wie ich mit der message " sendmessage(hGrid&,$1001,0,RGB(180,180,180)) " den kompletten Hintergrund einfärben kann, gibt es da irgendeine message oder andere Möglichkeit nur eine Spalte (z.B. die Spalte "Mitte") einzufärben - eben noch bevor die Gridbox befüllt wird (also nicht Texthintergrundfarbe) ? Gruß Ernst |
|
|
| |
|
|
|
Thomas Freier | Vielleicht hilft das weiter:
$H Messages.ph
$H Windows.ph
$H commctrl.ph
Var WindowWidth& = 500
Var WindowHeight& = 500
set("Fastmode",1)
windowStyle $250
WINDOW 0,0-0,0
CLS ~GetSysColor(~COLOR_BTNFACE)
Declare LvDraw#
STRUCT LvDraw = HwndFrom&,idFrom&,Code&,DrawStage&,Hdc&,Rect#(16),ItemSpec&,ItemState&,ItemLparam&,Text&,Textbk&,SubItem&
Dim LvDraw#,LvDraw
Subclassproc'--------------------------------------------------------
If subclassmessage(&swnd,~WM_NOTIFY)
LvDraw#=&slparam
If (LvDraw#.Hwndfrom&=Lv&)*(LvDraw#.Code&=~NM_CUSTOMDRAW)
set("winproc",0)
Case LvDraw#.DrawStage&=~CDDS_PREPAINT: Return ~CDRF_NOTIFYITEMDRAW
Case LvDraw#.DrawStage&=~CDDS_ITEMPREPAINT:return ~CDRF_NOTIFYSUBITEMDRAW
If LvDraw#.DrawStage&=~CDDS_SUBITEM | ~CDDS_ITEMPREPAINT
Case LvDraw#.SubItem&=0:LvDraw#.Textbk&=rgb(0,0,128)
Case LvDraw#.SubItem&=1:LvDraw#.Textbk&=rgb(128,128,0)
Case LvDraw#.SubItem&=2:LvDraw#.Textbk&=rgb(128,0,0)
Case LvDraw#.SubItem&=0:LvDraw#.Text&=rgb(255,255,0)
Case LvDraw#.SubItem&=1:LvDraw#.Text&=rgb(0,255,0)
Case LvDraw#.SubItem&=2:LvDraw#.Text&=rgb(255,255,0)
EndIf
EndIf
EndIf
EndProc'-------------------------------------------------------------
Var Lv&=create("gridbox",%hwnd,"Spalte 0;0;100;Spalte 1;0;100;Spalte 2;0;100",0,20,20,400,300)
whileloop 0,50
addstring(lv&,"Test|Test|Test")
EndWhile
subclass %hwnd,1
SetStyle %hwnd,0,$14CF2000
~SetClassLong(%hwnd,~GCL_STYLE,(~GetClassLong(%hwnd,~GCL_STYLE)- ~CS_HREDRAW - ~CS_VREDRAW))
~Movewindow(%hwnd,Int(%maxx/2-WindowWidth&/2),Int(%maxy/2-WindowHeight&/2),WindowWidth&,WindowHeight&,1)
While 1
Waitinput
If %key = 2
End
EndIf
EndWhile
set("Fastmode",0)
|
|
|
| |
|
|
|
Jörg Sellmeyer | Soweit ich weiß, ist es nicht möglich, eine Spalte einzufärben, wenn noch gar keine Einträge in der Listbox sind. Du kannst aber Leerstrings vorfüllen. Dann sind die Farben sichtbar. |
|
|
| |
|
|
|
Ernst | @ Thomas - leider nein; dieses Beispiel kannte ich schon - funktioniert eben auf Basis Einträge / Texthintergrundfarbe, was ich ja nicht möchte; daher (@Jörg) helfen auch Leerstrings nicht, weil die Zeilen dann markierbar sind, bevor was richtig drinsteht. Ich hatte mir mit Bitmaps was zusammengeschustert und dachte ich kann's einfacher haben - so kann man sich täuschen Jedenfalls Danke! Grüße Ernst |
|
|
| |
|
|
|
Thomas Freier | @ Ernst, so ist es nun mal bei einem LV oder einer Office Tabelle. Du könntest aber eine gewählte leere Zeile, wenn's dann nicht sein soll, sofort demarkern und die letzte Zeile mit Inhalt markieren. |
|
|
| |
|
|
|
Jörg Sellmeyer | Auch alt aber grad hab ich ne idee dazu:
Mit ~LockWindowUpdate(hdl&) ($H windows.ph) kannst du das Fenster sperren und es wieder entsperren, sobald Einträge drin sind. Allerdings musst du dann die ersten Eintrage mit SetText befüllen, weil sonst deine Spaltenfarben wieder verschwinden. ~LockWindowUpdate(0) entsperrt wieder. Man kann immer nur ein Element sperren. |
|
|
| |
|
|