Forum | | | | E.T. | Hallo XProfaner-Gemeinde, ich nutze gern die Icon-Buttons mit Text,
wie im Code unten dargestellt. Bisher hatte ich damit keine Probleme, da ich die Icon's aus einer Dll geladen hab. Bei einem kleinem Mini-Projekt, welches ohne Dll auskommen sollte, ist mir jetzt folgendes aufgefallen: Im Interpreter funktioniert das ganz wunderbar, starte ich aber die fertige Exe, ist das Icon auf dem Button nur sporadisch, meist nur beim ersten Programmstart, zu sehen.
Jemand 'ne Idee ??? Passiert übrigens im Beispiel hier: [...] auch. Getestet mit XProfan 11/12/X2 KompilierenMarkierenSeparieren
SubProc Create.BigPicButton
Parameters Ziel&, Text$, PosX%, PosY%, Breite%, Hoehe%, Icon&
var BigPicButton& = @control("Button",Text$,$50012200+$2000000,PosX%,PosY%,Breite%,Hoehe%,Ziel&,1000,%Hinstance)
Button_Refresh BigPicButton&, Icon&
Return BigPicButton&
EndProc
Proc Button_Refresh
Parameters Button&, Icon&
var Refresh_Button&=@control("Static","",$50000003,12,12,32,32,Button&,0,%Hinstance)
@Sendmessage(Refresh_Button&,$170,Icon& ,0)
EndProc
Declare BtnIcon&, Button&
BtnIcon& = @Create("hIcon","Baum")
CLS
Button& = @Create("BigPicButton",%HWnd,"Test- \nButton ",20,20,150,60,BtnIcon&)
waitinput
DeleteObject BtnIcon&
end
|
| | | Grüße aus Sachsen... Mario WinXP, Win7 (64 Bit),Win8(.1),Win10, Win 11, Profan 6 - X4, XPSE, und 'nen schwarzes, blinkendes Dingens, wo ich das alles reinschütte... | 08.05.2011 ▲ |
| |
| | Dieter Zornow | Schau dir mal den Code an der geht, ist auch kommentiert warum. Bei dir fehlt was. KompilierenMarkierenSeparieren'Autor Dieter Zornow
DEF LoadImage(6) !"USER32","LoadImageA"
Def DestroyIcon(1) ! "User32","DestroyIcon"
Declare icon&[]
Var himh& = 0
proc destroyobject
whileloop 0,sizeof(icon&[])-1
DestroyIcon(icon&[&loop])
endwhile
endproc
proc showbutton'damit das Icon auch immer wieder angezeigt wird, ohne diese Proc wird es in der Exe nicht mehr angezeigt
parameters hdl&' handle des Static controls
showwindow(hdl&,0)
showwindow(hdl&,1)
endproc
'Parameter: Fenster, oder Dialoghandle, Buttontext, handle der iconresource, Iconname, x%,y%,w%,h%, ButtonID, Text Links, rechts oder Zentiert
subproc Create.ITextbutton
Parameters hwnd&,text$,source&,image$,x%,y%,w%,h%,id&,dct$
declare button&,st&,hpos&,hwid&
Icon&[himh&] = LoadImage(source&,addr(Image$),$1,20,20,$0)'Icongröße = 20 x 20
if dct$ = upper$("R")
button& = Control("BUTTON",text$,$54010200,x%,y%,w%,h%,hwnd&,id&,%hinstance,$0100)
elseif dct$ = upper$("L")
button& = Control("BUTTON",text$,$54010100,x%,y%,w%,h%,hwnd&,id&,%hinstance,$0100)
elseif dct$ = upper$("C")
button& = Control("BUTTON",text$,$54010000,x%,y%,w%,h%,hwnd&,id&,%hinstance,$0100)
endif
hpos& = height(button&) - 20
hpos& = int(hpos&/2)
hwid& = width(button&) -23' 3 pixel vom Rand weg + Icongröße
if (dct$ = upper$("R")) or (dct$ = upper$("C"))
st& = control("Static","",$50000003,3,hpos&,20,20,button&,0,%Hinstance)
else
st& = control("Static","",$50000003,hwid&,hpos&,25,20,button&,0,%Hinstance)
endif
Sendmessage(st&,$170,Icon&[himh&],0)
inc himh&
showbutton(st&)
return str$(button&) + "|" + str$(st&)
endproc
'Beispiel
cls
declare ende%,but$,but1&,static1&, but2&,static2&,but3&,static3&
ende% = 0
but$ = create("ITextbutton",%hwnd,"Test ",%hinstance,"A", 10,25,70,25,10,"R")
but1& = val(substr$(but$,1,"|"))
static1& = val(substr$(but$,2,"|"))
but$ = create("ITextbutton",%hwnd," Test",%hinstance,"Sand", 10,60,60,25,11,"L")
but2& = val(substr$(but$,1,"|"))
static2& = val(substr$(but$,2,"|"))
but$ = create("ITextbutton",%hwnd,"Test",%hinstance,"Wasser", 10,90,80,25,12,"C")'zentriert müssen die Buttons größer werden
but3& = val(substr$(but$,1,"|"))
static3& = val(substr$(but$,2,"|"))
usermessages 16
whilenot ende%
waitinput
case %UMessage = 16:ende% = 1
if clicked(but1&)
Messagebox("Hier1","",0)
showbutton(static1&)'nach jeder Aktion aufrufen sonst verschwindet das Icon
elseif clicked(but2&)
Messagebox("Hier2","",0)
showbutton(static2&)
elseif clicked(but3&)
Messagebox("Hier3","",0)
showbutton(static3&)
endif
endwhile
destroyobject()
end
|
| | | Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai., Win 7 32 bit und Win 7 64 bit, mit XProfan X2 | 08.05.2011 ▲ |
| |
| | Jörg Sellmeyer | Na - da würde ich aber sagen, das ist klar ein Bug und sollte nicht solcher Workarounds bedürfen... |
| | | Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 08.05.2011 ▲ |
| |
| | Andreas Miethe
| Jörg Sellmeyer (08.05.11)
Na - da würde ich aber sagen, das ist klar ein Bug und sollte nicht solcher Workarounds bedürfen...
Das halte ich nicht für einen Bug. Wer ein Control in einem Control erzeugt, das nicht dafür vorgesehen ist, der muss sich eigentlich nicht wundern, wenn ein WM_PAINT dort nicht ankommt. Egal, ob das Icon aus einer Dll oder aus der Exe kommt, das wird fehlschlagen.
Abhilfe schafft, Autopaint während der Erzeugung auf NULL, und danach wieder auf Standard zu setzen, oder den Button so zu versorgen wie er es erwartet, mit einem Bitmap,Icon oder Text. |
| | | Gruss Andreas ________ ________ ________ ________ _ Profan 3.3 - XProfanX2 Win 95,98,ME,2000,XP,Vista - Win 7 32 / 64 Bit ASUS X93S - Intel Core I7-NVIDIA GForce 540M 8GB Arbeitsspeicher Homepage : [...] | 14.05.2011 ▲ |
| |
| | | Sehe ich genauso. Das Programm ist für das Neuzeichnen seiner Controls zuständig. Windows sagt nur Bescheid, wann genau das stattfinden sollte. Das wird im Code aber weder abgefragt, noch darauf reagiert. |
| | | | |
|
AntwortenThemenoptionen | 5.954 Betrachtungen |
ThemeninformationenDieses Thema hat 5 Teilnehmer: |