Italia
Foro

Iconbutton con testo - Icon nur im Interpreter

 

E.T.
Hallo XProfaner-Gemeinde,
ich nutze gern die Icon-Buttons con testo,



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

7 kB
Hochgeladen:08.05.2011
Downloadcounter182
Download
 
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

destroyobject2>()
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 per 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 per 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.
 
14.05.2011  
 



Answer


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

5.942 Views

Untitledvor 0 min.
Detlef Jagolski23.07.2023
Normann Strübli06.02.2023
Sven Bader17.08.2021
Georg14.01.2021
Di più...

Themeninformationen



Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie