@Dark
Nun, Interesse habe ich (und Andere hier im Forum) schon.
Vielleicht funktioniert die Lösung ja besser für den Zweck!
Also, immer her damit.
Gruß Holger
ComboBox mit Image funktioniert nicht
Re: ComboBox mit Image funktioniert nicht
Wir sind LINUX
Widerstand ist zwecklos - Sie werden emuliert
Widerstand ist zwecklos - Sie werden emuliert
Re: ComboBox mit Image funktioniert nicht
@Kiffi (und Anderen)
Ich habe (gemäß Tipp von Kiffi) das Programm zum Selektieren von Sprache und Farben hier
http://hosting.alexander-n.de/=MTA1LjEyNzYxOTY1MzM=
abgelegt.
Das Ganze sieht dann so aus:
http://hosting.alexander-n.de/=MTA2LjEyNzYyMDAwMTI=
http://hosting.alexander-n.de/=MTA3LjEyNzYyMDAwNzY=
Ich habe (gemäß Tipp von Kiffi) das Programm zum Selektieren von Sprache und Farben hier
http://hosting.alexander-n.de/=MTA1LjEyNzYxOTY1MzM=
abgelegt.
Das Ganze sieht dann so aus:
http://hosting.alexander-n.de/=MTA2LjEyNzYyMDAwMTI=
http://hosting.alexander-n.de/=MTA3LjEyNzYyMDAwNzY=
Wir sind LINUX
Widerstand ist zwecklos - Sie werden emuliert
Widerstand ist zwecklos - Sie werden emuliert
Re: ComboBox mit Image funktioniert nicht
Hier der Code:
Comboboxex.pbi
Testcode:
Mfg,
DarkPlayer
Comboboxex.pbi
Code: Alles auswählen
CompilerIf Defined(PB_GadgetVT, #PB_Structure) = #False
Structure PB_GadgetVT
GadgetType.l
SizeOf.l
GadgetCallback.l
FreeGadget.l
GetGadgetState.l
SetGadgetState.l
GetGadgetText.l
SetGadgetText.l
AddGadgetItem2.l
AddGadgetItem3.l
RemoveGadgetItem.l
ClearGadgetItemList.l
ResizeGadget.l
CountGadgetItems.l
GetGadgetItemState.l
SetGadgetItemState.l
GetGadgetItemText.l
SetGadgetItemText.l
OpenGadgetList2.l
GadgetX.l
GadgetY.l
GadgetWidth.l
GadgetHeight.l
HideGadget.l
AddGadgetColumn.l
RemoveGadgetColumn.l
GetGadgetAttribute.l
SetGadgetAttribute.l
GetGadgetItemAttribute2.l
SetGadgetItemAttribute2.l
SetGadgetColor.l
GetGadgetColor.l
SetGadgetItemColor2.l
GetGadgetItemColor2.l
SetGadgetItemData.l
GetGadgetItemData.l
EndStructure
CompilerEndIf
CompilerIf Defined(PB_Gadget, #PB_Structure) = #False
Structure PB_Gadget
Gadget.l
*VT.PB_GadgetVT
UserData.l
OldCallback.l
Daten.l[4]
EndStructure
CompilerEndIf
Global *ComboBoxExVT.PB_GadgetVT = 0
Procedure InitComboBoxEx()
Protected InitCom.INITCOMMONCONTROLSEX
InitCom\dwSize = SizeOf(INITCOMMONCONTROLSEX)
InitCom\dwICC = #ICC_USEREX_CLASSES
If InitCommonControlsEx_(InitCom)
ProcedureReturn #True
EndIf
ProcedureReturn #False
EndProcedure
Procedure GetGadgetParent()
!EXTRN _PB_Object_GetThreadMemory@4
!EXTRN _PB_Gadget_Globals
!MOV Eax,[_PB_Gadget_Globals]
!push eax
!call _PB_Object_GetThreadMemory@4
!MOV Eax,[Eax]
ProcedureReturn
EndProcedure
Procedure GetGadgetObject(ID.i)
!EXTRN _PB_Object_GetObject@8
!EXTRN _PB_Gadget_Objects
!PUSH dword[p.v_ID]
!PUSH dword [_PB_Gadget_Objects]
!CALL _PB_Object_GetObject@8
ProcedureReturn
EndProcedure
Procedure AddGadgetItem3CBex(*Gadget.PB_Gadget,Position.l,Text.s, Image, Flags.l)
Protected Index
Index = ImageList_Add_(*Gadget\Daten[0],Image,0)
If Index <> -1
Protected Entry.COMBOBOXEXITEM
#CBEIF_TEXT = 1
#CBEIF_IMAGE = 2
#CBEIF_SELECTEDIMAGE = 4
With Entry
\mask = #CBEIF_IMAGE | #CBEIF_TEXT | #CBEIF_SELECTEDIMAGE
\iItem = Position
\pszText = @Text
\cchTextMax = Len(Text)
\iSelectedImage = Index
\iImage = Index
EndWith
ProcedureReturn SendMessage_(*Gadget\Gadget,#CBEM_INSERTITEM,0,Entry)
EndIf
ProcedureReturn #False
EndProcedure
Procedure AddGadgetItem2CBex(*Gadget.PB_Gadget,Position.l,Text.s, Image)
AddGadgetItem3CBex(*Gadget.PB_Gadget,Position.l,Text.s, Image,0)
EndProcedure
Procedure RemoveGadgetItemEx(*Gadget.PB_Gadget,Position.l)
Protected Entry.COMBOBOXEXITEM
Protected Image.i
Protected Count.i
Protected i.i
Entry\iItem = Position
Entry\mask = #CBEIF_IMAGE
If SendMessage_(*Gadget\Gadget,#CBEM_GETITEM,0,Entry)
Image = Entry\iImage
#CBEM_DELETEITEM = #CB_DELETESTRING
Count = SendMessage_(*Gadget\Gadget,#CBEM_DELETEITEM,Position,0)
If Count <> #CB_ERR
If ImageList_Remove_(*Gadget\Daten[0],Image)
For i = Position To Count -1
Entry\iItem = i
Entry\mask = #CBEIF_IMAGE | #CBEIF_SELECTEDIMAGE
If SendMessage_(*Gadget\Gadget,#CBEM_GETITEM,0,Entry)
Entry\iImage - 1
Entry\iSelectedImage - 1
SendMessage_(*Gadget\Gadget,#CBEM_SETITEM,0,Entry)
EndIf
Next
ProcedureReturn #True
EndIf
EndIf
EndIf
ProcedureReturn #False
EndProcedure
Procedure OwnWndProc(hWnd.i, message.i, wParam.i, lParam.i)
ProcedureReturn DefWindowProc_(hWnd.i, message.i, wParam.i, lParam.i)
EndProcedure
Procedure ComboBoxExGadget(Gadget.i, x.i, y.i, Breite.i, Hoehe.i,Flags.i=0,ImageWidth.i=16,ImageHeight.i=16)
Protected GadgetHandle.l
Protected *GadgetInfo.PB_Gadget
Protected oldHwnd.i
Protected Hwnd.i
If Gadget = #PB_Any
GadgetHandle = ComboBoxGadget(Gadget.i, x.i, y.i, Breite.i, Hoehe.i, Flags.i)
If GadgetHandle = 0
ProcedureReturn #False
EndIf
Else
If ComboBoxGadget(Gadget.i, x.i, y.i, Breite.i, Hoehe.i, Flags.i) = #False
ProcedureReturn #False
Else
GadgetHandle = Gadget
EndIf
EndIf
oldHwnd = GadgetID(GadgetHandle)
*GadgetInfo = GetGadgetObject(GadgetHandle) ;GetProp_(oldHwnd,"GadgetInfo")
If *GadgetInfo
Hwnd = CreateWindowEx_(0,"ComboBoxEx32",0 ,#WS_CHILD| #WS_VISIBLE |#CBS_DROPDOWN | #CBS_AUTOHSCROLL | #WS_VSCROLL | #CBS_DROPDOWNLIST | Flags,x,y,Breite,Hoehe,GetGadgetParent(),GetDlgCtrlID_(oldHwnd),GetModuleHandle_(0),0)
If Hwnd
If *ComboBoxExVT = 0
*ComboBoxExVT = AllocateMemory(*GadgetInfo\VT\SizeOf)
If *ComboBoxExVT
CopyMemory(*GadgetInfo\VT, *ComboBoxExVT, *GadgetInfo\VT\SizeOf)
; Modify V-Table
*ComboBoxExVT\AddGadgetItem2 = @AddGadgetItem2CBex()
*ComboBoxExVT\AddGadgetItem3 = @AddGadgetItem3CBex()
*ComboBoxExVT\RemoveGadgetItem = @RemoveGadgetItemEx()
EndIf
EndIf
If *ComboBoxExVT
*GadgetInfo\VT = *ComboBoxExVT
*GadgetInfo\Gadget = Hwnd
*GadgetInfo\VT\AddGadgetItem2 = @AddGadgetItem2CBex()
*GadgetInfo\Daten[0] = ImageList_Create_(ImageWidth,ImageHeight, #ILC_COLOR24,0,1)
If *GadgetInfo\Daten[0]
#CBEM_SETIMAGELIST = (#WM_USER + 2)
SendMessage_(Hwnd,#CBEM_SETIMAGELIST,0,*GadgetInfo\Daten[0])
SetWindowLongPtr_(oldHwnd,#GWLP_WNDPROC,@OwnWndProc())
DestroyWindow_(oldHwnd)
If Gadget = #PB_Any
ProcedureReturn GadgetHandle
Else
ProcedureReturn #True
EndIf
EndIf
EndIf
EndIf
DestroyWindow_(oldHwnd)
EndIf
ProcedureReturn #False
EndProcedure
Code: Alles auswählen
XIncludeFile "comboboxex.pbi"
If OpenWindow(0,0,0,300,300,"Test")
ComboBoxExGadget(1,0,0,200,200,0,64,64)
CreateImage(1,64,64,32)
StartDrawing(ImageOutput(1))
Box(0,0,64,64,RGB(255,0,0))
Box(10,10,44,44,RGB(0,0,255))
StopDrawing()
AddGadgetItem(1,-1,"Test",ImageID(1))
AddGadgetItem(1,-1,"Test 2",ImageID(1))
AddGadgetItem(1,-1,"Test 3",ImageID(1))
SetGadgetState(1,1)
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Gadget
If EventGadget() = 1
Debug "Changed!"
EndIf
EndIf
Until Event = #PB_Event_CloseWindow
EndIf
DarkPlayer
Mein Blog: http://fds-team.de/cms/
Re: ComboBox mit Image funktioniert nicht
@Darkplayer
Also, das entspricht eigentlich genau dem was ich ursprünglich gesucht hatte.
Wenn ich das richtig verstanden habe, besteht aber unter Umständen die Gefahr, das andere Gadgets von PB
nach Einbindung der Funktionen nicht mehr richtig funktionieren.
Wie hoch schätzt Du denn die Gefahr ein?
Gruß
Holger
Also, das entspricht eigentlich genau dem was ich ursprünglich gesucht hatte.
Wenn ich das richtig verstanden habe, besteht aber unter Umständen die Gefahr, das andere Gadgets von PB
nach Einbindung der Funktionen nicht mehr richtig funktionieren.
Wie hoch schätzt Du denn die Gefahr ein?
Gruß
Holger
Wir sind LINUX
Widerstand ist zwecklos - Sie werden emuliert
Widerstand ist zwecklos - Sie werden emuliert
Re: ComboBox mit Image funktioniert nicht
Hallo,Daffy0815 hat geschrieben:@Darkplayer
Also, das entspricht eigentlich genau dem was ich ursprünglich gesucht hatte.
Wenn ich das richtig verstanden habe, besteht aber unter Umständen die Gefahr, das andere Gadgets von PB
nach Einbindung der Funktionen nicht mehr richtig funktionieren.
Wie hoch schätzt Du denn die Gefahr ein?
Gruß
Holger
andere Gadgets sind davon nicht betroffen, es könnte nur sein, das manche Gadget Befehle (z.b. sowas wie SetGadgetData) für dieses veränderte Gadget nicht funktionieren. Andere Gadgets sollten aber noch genau so funktionieren wie vorher.
mfg,
DarkPlayer
Mein Blog: http://fds-team.de/cms/
Re: ComboBox mit Image funktioniert nicht
So, erst mal vielen tausend Dank an "Dark" für die Programmteile zum Aufbau der Auswahl mit ComboBoxEx!!!!
Ich habe das bereits veröffentlichte Programm mit der Sprach- / Farbauswahl mit den Scrollboxen nochmal überarbeitet und nun in der Form
die ich ursprünglich machen wollte, nämlich mit ComboBoxen, gemacht.
Das Ganze sieht nun so aus:
http://hosting.alexander-n.de/=MTExLjEyNzYyOTc4NDA=
oder so:
http://hosting.alexander-n.de/=MTEyLjEyNzYyOTc4OTU=
Den Quellcode findet ihr hier:
http://hosting.alexander-n.de/=MTEzLjEyNzYyOTc5OTg=
Ein kleiner "Wermutstropfen" steckt noch drin in der Sache.
Der Aufbau der ComboBoxen ist sehr langsam.
Da man aber nicht dauernd die Farben des Systems ändern wird, ist das in diesem Fall unproblematisch.
Übrigens, sollte hier mal jemand einen Tipp zu Microcontrollern, insbesondere der 51er-Derrivate benötigen, dann kann er sich gerne melden.
Ich habe das bereits veröffentlichte Programm mit der Sprach- / Farbauswahl mit den Scrollboxen nochmal überarbeitet und nun in der Form
die ich ursprünglich machen wollte, nämlich mit ComboBoxen, gemacht.
Das Ganze sieht nun so aus:
http://hosting.alexander-n.de/=MTExLjEyNzYyOTc4NDA=
oder so:
http://hosting.alexander-n.de/=MTEyLjEyNzYyOTc4OTU=
Den Quellcode findet ihr hier:
http://hosting.alexander-n.de/=MTEzLjEyNzYyOTc5OTg=
Ein kleiner "Wermutstropfen" steckt noch drin in der Sache.
Der Aufbau der ComboBoxen ist sehr langsam.
Da man aber nicht dauernd die Farben des Systems ändern wird, ist das in diesem Fall unproblematisch.
Übrigens, sollte hier mal jemand einen Tipp zu Microcontrollern, insbesondere der 51er-Derrivate benötigen, dann kann er sich gerne melden.
Wir sind LINUX
Widerstand ist zwecklos - Sie werden emuliert
Widerstand ist zwecklos - Sie werden emuliert