![]() |
Anzeige:
|
|
|||||||
| Spezielles Für die Bereiche API, Subclassing, Inline-Assembler, Prozesse, ect. |
|
![]() |
|
|
LinkBack | Themen-Optionen | Ansicht |
|
|
#1 (Direktlink) |
|
Stammuser
![]() Registriert seit: 08.02.2009
Ort: Bielefeld
Alter: 53
Beiträge: 428
|
Vielleicht kann es ja jemand gebrauchen
Code:
'######################
'Header-Dateien
'######################
$H Windows.ph
$H Messages.ph
$H Commctrl.ph
'######################
'######################
'Structuren
'######################
STRUCT RECT = Left&,Top&,Right&,Bottom&
STRUCT MEASUREITEMSTRUCT = CtlType&,CtlID&,itemID&,itemWidth&,itemHeight&,itemData&
STRUCT DRAWITEMSTRUCT = CtlType&,CtlID&,itemID&,itemAction&,itemState&,hwndItem&,hDC&,rcItem!RECT,itemData&
Var OldCB& = 0
Var WindowWidth& = 800
Var WindowHeight& = 600
'Einstellungen für die Listbox
Var Itemwidth& = 32
Var Itemheight& = 32
Var ItemBorder& = 6
Var ItemBackColor& = ~GetSysColor(~COLOR_BTNFACE)
Var ItemForeColor& = $FFFFFF
Var DllFile$ = "Shell32.dll"
'Itemborder muss mindestens 2 Pixel haben
ItemBorder& = If(Itemborder& < 2,2,Itemborder&)
Var LB_Brush& = ~CreateSolidBrush(ItemForeColor&)
'Erstmal ein unsichtbares Fenster anlegen
windowStyle $250
WINDOW 0,0-0,0
CLS ~GetSysColor(~COLOR_BTNFACE)
SubClass %HWnd, 1
'Die Fenster-Prozedur muss für die erste Anzeige umgeleitet werden
Set("FastMode",1)
OldCB& = ~SetWindowlong(%hwnd,~GWL_WNDPROC,ProcAddr("CB",4))
'Fensterstil für die Bildliste
Var flags& = ~WS_CHILD | ~WS_HSCROLL | ~WS_VISIBLE | ~WS_CLIPCHILDREN | ~LBS_OWNERDRAWFIXED | ~LBS_NOINTEGRALHEIGHT | ~LBS_MULTICOLUMN | ~LBS_NOTIFY
'Liste für die Bilder
Var hlist& = ~CreateWindowEx($200,"ListBox","",flags&,10,100,WindowWidth&-30,280,%hwnd,4000,0,0)
Create("Tooltip",%hwnd,hList&,"Doppelklick auf ein icon zeichnet das Icon")
'Itemgrösse setzen
~SendMessage(hlist&,~LB_SETCOLUMNWIDTH,Itemwidth&+Itemborder&,0)
~SendMessage(hlist&,~LB_SETITEMHEIGHT,0,Itemheight&+ItemBorder&)
'Imageliste anlegen
Var il& = Create("ImageList", Itemwidth&,Itemheight&,0,0)
'und die Icons der Shell32.dll in die Imageliste
Var SH& = Usedll(DllFile$)
Var SH_Count& = IconCount(DllFile$)
Var Ico& = 0
WhileLoop 0,SH_Count&
Ico& = ~LoadImage(SH&,&Loop,~IMAGE_ICON,Itemwidth&,Itemheight&,0)
ImageList("AddIcon",il&,Ico&)
~DestroyIcon(Ico&)
EndWhile
FreeDll SH&
'Icons der Imageliste in die Listbox
Var Il_Count& = GetCount(il&)
SendMessage(hList&,~LB_INITSTORAGE,IL_COUNT&,0)
WhileLoop 0,IL_Count&
~SendMessage(hlist&,~LB_ADDSTRING,0,~Imagelist_GetIcon(IL&,&loop,0))
EndWhile
'die Imageliste brauchen wir nicht mehr
~ImageList_Destroy(IL&)
'Fenster positionieren und anzeigen
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)
Repaint
'Fenster-Prozedur zurücksetzen
~SetWindowlong(%hwnd,~GWL_WNDPROC,OldCB&)
Set("FastMode",0)
~SelectObject(%hdc,~GetStockObject(~ANSI_VAR_FONT))
~SelectObject(%hdc2,~GetStockObject(~ANSI_VAR_FONT))
Var Ende& = 0
Var Oldsel& = 0
WhileNot Ende&
Waitinput
If %key = 2
Ende& = 1
EndIf
EndWhile
DeleteObJect LB_Brush&
End
Subclassproc
If SubClassMessage(%hWnd, ~WM_DRAWITEM)
Var DW# = New(DRAWITEMSTRUCT)
DW# = &slParam
If DW#.CtlType& = ~ODT_LISTBOX
If DW#.itemState& & ~ODS_SELECTED 'wenn selektiert
Var brush& = ~CreateSolidBrush(ItemBackColor&)
Else
Var brush& = ~CreateSolidBrush(ItemForeColor&)
EndIf
~FillRect(DW#.hdc&,DW#.rcItem,brush&)
~DeleteObject(Brush&)
~SetBkMode(DW#.hdc&,~TRANSPARENT)
~DrawIcon(DW#.hdc&,Int(DW#.RCItem!Left&+ItemBorder&/2),Int(DW#.RCItem!Top&+ItemBorder&/2),DW#.itemData&)
EndIf
Set("WinProc",0)
Return 1
ElseIf SubClassMessage(%hWnd, ~WM_COMMAND) and (HiWord(&swParam) = ~LBN_DBLCLK)
Set("WinProc",0)
If Oldsel& = Getcursel(hlist&)
Return 0
Else
If GetCursel(hList&) > -1
Usepen 5,0,0
Rectangle 0,0 - Width(%hwnd),100
DrawIcon sendmessage(hList&,~LB_GETITEMDATA,GetCursel(hList&),0),0,0
DrawText 0,40,"Icon "+Str$(GetCursel(hList&))+" aus "+DllFile$
EndIf
Oldsel& = GetCursel(hList&)
EndIf
ElseIf SubClassMessage(%hWnd, ~WM_CTLCOLORLISTBOX)
Set("WinProc",0)
Return LB_Brush&
EndIf
EndProc
Proc CB
'------------------------
'WindowCallback fürs Hauptfenster
'------------------------
PARAMETERS hWnd&, hMsg&, wParam&, lParam&
If hMsg& = ~WM_CTLCOLORLISTBOX
Return LB_Brush&
EndIf
If hMsg& = ~WM_DRAWITEM
Var DW# = New(DRAWITEMSTRUCT)
DW# = lParam&
If DW#.CtlType& = ~ODT_LISTBOX
If DW#.itemState& & ~ODS_SELECTED 'wenn selektiert
Var brush& = ~CreateSolidBrush(ItemBackColor&)
Else
Var brush& = ~CreateSolidBrush(ItemForeColor&)
EndIf
~FillRect(DW#.hdc&,DW#.rcItem,brush&)
~DeleteObject(Brush&)
~SetBkMode(DW#.hdc&,~TRANSPARENT)
~DrawIcon(DW#.hdc&,Int(DW#.RCItem!Left&+ItemBorder&/2),Int(DW#.RCItem!Top&+ItemBorder&/2),DW#.itemData&)
EndIf
Return 1
EndIf
Return ~CallWindowProc(Oldcb&,hWnd&, hMsg&, wParam&, lParam&)
EndProc
__________________
Gruss Andreas ______________________ http://www.ampsoft.eu Profan 3.3 - XProfanX2 Windows 95,98,ME,2000,XP Vista - Windows 7 32 / 64 Bit ASUS X93S - Intel Core I7 - NVIDIA GForce GT540M - 8GB Arbeitsspeicher Geändert von Andreas Miethe (04.04.2011 um 18:44 Uhr) |
|
|
|
|
|
|
#2 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
|
Läuft leider sehr stockend bei mir und hat arge Neuzeichnen-Probleme, wenn ich den Scroller hin und her bewege. Win7, 32 Bit.
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. |
|
|
|
|
|
#3 (Direktlink) | |
|
Stammuser
![]() Registriert seit: 08.02.2009
Ort: Bielefeld
Alter: 53
Beiträge: 428
|
Zitat:
Vielleicht hängt es an der Grafikkarte ?
__________________
Gruss Andreas ______________________ http://www.ampsoft.eu Profan 3.3 - XProfanX2 Windows 95,98,ME,2000,XP Vista - Windows 7 32 / 64 Bit ASUS X93S - Intel Core I7 - NVIDIA GForce GT540M - 8GB Arbeitsspeicher |
|
|
|
|
|
|
#4 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
|
Eine ältere NVidia GeForce, kann schon sein. Macht aber sonst nirgendwo Probleme.
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. |
|
|
|
|
|
#5 (Direktlink) |
|
Forenmaskottchen
![]() Registriert seit: 16.05.2010
Ort: Berlin
Beiträge: 724
|
Solange ich nicht gescrollt habe, ist alles in Ordnung, danach ist das Fenster leer oder fast leer. Auch zurückscrollen bringt die Icons nicht zurück.
Sieht insgesamt sehr merkwürdig aus. Win 7-64 SP1 Ultimate, GeForce GTS 250, 4 GB RAM, AERO
__________________
Gruß Thomas Wenn mir früher jemand gesagt hätte, ich würde freiwillig eine Wanze mit mir herum tragen und sie auch noch selbst aufladen, hätte ich laut gelacht. Heute habe ich ein Smartphone. http://realsource.de |
|
|
|
|
|
|
#6 (Direktlink) | |
|
Stammuser
![]() Registriert seit: 08.02.2009
Ort: Bielefeld
Alter: 53
Beiträge: 428
|
Zitat:
Win7-64Bit, NVIDIA GeForce 9500M GS, 4GB Ram, Aero. Läuft bei mir ohne Probleme. Nicht nur da sondern auch auf emulierten Systemen von Win98 - Win7
__________________
Gruss Andreas ______________________ http://www.ampsoft.eu Profan 3.3 - XProfanX2 Windows 95,98,ME,2000,XP Vista - Windows 7 32 / 64 Bit ASUS X93S - Intel Core I7 - NVIDIA GForce GT540M - 8GB Arbeitsspeicher |
|
|
|
|
|
|
#7 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
|
Zieh den Scroller mal hin und her. Zeichnet dann nicht mehr richtig neu.
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. |
|
|
|
|
|
#8 (Direktlink) | |
|
Erfolgreich angemeldet
![]() Registriert seit: 12.02.2009
Ort: Niedersachsen
Beiträge: 8
|
Zitat:
Win7-32 Ultimate,GeForce 9100M Gruß Manfred |
|
|
|
|
|
|
#9 (Direktlink) |
|
MoRoGeP-Träger 2011
![]() Registriert seit: 06.02.2009
Ort: Heidelberg
Alter: 71
Beiträge: 1.877
|
Bei mir läuft der Code ohne Probleme. Klappt einwandfrei
Grafikkarte: NVIDIA Geforce 9400 GT
__________________
Gruss, horst Computer werden kleiner und kleiner, bald verschwinden sie völlig. (Ephraim Kishon 1924-2005) http://www.web-treffpunkt.de |
|
|
|
|
|
#10 (Direktlink) |
|
Stammuser
![]() Registriert seit: 08.02.2009
Ort: Bielefeld
Alter: 53
Beiträge: 428
|
so oft ich den Scroller ziehe und wie schnell, es wird neu gezeichnet.
__________________
Gruss Andreas ______________________ http://www.ampsoft.eu Profan 3.3 - XProfanX2 Windows 95,98,ME,2000,XP Vista - Windows 7 32 / 64 Bit ASUS X93S - Intel Core I7 - NVIDIA GForce GT540M - 8GB Arbeitsspeicher |
|
|
|
|
|
|
#11 (Direktlink) |
|
Weiß worum´s geht
![]() Registriert seit: 15.02.2011
Beiträge: 106
|
Ich dachte erst: "welcher Scroller?", bis ich im Code gesehen habe, daß die Listboxgröße vom Monitor abhängt.
Dann gab's bei mir leider auch die Probleme beim Scrollen. Sieht sonst sehr interessant aus! Edit: Ach ja - ich habe eine NVIDIA Geforce 9600 GT. Das es daran liegt, kann nicht sein.
__________________
Anhören lohnt sich wuestensand.info |
|
|
|
|
|
#12 (Direktlink) |
|
Forenmaskottchen
![]() Registriert seit: 16.05.2010
Ort: Berlin
Beiträge: 724
|
Also GraKa scheidet aus. OS wohl auch.
Ich habe mit dem XProfan Final X2 Interpreter getested.
__________________
Gruß Thomas Wenn mir früher jemand gesagt hätte, ich würde freiwillig eine Wanze mit mir herum tragen und sie auch noch selbst aufladen, hätte ich laut gelacht. Heute habe ich ein Smartphone. http://realsource.de |
|
|
|
|
|
#13 (Direktlink) | |
|
Stammuser
![]() Registriert seit: 08.02.2009
Ort: Bielefeld
Alter: 53
Beiträge: 428
|
Zitat:
Möglicherweise liegt es an einem vergessenen Set("WinProc",0). Ich hab's korrigiert.
__________________
Gruss Andreas ______________________ http://www.ampsoft.eu Profan 3.3 - XProfanX2 Windows 95,98,ME,2000,XP Vista - Windows 7 32 / 64 Bit ASUS X93S - Intel Core I7 - NVIDIA GForce GT540M - 8GB Arbeitsspeicher |
|
|
|
|
|
|
#14 (Direktlink) |
|
Forenmaskottchen
![]() Registriert seit: 09.02.2009
Ort: Bangkok
Beiträge: 686
|
Die neue Version läuft etwas besser, aber es verschwinden immer noch Icons beim scrollen.
__________________
Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai. http://dieterzornow.gmxhome.de |
|
|
|
|
|
#15 (Direktlink) |
|
MoRoGeP-Träger 2011
![]() Registriert seit: 06.02.2009
Ort: Heidelberg
Alter: 71
Beiträge: 1.877
|
Keine Probleme
XProfan-12 Auch, wenn ich das Fenster auf meine Monitor-Auflösung stelle, funktioniert das Scrollen. Hab schon alles versucht, schnell scrollen oder nur zum Teil rüber und zurück. Es klappt immer ! Nachtrag: Ach, so auch die Icon-Anzeige mit Doppelklick funktioniert einwandfrei ! Hab die Listbox-Maße jetzt verändert und eine andere DLL eingeladen (moricons.dll) Die Anzeige klappt. Wenn ich aber die Höhe der Listbox (280) verkleinere, erscheint kein senkrechter Scrollbalken. Da musst du noch dran "schrauben", Andreas
__________________
Gruss, horst Computer werden kleiner und kleiner, bald verschwinden sie völlig. (Ephraim Kishon 1924-2005) http://www.web-treffpunkt.de Geändert von horsthorn (04.04.2011 um 08:16 Uhr) |
|
|
|
|
![]() |
|
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
|
|
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| [VB 2008] Alle ausgewählten Dateien aus OpenFileDialog in ListBox einfügen | Unregistriert | Visual Basic, Visual Basic.NET | 2 | 02.08.2010 10:25 |
| ListBox INI Daten füllen | BlackFalcon | C/C++, Visual C++, Visual C++.NET | 0 | 17.10.2006 12:01 |
| ListBox, styles, SetWindowLong() | ra | C/C++, Visual C++, Visual C++.NET | 0 | 20.05.2006 21:27 |
| Listbox speichern | TimS. | Visual Basic, Visual Basic.NET | 16 | 02.04.2006 14:11 |
| ListBox Kontrolle | Martin Lottner | C/C++, Visual C++, Visual C++.NET | 12 | 30.10.2004 13:15 |