Hallo,
kurzes Problem: möchte u.a. eine Listview von der Größe her dem Hauptfenster mit SetWindowPos anpassen; das Fenster kann ich von der Breite her verändern. Da ich das Flackern der vorhandenen Elemente bei der Größenänderung verhindern will, setzte ich den Style: "SetStyle %hwnd, 1, GetStyle(%hwnd, 1) | $02000000" ein - die Listview wird zerstört, die Prozessorauslastung steigt auf 100% - kann mir jemand einen Tipp geben - besten Dank!
Gruß Jürgen.
Listview.dll und SetStyle
-
-
-
Hallo Jürgen,
setzt du den Style beim Listview oder beim Fenster? Welcher Ex-Style soll das denn sein? Hast du einen kurzen Democode?
-
Code
Alles anzeigen[FONT=Courier New][COLOR=#ff0000]$H Messages.ph[/COLOR][/FONT] [FONT=Courier New][COLOR=#ff0000]$H Windows.ph[/COLOR][/FONT] [FONT=Courier New][B]SubClassProc [/B][/FONT] [FONT=Courier New][B]If[/B] [B]SubClassMessage[/B](%hWnd, ~wm_sizing)[/FONT] [FONT=Courier New] [B][COLOR=#ffffff]SetStyle[/COLOR][/B] %hwnd, 1, [B]GetStyle[/B](%hwnd, 1) | $02000000[/FONT] [FONT=Courier New] Resize[/FONT] [FONT=Courier New] [B]Set[/B]("WinProc", 0)[/FONT] [FONT=Courier New][B]ElseIf SubClassMessage[/B](bt&, ~wm_rbuttondown)[/FONT] [FONT=Courier New][B]SetText[/B] bt&, "Autsch!"[/FONT] [FONT=Courier New] [B]Set[/B]("WinProc", 0)[/FONT] [FONT=Courier New][B]ElseIf SubClassMessage[/B](bt&, ~wm_rbuttonup)[/FONT] [FONT=Courier New] [B]SetText[/B] bt&, "Test1"[/FONT] [FONT=Courier New] [B]SetMenuItem[/B] 3000[/FONT] [FONT=Courier New] [B]Set[/B]("WinProc", 0)[/FONT] [FONT=Courier New][B]ElseIf SubClassMessage[/B](st&, ~wm_mousemove)[/FONT] [FONT=Courier New] [B]SetMenuItem[/B] 3001[/FONT] [FONT=Courier New] [B]Set[/B]("WinProc", 0)[/FONT] [FONT=Courier New][B]ElseIf SubClassMessage([/B]%hwnd, ~wm_close)[/FONT] [FONT=Courier New] [B]SetMenuItem[/B] 3999[/FONT] [FONT=Courier New] [B]Set[/B]("WinProc", 0)[/FONT] [FONT=Courier New][B]EndIf [/B][/FONT] [FONT=Courier New][B]EndProc[/B][/FONT] [FONT=Courier New][B]Proc Resize[/B][/FONT] [FONT=Courier New][B]SetWindowPos[/B] bt& = 0, 50 - [B]Width[/B](%HWnd)/2, [B]Height[/B](%HWnd) - 75[/FONT] [FONT=Courier New][B]SetWindowPos[/B] bt2& = [B]Width[/B](%HWnd)/2, 50 - [B]Width[/B](%HWnd)/2, [B]Height[/B](%HWnd) - 75[/FONT] [FONT=Courier New][B]SetWindowPos[/B] st& = 0, 0 - 0,0; 0[/FONT] [FONT=Courier New][B]SetWindowPos[/B] tb& = 0, 0 - 0,0; 0[/FONT] [FONT=Courier New][B]EndProc[/B][/FONT] [FONT=Courier New][B]declare[/B] bt&, bt2&, st&, tb&[/FONT] [FONT=Courier New][B]declare[/B] ende%[/FONT] [FONT=Courier New][B]cls[/B][/FONT] [FONT=Courier New]st& = [B]create[/B]("StatusWindow", %HWnd, "Statuszeile")[/FONT] [FONT=Courier New]tb& = [B]create[/B]("Toolbar", %HWnd,0,15,1,1000,1)[/FONT] [FONT=Courier New]bt& = [B]create[/B]("Button", %HWnd, "Test1", 0, 50, [B]Width[/B](%HWnd)/2, [B]Height[/B](%HWnd) - 75)[/FONT] [FONT=Courier New]bt2& = [B]create[/B]("Button", %HWnd, "Test2", [B]Width[/B](%HWnd)/2, 50, [B]Width[/B](%HWnd)/2, [B]Height[/B](%HWnd) - 75)[/FONT] [FONT=Courier New][B]SubClass [/B]%HWnd, 1 [/FONT][FONT=Courier New][COLOR=#ff0000]'SubClassing des Hauptfensters einschalten[/COLOR][/FONT] [FONT=Courier New][B]SubClass [/B]bt&, 1 [/FONT][FONT=Courier New][COLOR=#ff0000]'SubClassing des 1. Buttons einschalten[/COLOR][/FONT] [FONT=Courier New][B]SubClass [/B]st&, 1 [/FONT][FONT=Courier New][COLOR=#ff0000]'SubClassing der Statuszeile einschalten[/COLOR][/FONT] [FONT=Courier New][B]whilenot[/B] ende%[/FONT] [FONT=Courier New][B]waitinput[/B][/FONT] [FONT=Courier New][B]If[/B] %Key = 4[/FONT] [FONT=Courier New] Resize[/FONT] [FONT=Courier New][B][COLOR=black]SetStyle %hwnd, 1, GetStyle(%hwnd, 1) - $02000000[/COLOR][/B][/FONT] [FONT=Courier New][B]ElseIf MenuItem[/B](3000)[/FONT] [FONT=Courier New] [B]MessageBox[/B]("Rechtsklick auf Button 1!","Test",0)[/FONT] [FONT=Courier New][B]ElseIf MenuItem[/B](3001)[/FONT] [FONT=Courier New] [B]MessageBox[/B]("Mausbewegung über Statuszeile!","Test",0)[/FONT] [FONT=Courier New][B]ElseIf MenuItem[/B](3002)[/FONT] [FONT=Courier New] [B]MessageBox[/B]("wm_activate","Test",0)[/FONT] [FONT=Courier New][B]ElseIf MenuItem([/B]3003)[/FONT] [FONT=Courier New] [B]MessageBox[/B]("wm_syscommand",str$(&sWParam),0)[/FONT] [FONT=Courier New][B]ElseIf MenuItem[/B](3999)[/FONT] [FONT=Courier New] [B]Case Messagebox[/B]("Wollen Sie das Programm wirklich verlassen?","Frage",36) = 6 : Ende% = 1[/FONT] [FONT=Courier New][B]EndIf[/B][/FONT] [FONT=Courier New][B]endwhile [/B][/FONT] [FONT=Courier New][COLOR=#ff0000]' Subclassing wieder ausschalten[/COLOR][/FONT] [FONT=Courier New][B]SubClass [/B]%HWnd, 0[/FONT] [FONT=Courier New][B]SubClass [/B]bt&, 0[/FONT] [FONT=Courier New][B]SubClass [/B]st&, 0[/FONT] [FONT=Courier New][B]end[/B][/FONT]
Hab den Style aus der Hilfe übernommen. Wenn ich bei o.g. Quelltext eine normale Gridbox seitens Profan bei create ... erstelle, dann klappt es.
In meinem eigentlichen Programm habe ich im Hauptfenster ein Treeview, 2 Multiedits und die Listview, die ich der Fenstergröße anpassen will. Da das Hauptfenster beim vergrößern flackert, wollte ich den Style ausprobieren. Das flackern ist weg, die Listview reagiert aber nicht mehr. Will den Setstyle beim Resize verwenden.
Hoffe du kannst mir einen Tipp geben.
Gruß Jürgen -
Ich denke schon. In deinem Code wird aber gar kein Listview.dll-Control verwendet.
-
Vielleicht hilft der Teilcode aus http://www.paules-pc-forum.de/…-csv-datei-erstellen.html
Code
Alles anzeigenDef GetSysColor(1) !"USER32","GetSysColor" $I Listview_Funktionen.inc var lvdll&=usedll("Listview.dll") window 0,0 - 630,240 Cls GetSysColor(15) var parent&=%hwnd var lb&=CreateListView(%hwnd,%hinstance,0,rgb(255,255,255),-1,$33) InsertColumn lb&,"1. Spalte",90,0 InsertColumn lb&,"2. Spalte",90,0 ShowListView(lb&,8,40,0,0) declare _dlgw&,_dlgh&,_odlgw&,_odlgh& declare x!,y!,x%,y% thread.do While 1 case %key=2:break WaitInput thread.do EndWhile freedll lvdll& $I Listview_Dispose.inc DeleteObject font& DeleteObject ico11& DeleteObject bmp&,bmp1&,bmp2&,bmp3&,bmp4&,bmp5&,bmp6& End proc thread.do _dlgw&=width(parent&) _dlgh&=height(parent&) if ( ( _odlgw&<>_dlgw& ) or ( _odlgh&<>_dlgh& ) ) case _dlgw&>0: y!= _odlgw& / _dlgw& _odlgw&=_dlgw& _odlgh&=_dlgh& _redrw y! endif x%=416 endproc proc _redrw Parameters x! ShowListView(lb&,10,4,(width(%hWnd)-20),(height(%hWnd)-40)) WhileLoop 0, (GetColumns(Lb&)-1) casenot x! = 0 : @SetColumnWidth(Lb&,&loop,(GetColumnWidth(lb&,&loop) / x! ),-1) Wend endproc
Ich bin mit dem Verhalten beim Vergrößern zufrieden. Die Spaltenbreite mit zu verändern ist geschmackssache.
Gruß Thomas
-
Code
Alles anzeigenProc Resize If Width(%hWnd)<800 SetWindowPos Listview&=256,3-(Width(%hWnd)-260),(Height(%hWnd)/1.70) SetWindowPos TreeView_MWnd&=53,3-200,(Height(%hWnd)/1.70) ValueMaxY%=Height(Listview&)+45 SetWindowPos GroupBox1_MWnd&=53,(Height(Listview&)+30)-(Width(%hWnd)/2.25),(Height(%hWnd)-ValueMaxY%+10) SetWindowPos GroupBox2_MWnd&=(Width(GroupBox1_MWnd&)+57),(Height(Listview&)+30)-(Width(%hWnd)-51)-(Width(GroupBox1_MWnd&)+10),(Height(%hWnd)-ValueMaxY%+10) SetWindowPos MultiEdit1_MWnd&=60,(Height(Listview&)+80)-(Width(GroupBox1_MWnd&)-15),(Height(GroupBox1_MWnd&)-60) SetWindowPos MultiEdit2_MWnd&=(Width(GroupBox1_MWnd&)+65),(Height(Listview&)+80)-(Width(%hWnd)-45)-(Width(GroupBox1_MWnd&)+30),(Height(GroupBox1_MWnd&)-60) SetWindowPos PicButton1_MWnd&=,60,(Height(Listview&)+50)-20,20 SetWindowPos PicButton2_MWnd&=,85,(Height(Listview&)+50)-20,20 SetWindowPos PicButton3_MWnd&=,110,(Height(Listview&)+50)-20,20 SetWindowPos PicButton4_MWnd&=,(Width(GroupBox1_MWnd&)+65),(Height(Listview&)+50)-20,20 SetWindowPos PicButton5_MWnd&=,(Width(GroupBox1_MWnd&)+90),(Height(Listview&)+50)-20,20 SetWindowPos PicButton6_MWnd&=,(Width(GroupBox1_MWnd&)+115),(Height(Listview&)+50)-20,20 EndIf ' If Width(%hWnd)<800 If Width(%hWnd)>800 SetWindowPos Listview&=256,3-(Width(%hWnd)-260),(Height(%hWnd)/1.70) SetWindowPos TreeView_MWnd&=53,3-200,(Height(%hWnd)/1.70) ValueMaxY%=Height(Listview&)+45 SetWindowPos GroupBox1_MWnd&=53,(Height(Listview&)+30)-(Width(%hWnd)/2.25),(Height(%hWnd)-ValueMaxY%+10) SetWindowPos GroupBox2_MWnd&=(Width(GroupBox1_MWnd&)+57),(Height(Listview&)+30)-(Width(%hWnd)-51)-(Width(GroupBox1_MWnd&)+10),(Height(%hWnd)-ValueMaxY%+10) SetWindowPos MultiEdit1_MWnd&=60,(Height(Listview&)+80)-(Width(GroupBox1_MWnd&)-15),(Height(GroupBox1_MWnd&)-60) SetWindowPos MultiEdit2_MWnd&=(Width(GroupBox1_MWnd&)+65),(Height(Listview&)+80)-(Width(%hWnd)-45)-(Width(GroupBox1_MWnd&)+30),(Height(GroupBox1_MWnd&)-60) SetWindowPos PicButton1_MWnd&=,60,(Height(Listview&)+50)-20,20 SetWindowPos PicButton2_MWnd&=,85,(Height(Listview&)+50)-20,20 SetWindowPos PicButton3_MWnd&=,110,(Height(Listview&)+50)-20,20 SetWindowPos PicButton4_MWnd&=,(Width(GroupBox1_MWnd&)+65),(Height(Listview&)+50)-20,20 SetWindowPos PicButton5_MWnd&=,(Width(GroupBox1_MWnd&)+90),(Height(Listview&)+50)-20,20 SetWindowPos PicButton6_MWnd&=,(Width(GroupBox1_MWnd&)+115),(Height(Listview&)+50)-20,20 EndIf ' If Width(%hWnd)>800 EndProc SubClassProc If SubClassMessage(%hWnd, ~wm_sizing) SetStyle %hwnd, 1, GetStyle(%hwnd, 1) | $02000000 Resize Set("WinProc", 0) EndIf EndProc
Edit: So sieht im Moment ein Teil meine Quelltextes aus. Zwar ist das Flackern wie beschrieben weg, habe aber Probleme bei der Listview, die nicht aktualisiert wird.Gruß Jürgen
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!