Quelltexte/ Codesnippets | | | | | Einfaches Beispiel um einem Handle (Button oder Static) ein Bitmap zuzuweisen.
KompilierenMarkierenSeparierendeclare 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 |
| | | | |
| | 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: KompilierenMarkierenSeparierenwindow 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: KompilierenMarkierenSeparierenwindow 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. KompilierenMarkierenSeparierenDef 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 QuelltextThemenoptionen | 10.406 Betrachtungen |
ThemeninformationenDieses Thema hat 4 Teilnehmer: |