Deutsch
Quelltexte/ Codesnippets

Bitmap Button Handle Static Zuweisen

 
Einfaches Beispiel um einem Handle (Button oder Static) ein Bitmap zuzuweisen.

KompilierenMarkierenSeparieren
declare oid_dateiname#
DEF Createpicstatic(6) control(STATIC,@$(2),$5400010E,@%(3),@%(4),@%(5),@%(6),@%(1),2000, %HInstance)
DEF Createpicbutton(6) Control(BUTTON,@$(2),$50000080,@%(3),@%(4),@%(5),@%(6),@%(1),2000,%hinstance)
DEF Createpicbutton_od(6) Control(BUTTON,@$(2),$50000000+128+32768,@%(3),@%(4),@%(5),@%(6),@%(1),1000,%hinstance)
DEF LoadImage(6) !USER32,LoadImageA

proc oid_pic2hdl

    String oid_dateiname#,0=@$(1)
    return LoadImage(%HInstance,oid_dateiname#,0,0,0,$00050)

endproc

proc oid_pic2static

    parameters static&,pic&
    Sendmessage(static&,$172,0,pic&)

endproc

proc oid_pic2button

    parameters static&,pic&
    Sendmessage(static&,$00F7,0,pic&)

endproc

print
dim oid_dateiname#,256
oid_pic2button Createpicbutton_od(%hwnd,teeeest,10,10,100,100),oid_pic2hdl(xprofan.bmp)
oid_pic2button Createpicbutton(%hwnd,teeeest,220,10,100,100),oid_pic2hdl(xprofan.bmp)
oid_pic2static Createpicstatic(%hwnd,teeeest,110,10,100,100),oid_pic2hdl(xprofan.bmp)
dispose oid_dateiname#
waitinput
Bitte beachten das auch ein xprofan.bmp im gleichen Verzeichnis liegt.

iF
 
28.06.2004  
 




Ragnar
Rehbein
bei mir ist kein buttontext sichtbar.
kann das jemand bestätigen ?

r.r.
 
29.06.2004  
 



Genau, kein Buttontext, ist ja ein Bitmap-Button. Mußt nur darauf achten das du auch ein solch XPROFAN.BMP im Verzeichnis hast, oder einfach auf ein anderes BMP zeigen.

iF
 
29.06.2004  
 




Ragnar
Rehbein
das teeeest hatte mir suggeriert, das grafik + text auf dem button ist.
ich hätte mich gefreut, wenn es auch eine möglichkeit ohne die skcontrol.dll gegeben hätte.

r.r.
 
29.06.2004  
 



Kappier ich irgendwie nich, ein Button ist doch entweder Bitmap, oder Text. Schreib doch den Text auf die Grafik.

Das ginge ja sogar automatisiert (programmiert) das z.B. der Bitmap erst im Speicher(bitmap) generiert wird, und dann auf den But gelegt.

iF
 
29.06.2004  
 




Ragnar
Rehbein
also ich verwende häufig bottons die einen text enthalten und rechts oder links daneben ein icon. einfach weil es nett aussieht.
der text ist bei einigen programmen per ini konfigurierbar.

mit bitmaps wäre der aufwand einen text oder eine buttongröße zu ändern viel größer. außerdem würde das nur klappen wenn ich die bitmap zur laufzeit erstelle, da der button ja zu den gewählen systemfarben passen soll. transparenz wie bei icons ist bei bitmaps wohl nicht möglich. ich müßte also den bereich der in in einem icon transparent ist entsprechend mit einer farbe, die zur systemfarbe harmoniert füllen und den test darauf plazieren.

bisher nutze ich die skcontrol.dll.
diese hat jedoch auch nachteile. ich kann z.b. keine bottonstyles zuweisen.
einen vernünftigen togglebotton zu erstellen, läßt sich nur über userbottons regeln, wobei ich statt 3 mindestens 4 oder 5 bitmaps bräuchte, wenn ichs nicht nur einrasten sondern auch hovern lassen will.

dabei würde mich ja schon ein kleines niedliches icon auf einem windows-togglebutton glücklich machen.

ich bin bestimmt nicht oberflächenvernarrt, aber ein wenig nett sollte es aussehen und es soll sich leicht ändern lassen.

das ganze sieht dann z.b. so aus:

[img:ce134c3423]https://www.familie-rehbein.de/bild1.JPG[/img:ce134c3423]
sicherlich nicht überragend, aber irgendwie besser als nur buttons.
schnell zu erstellen und schnell zu ändern.
und sie hoovern dank der skcontrol.dll

r.r.
 
29.06.2004  
 



Hmmm, vielleicht einen Buttonkonstrukt über Subclassing realisieren? Auch ne eigene kleine DLL als 2. Thread könnte leicht erledigen was Du da beschreibst. Es ging mir hier jedoch vordergründig um Bitmap-Buttons, nicht um Icon-Buttons. Ich verstehe jedoch sehr wohl Dein Anliegen, habe aber leider keinen Source parat (oder im Kopf) der Dir da schnell weiterhelfen könnte. Sogern ich Dir da weiterhelfen möchte....:|

Argh, doch, jetzt fällt mir was ein, vielleicht hilft Dir ein Trick, lege ein Bitmap-Static auf dem Button an, so hast Du doch Dein icon. Zwar immernoch ohne Transparents, aber mit einem dünnen Rahmen der nach unten versenkt wirkt, würde das sogar ganz nett aussehen. So hast Du Dein Standart-Button, mit nem Bitmap-Static drauf. Hmmm, obwohl, wenn man dann übers Static hoovern würde könnte man ja nicht auf den Button klicken, hmmm, also auch nicht das wahre.

Bis denne, iF
 
29.06.2004  
 




Uwe
''Pascal''
Niemeier
Hallo Leute!

Ich verwende dafür diese Routine:
KompilierenMarkierenSeparieren
window 20,20-500,300
declare dlg&,a&,b&,a#
dim a#,255
 $H Messages.ph
 $H Windows.ph

proc IconButton---------------------------------------------------------------

    parameters Button&,Icon&
    declare bmp&,CDC&,Breite%,Höhe%,Text$,Brush&
    bmp&=sendmessage(Button&,~BM_GETIMAGE,0,0)-Schon Bitmap vorhanden?
    case bmp&:deleteobject bmp&----------------Löschen!
    casenot Icon&:return-----------------------Kein neues Icon? => Ende
    setstyle Button&,$54010080-----------------Style IconButton
    Breite%=width(Button&)
    Höhe%=height(Button&)
    Text$=gettext$(Button&)
    CDC&=~CreateCompatibleDC(%hdc)
    bmp&=~CreateCompatibleBitmap(%hdc,Breite%,Höhe%)
    ~SelectObject(CDC&,bmp&)
    ~SetBkMode(CDC&,~TRANSPARENT)--------------keine Hintergrundfarbe für Text
    Brush&=~GetSysColorBrush(~COLOR_3DFACE)----Hintergrund Systemfarbe
    ~SelectObject(CDC&,Brush&)
    ~Rectangle(CDC&,0,0,Breite%,Höhe%)---------Button mit Systemfarbe füllen
    ~DrawIcon(CDC&,2,2,Icon&)------------------Icon zeichnen (Abstand Rand 2,2)
    clear a#
    long a#,0=34-------------------------------Text beginnt hinter Icon
    long a#,8=Breite%
    long a#,12=Höhe%---------------------------Text wird vert. zentriert => Ganze Höhe angeben
    ~DrawText(CDC&,addr(Text$),len(Text$),a#,~DT_SINGLELINE | ~DT_CENTER | ~DT_VCENTER)
    ~DeleteDC(CDC&)
    deleteobject Brush&
    sendmessage(Button&,~BM_SETIMAGE,0,bmp&)--Bitmap zuweisen
    endproc-----------------------------------------------------------------------
    dlg&=create("dialog",%hwnd,"",200,200,300,300)
    a&=create("Button",dlg&,"Testbutton",110,10,110,40)
    b&=~LoadImageA(%hinstance,"A",~IMAGE_ICON,0,0,~LR_LOADREALSIZE)
    IconButton a&,b&
    waitkey
    b&=~LoadImageA(%hinstance,"Gesicht",~IMAGE_ICON,0,0,~LR_LOADREALSIZE)
    IconButton a&,b&
    waitkey
    IconButton a&,0
    end

Das lässt sich beliebig abwandeln, um z.B. gefärbte Buttons oder Buttons mit farbigem Text und beliebigem Font zu erzeugen (sehr praktisch für ChooseFont-Aufrufe). Oder man könnte den Text unter dem Button anzeigen usw.
Nachteilig ist nur, dass man dafür die Grafik-API einsetzen muss. Falls man das Hauptfenster nicht direkt braucht (z.B. weil es von einem rahmenlosen Dialog ausgefüllt wird oder sonstwie unsichtbar ist), kann man seine Buttons auch mit den Profan-Grafikbefehlen entwerfen:
KompilierenMarkierenSeparieren
window 20,20-500,300
settruecolor 1
 $H Messages.ph
 $H Windows.ph
declare dlg&,a&

proc DrawButton---------------------------------------------------------------

    parameters Button&,Icon$
    declare bmp&,CDC&,Breite%,Höhe%,Color&,Text$
    bmp&=sendmessage(Button&,~BM_GETIMAGE,0,0)-Schon Bitmap vorhanden?
    case bmp&:deleteobject bmp&----------------Löschen!
    casenot len(Icon$):return------------------Kein neues Icon? => Ende
    setstyle Button&,$54010080-----------------Style IconButton
    Breite%=width(Button&)
    Höhe%=height(Button&)
    Color&=~GetSysColor(15)
    Text$=gettext$(Button&)
    cls-------------mit Standart-Befehlen ins Hauptfenster zeichnen
    usebrush 1,Color&
    usepen 0,1,Color&
    rectangle 0,0-Breite%,Höhe%
    drawicon Icon$,2,2
    textcolor rgb(255,0,0),-1
    drawtext 36,9,Text$
    CDC&=~CreateCompatibleDC(%hdc2)
    bmp&=~CreateCompatibleBitmap(%hdc2,Breite%,Höhe%)
    ~SelectObject(CDC&,bmp&)
    ~BitBlt(CDC&,0,0,Breite%,Höhe%,%hdc2,0,0,$CC0020)
    ~DeleteDC(CDC&)
    sendmessage(Button&,~BM_SETIMAGE,0,bmp&)
    endproc-----------------------------------------------------------------------
    dlg&=create("dialog",%hwnd,"",200,50,300,300)
    a&=create("Button",dlg&,"Testbutton",50,50,120,40)
    DrawButton a&,"A"
    waitkey
    DrawButton a&,"Gesicht"
    waitkey
    DrawButton a&,""
    end

PS: Da lässt sich natürlich noch vieles verbessern, aber ich bin nun mal kein Freund vorgekauter Lösungen

HTH
Pascal
 
30.06.2004  
 




Michael
Dell
Schönes Beispiel Pascal, aber auch Ifs Beispiel kann ein bißschen modifiziert werden. Mann setze einfach nochn Kontrol auf den Button.
KompilierenMarkierenSeparieren
Def GSC(1) !"USER32","GetSysColor"
Def GBackC(0) GSC(15)
declare Aus&,oid_dateiname#,pb2&,pb2_txt&
© Andreas Miethe , Bielefeld , 1998
DEF Createpicstatic(6) control("STATIC",@$(2),$5400010E,@%(3),@%(4),@%(5),@%(6),@%(1),2000,%HInstance)
DEF Createpicbutton(6) Control("BUTTON",@$(2),$50000188,@%(3),@%(4),@%(5),@%(6),@%(1),2000,%hinstance)
DEF Createpicbutton_od(6) Control("BUTTON",@$(2),$50000000+128+32768,@%(3),@%(4),@%(5),@%(6),@%(1),1000,%hinstance)
DEF LoadImage(6) !"USER32","LoadImageA"

PROC ButtonText

    SetText &(1),$(2)

ENDPROC

proc oid_pic2hdl

    String oid_dateiname#,0=@$(1)
    return LoadImage(%HInstance,oid_dateiname#,0,0,0,$00050)

endproc

proc oid_pic2static

    parameters static&,pic&
    Sendmessage(static&,$172,0,pic&)

endproc

proc oid_pic2button

    parameters static&,pic&
    Sendmessage(static&,$00F7,0,pic&)

endproc

SetTrueColor 1
Cls GBackC()
dim oid_dateiname#,256
oid_pic2button Createpicbutton_od(%hwnd,"Teeeest1",10,10,100,100),oid_pic2hdl("xprofan.bmp")
pb2& = Createpicbutton(%hwnd,"Teeeest2",220,10,400,100)  geändert
oid_pic2button pb2&,oid_pic2hdl("xprofan.bmp")
pb2_txt& = control("STATIC","",$54000081,104,39,292,22,pb2&,2000,%HInstance)
oid_pic2static Createpicstatic(%hwnd,"Teeeest3",116,60,100,100),oid_pic2hdl("xprofan.bmp")
ButtonText(pb2_txt&,"Hallolo")
dispose oid_dateiname#
Aus& = 0

WhileNot Aus&

    WaitInput

    If Equ(%Key,-2)

        Aus& = 1

    ElseIf GetFocus(pb2&)

        ButtonText(pb2_txt&,"Schöööön...")

    Else

        ButtonText(pb2_txt&,"Hallolo")

    EndIf

EndWhile

End

Läßt sich, glaub ich auch ganz gut an.

Bis denne... Michael
 
Salu Michael...

Hab zwar krumme Fieß awer dofir e' ecklich Gsicht! 
01.07.2004  
 



Zum Quelltext


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

10.406 Betrachtungen

Unbenanntvor 0 min.
Normann Strübli08.02.2023
Rainer Hoefs10.05.2019
Peter Max Müller23.10.2017
Tommy16.03.2015
Mehr...

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


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