| Quelltexte/ Codesnippets |  |  |  |  |  |  |  |  | | Einfaches Beispiel um einem Handle (Button oder Static) ein Bitmap zuzuweisen. 
 KompilierenMarkierenSeparieren
 Bitte beachten das auch ein xprofan.bmp im gleichen Verzeichnis liegt.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
 iF
 | 
 |  |  |  |  |  |  |  |  | 
 
 
 |  |  |  |  Ragnar
 Rehbein
 | | bei mir ist kein buttontext sichtbar. kann das jemand bestätigen ?
 
 r.r.
 | 
 |  |  |  |  |  |  |  |  | 
 
 
 |  |  |  |  | | 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
 | 
 |  |  |  |  |  |  |  |  | 
 
 
 |  |  |  |  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.
 | 
 |  |  |  |  |  |  |  |  | 
 
 
 |  |  |  |  | | 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
 | 
 |  |  |  |  |  |  |  |  | 
 
 
 |  |  |  |  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.
 | 
 |  |  |  |  |  |  |  |  | 
 
 
 |  |  |  |  | | 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
 | 
 |  |  |  |  |  |  |  |  | 
 
 
 |  |  |  |  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
 | 
 |  |  |  |  |  |  |  |  | 
 
 
 |  |  |  |  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| Themenoptionen | 11.737 Betrachtungen | 
 ThemeninformationenDieses Thema hat 4 Teilnehmer: |