Quelltexte/ Codesnippets | | | | | KompilierenMarkierenSeparierenSource wurde am 15.07.2007 aus der MMJ-Quellcodesammlung (Dietmar Horn) in die Babyklappe auf XProfan.Com abgelegt:
Bitmaps und Icons Button-Controls zuweisen
Lauffähig ab Profan-Version 5.0
##############################################################
# BITMAPS und ICONS Button-Controls zuweisen #
# für Profan 6.0 32-Bit #
##############################################################
# Andreas Miethe * Bielefeld * September 1998 #
##############################################################
# Ein Demo, das zeigen soll, was alles mit Button-Controls #
# und Bitmaps bzw. Icons möglich ist. #
##############################################################
# Dieser Quellcode ist frei für alle Profaner #
##############################################################
DEF @ALoadIcon(2) !USER32,LoadIconA
DEF @AExtractIcon(3) !SHELL32,ExtractIconA
DEF @ALoadImage(6) ! USER32,LoadImageA
Def @ASleep(1) !Kernel32,Sleep
Declare I%,Ende%
Declare BB1&,BB2&,BB3&,BB4&,BB5&,BB6&,BB7&,OB1&,OB2&,OB3&
Declare TB&
Declare ST#,Datei#,InstIcon&,DllIcon&,ExtIcon&,ExtBMP&,SCIcon&
Proc Lade_Icon
Ein Icon aus der eigenen Instanz
################################
Parameters Name$
Dim ST#,30
String st#,0 = Name$
Let InstIcon& = @ALoadIcon(%hinstance,st#) Icon A aus HINSTANCE
Dispose st#
Endproc
Proc Lade_UserIcon
Ein Icon aus einer DLL
######################
Parameters Name$,Nr%
Dim ST#,30
String ST#,0 = Name$
Let DllIcon& = AExtractIcon(%Hinstance,ST#,Nr%) Ausgang aus USER.EXE
Dispose ST#
Endproc
Proc Lade_ExtIcon
Ein Icon aus einer DLL
######################
Parameters Name$
Loadimage :
Parameter : %Hinstance,Name$,Art,X,Y,Flags
HInstance = das aufrufende Programm
Name$ = der Name des externen Cursors
Art = BITMAP(0) ICON(1)
X = Groesse X-Achse
Y = Groesse Y-Achse
Flags = LoadFromFile($0010) Originalgroesse wenn keine Angaben($0040)
Dim ST#,30
String ST#,0 = Name$
Let ExtIcon& = @ALoadImage(%HInstance,ST#,1,32,32,$0050) Externes Icon laden
Dispose ST#
Endproc
Proc Lade_Scale_Icon
Ein skaliertes Icon
###################
Parameters Name$,X%,Y%
Dim ST#,30
String ST#,0 = Name$
Let SCIcon& = @ALoadImage(%HInstance,ST#,1,X%,Y%,$0000) Externes Icon laden
Dispose ST#
Dispose Datei#
Endproc
Proc Lade_ExtBmp
Ein Icon aus einer DLL
######################
Parameters Name$,X%,Y%
Dim ST#,30
String ST#,0 = Name$
Let ExtBMP& = @ALoadImage(%HInstance,ST#,0,X%,Y%,$0050) Externes Icon laden
Dispose ST#
Endproc
Proc Mach_Toolbar
Fast eine Toolbar...
####################
Toolbar
Let TB& = @Control(Static,,$50001000,0,0,WIDTH(%HWND),43,%hwnd,1000,%Hinstance)
Buttons
Let BB1& = @Control(Button,,$50000040,0,0,40,40,TB&,1001,%Hinstance)
Let BB2& = @Control(Button,,$50000040,42,0,40,40,TB&,1002,%Hinstance)
Let BB3& = @Control(Button,,$50000040,84,0,40,40,TB&,1003,%Hinstance)
Let BB4& = @Control(Button,,$50000040,126,0,40,40,TB&,1004,%Hinstance)
Let BB5& = @Control(Button,,$50000040,168,0,40,40,TB&,1005,%Hinstance)
Let BB6& = @Control(Button,,$50000040,210,0,40,40,TB&,1006,%Hinstance)
Let BB7& = @Control(Button,,$50000080,SUB(WIDTH(%HWND),70),5,60,32,TB&,1006,%Hinstance)
Schalter
Let OB1& = @Control(Button,,$50001043,274,0,40,40,TB&,1005,%Hinstance)
Let OB2& = @Control(Button,,$50001043,316,0,40,40,TB&,1006,%Hinstance)
Let OB3& = @Control(Button,,$50001043,358,0,40,40,TB&,1006,%Hinstance)
Icon Laden und zuweisen
#######################
SENDMESSAGE für BUTTON-CONTROLS
Parameter : Buttonhandle,$00F7,Art,Bildhandle
Buttonhandle : Das Handle des Buttons
$00F7 : Die Message
ART : Bitmap(0) Icon(1)
Bildhandle : Das Handle des Bitmaps oder Icons
################################################
Lade_Icon A
Sendmessage(BB1&,$00F7,1,InstIcon&) Icon dem 1. Button - Control zuweisen
Lade_Icon Eimer
Sendmessage(BB2&,$00F7,1,InstIcon&) Icon dem 2. Button - Control zuweisen
Lade_Icon Windows
Sendmessage(BB3&,$00F7,1,InstIcon&) Skaliertes Icon dem 3. Button - Control zuweisen
Lade_scale_Icon Editor,24,24
Sendmessage(BB4&,$00F7,1,SCIcon&) Ico-Datei dem 4. Button - Control zuweisen
Lade_ExtIcon Uhr.ico
Sendmessage(BB5&,$00F7,1,ExtIcon&) Externes Icon dem 5. Button - Control zuweisen
Lade_UserIcon User.exe,6
Sendmessage(BB6&,$00F7,1,DllIcon&) Icon aus User.exe dem 6. Button - Control zuweisen
Lade_ExtBmp Ok1.rle,0,0
Sendmessage(BB7&,$00F7,0,Extbmp&) Bitmap aus User.exe dem 6. Button - Control zuweisen
Schalter
Lade_Icon Computer
Sendmessage(OB1&,$00F7,1,InstIcon&) Icon dem 1. Schalter zuweisen
Lade_Icon Drucker
Sendmessage(OB2&,$00F7,1,InstIcon&) Icon dem 2. Schalter zuweisen
Lade_Icon Text
Sendmessage(OB3&,$00F7,1,InstIcon&) Icon dem 3. Schalter zuweisen
######################################################################################
Endproc
Proc Text_zeichnen
UseFont Arial,15,0,0,0,0
Textcolor @RGB(0,0,0),-1
Drawtext 10,50,Erklärung zum Programm:
Drawtext 10,70,1. Um einen schnelleren Bildschirmaufbau zu simulieren wird das Hauptfenster zuerst mal
Drawtext 10,85,neben dem Bildschirm aufgebaut. Wenn der Aufbau komplett ist kommt es auf den Bildschirm.
Drawtext 10,105,2.Toolbar
Drawtext 10,120,Das ist natürlich kein Toolbar-Control sondern nur eine selbstgemachte Nachbildung
Drawtext 10,135,Erzeugt mit Button-Controls. Die Controls haben als Style $00000040 um Icons aufnehmen zu können.
Drawtext 10,150,Es können sowohl externe d.h. ICO-Dateien als auch interne Icons d.h. aus DLL oder HInstance geladen werden.
Drawtext 10,165,Es besteht ebenfalls die Möglichkeit die Icons skaliert zu laden d.h. so groß wie man will.
Drawtext 10,190,Es besteht hier auch die Möglichkeit richtige Bitmap-Buttons ( OK-Knopf ) zu erstellen.
Drawtext 10,205,Hierbei ist nur den Style des Controls zu ändern in $00000080 für die Aufnahme von Bitmaps.
Drawtext 10,220,Eine interessante Möglichkeit sein Programm individuell zu gestalten.
Drawtext 10,250,Die drei Buttons rechts neben dem Ausgang sind Schalter d.h. sie können an- und ausgeschaltet werden
Drawtext 10,265,Einfach mal alle Buttons anklicken, um auszutesten.
Drawtext 10,290,Da die Icons und Bitmaps bis zum Programmende permanent geladen sind, sollte man speziell bei den Bitmaps
Drawtext 10,305,darauf achten, daß diese nicht zu groß werden, sonst gehen die Systemresourcen in den Keller.
Drawtext 10,320,Am besten als RLE-Dateien speichern, das reicht für Buttons vollständig aus.
Drawtext 10,340,Das Fenster kann auch größer oder kleiner gezogen werden, die Toolbar paßt sich an.
Endproc
HAUPTPROGRAMM
#############
SetTrueColor 1
Windowtitle Button-Demo -> BITMAPS und ICONS auf Controls
Window add(%maxx,1),0-640,480 erstmal neben den Bildschirm
CLS @RGB(212,212,212)
Mach_Toolbar
Text_zeichnen
SetWindowPos %HWND = 50,50-640,480 jetzt auf den Bildschirm
Whilenot Ende%
Getmessage
Toolbar an Fenster anpassen
SetWindowPos TB& = 0,0-WIDTH(%HWND),43 Toolbar anpassen an Fenstergröße
SetWindowPos BB7& = SUB(WIDTH(%HWND),70),5-60,32 OK-Button anpassen an Toolbar
@ASleep(60) etwas warten sonst sieht ja gar nicht das ein Button gedrückt wurde
if getfocus(BB1&)
@MessageBox(Icon A gewählt,Meldung,0)
Elseif getfocus(BB2&)
@MessageBox(Icon Eimer gewählt,Meldung,0)
Elseif getfocus(BB3&)
@MessageBox(Icon Windows gewählt,Meldung,0)
Elseif getfocus(BB4&)
@MessageBox(Scaliertes Icon aus HInstance gewählt,Meldung,0)
Elseif getfocus(BB5&)
@MessageBox(Externes Icon (ICO-Datei) gewählt,Meldung,0)
Elseif getfocus(BB7&)
@MessageBox(Bitmap-Button gewählt,Meldung,0)
Elseif getfocus(BB6&)
@MessageBox(Icon aus USER.EXE (Ausgang) gewählt - Programmende,Meldung,0)
Let Ende% = 1
endif
Endwhile
end
|
| | | | |
| | Georg Bernhardt | Wie bekomme ich den jetzt ein Bitmap rein? Habe alles mögliche versucht. ändere ich wie beschrieben in $00000080 ist der Button weg. Die Bitmap habe ich in Profan.exe mit Ressorceditor eingefügt, bzw in eine DLL und die aufgerufen mit Drawextbmp erscheint das bmp auf dem Fenster.
Georg |
| | | | |
| | Dietmar Horn | Hallo Georg,
das steht doch eigentlich alles bereits im obigen Code. Der Haken an der Geschichte ist hier, daß in der Community-Babyklappe die benötigten Ressourcen leider nicht mitgeliefert werden.
Sowohl in der MMJ-Quellcodesammlung als auch im XProfan-Manager sind die Demo-Codes dagegen lauffähig mit allen benötigten Ressourcen enthalten.
Ich habe Dir das mal verkürzt auf einen Bitmap-Button umgeschrieben.
Im Anhang findest Du die fertige EXE mit zwei Bitmaps zum Ausprobieren und den Code dazu.
Gruß Dietmar |
| | | Multimedia für Jugendliche und junge Erwachsene - MMJ Hoyerswerda e.V. [...] Windows 95 bis Windows 7 Profan² 6.6 bis XProfan X2 mit XPSE Das große XProfan-Lehrbuch: [...] | 10.02.2008 ▲ |
| |
| | Georg Bernhardt | Danke Dietmar,
funktioniert, Habe aber noch das Problem, dass ich die BMP in eine DLL gepackt habe und sie nach Deinem Verfahren einfach nicht rauskriege. mit
Dll&=Usedll(SPLITTER.dll) DrawExtBmp DLL&, 115, 20, 20,1
geht es. Aber wie kann ich die DLL in Deinem Code einbinden und darauf zugreifen. Babyklappe hat mir auch nicht weitergeholfen
Danke |
| | | | |
| | Dietmar Horn | Hallo Georg,
auch sowas findest Du an mehreren Stellen ausführlich im XProfan-Manager beschrieben.
Hier ist die API LoadImageA Dein Freund, mit der Du zunächst das Handle des Bitmaps aus der DLL bestimmst. Anschließend brauchst Du dieses Handel nur noch dem Button per SendMessage zuweisen.
Im geänderten Beispiel habe ich das Bitmap OK1.BMP mit dem Manager als Ressource Bitmap mit dem Bezeichner BMP_1 in eine DLL namens BITMAP.DLL verfrachtet.
Siehe Anhang mit EXE, PRF und DLL.
Gruß Dietmar |
| | | Multimedia für Jugendliche und junge Erwachsene - MMJ Hoyerswerda e.V. [...] Windows 95 bis Windows 7 Profan² 6.6 bis XProfan X2 mit XPSE Das große XProfan-Lehrbuch: [...] | 11.02.2008 ▲ |
| |
| | Georg Bernhardt | Danke, nu looft et würde man hier sagen aber nicht mit meiner DLL sondern nur mit Deiner aber da kann ich ja meine Ressourcen reinpacken
Georg |
| | | | |
| | Jörg Sellmeyer | Es wäre, wie immer, hilfreich, wenn Du mal ein lauffähiges Stück Code postest (Fenster, Einbindung der Dll, ein Button, Dll im Anhang), damit man mal qualifizierte Vorschläge machen kann. So stochert man nur im Nebel rum, da wir ja nicht wissen, ob und was für Fehler Du evtl. machst. |
| | | Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 11.02.2008 ▲ |
| |
| | Thomas Freier | Thema Button: ich such noch nach einer Lösung für Button senkrecht mit Text, aber nicht den Text von oben nach unten. Transparenz habe ich bisher nur mit dem Typ *.Ico hinbekommen. Die konnte ich aber nicht zum Rechteck verbiegen. KompilierenMarkierenSeparierendeclare tb&,bb7&,extbmp&,bitmap$,OB1&
declare st#,InstIcon&
bitmap$ = 14.BMP
ifnot Fileexists(bitmap$)
Messagebox(Das Bitmap kann nicht gefunden werden!,F E H L E R,4112)
end
endif
DEF @ALoadImage(6) ! USER32,LoadImageA
DEF @ALoadIcon(2) !USER32,LoadIconA
PROC LADE_EXTBMP
Parameters Name$,X%,Y%
Dim ST#,255
String ST#,0 = Name$
ExtBMP& = @ALoadImage(%HInstance,ST#,0,X%,Y%,$0050) Externes BMP laden
Dispose ST#
ENDPROC
Proc Lade_Icon
Parameters Name$
Dim ST#,30
String st#,0 = Name$
Let InstIcon& = @ALoadIcon(%hinstance,st#) Icon A aus HINSTANCE
Dispose st#
Endproc
PROC MACH_TOOLBAR
TB& = @Control(Static,,$50001000,0,0,WIDTH(%HWND),143,%hwnd,1000,%Hinstance)
BB7& =@Control(Button,test,$50000080+3+$1000,WIDTH(%HWND) - 70,5,30,80,TB&,2112,%Hinstance)
LADE_EXTBMP bitmap$,0,0
Sendmessage(BB7&,$00F7,0,Extbmp&)
Let OB1& = @Control(Button,,$50001043,274,0,40,40,TB&,1005,%Hinstance)
Lade_Icon Computer
Sendmessage(OB1&,$00F7,1,InstIcon&) Icon dem 1. Schalter zuweisen
ENDPROC
#############################################################
cls
WINDOWSTYLE 31
WINDOWTITLE Button als Schalter
WINDOW 0,0-640,440
MACH_TOOLBAR
Declare bild&
bild& = Create(hPic,-1,14.BMP)
DrawPic bild&, 40, 80; 0
DrawPic bild&, 80, 80; -1
while 0=0
Drawtext 0,0,@str$(@GetCheck(BB7&))+
Drawtext 0,20,@str$(@GetCheck(OB1&))+
wend
DeleteObject bild&
end
Unterschiedliche *.bmp, je nach Schaltzustand, ist natürlich kein Thema. |
| | | | |
| | Georg Bernhardt | Hallo
hat alles geklappt mit Button, Bitmap und DLL.Danke
Georg |
| | | | |
| | | Hier ist auch noch was KompilierenMarkierenSeparierenDEF LoadImage(6) ! USER32,LoadImageA
DECLARE icondll&
icondll&=usedll($SYSPATH+\shell32.dll)
DECLARE hlp%,neu%,aus%
DECLARE hlp$,neu$,aus$
DECLARE spalte%,zeile%,lang%,hoch%,steig%,tip%,font00%
font00%=CREATE(FONT,ARIAL,16,6,0,0,0)
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&,Imh&,hpos&,hwid&
Imh& = 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&,icondll&,$0100)
elseif dct$ = upper$(L)
button& = Control(BUTTON,text$,$54010100,x%,y%,w%,h%,hwnd&,id&,icondll&,$0100)
elseif dct$ = upper$(C)
button& = Control(BUTTON,text$,$54010000,x%,y%,w%,h%,hwnd&,id&,icondll&,$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&,20,20,button&,0,%Hinstance)
endif
Sendmessage(st&,$170,Imh&,0)
showbutton(st&)
return str$(button&) + | + str$(st&)
endproc
############################################################
Window 0,0-300,200
spalte%=10:zeile%=10:lang%=200:hoch%=30:steig%=40
hlp$ = create(ITextbutton,%hwnd,F1 Hilfe ,icondll&,#24,spalte%,zeile%,lang%,hoch%,10,R)
hlp% = val(substr$(hlp$,1,|))
SetFont hlp%,font00%
tip%=CREATE(TOOLTIP,%HWnd,hlp%, Den Hilfetext anzeigen...)
zeile%=(zeile%+steig%)
neu$ = create(ITextbutton,%hwnd,&Neu... ,icondll&,#3,spalte%,zeile%,lang%,hoch%,11,C)
neu% = val(substr$(neu$,1,|))
SetFont neu%,font00%
tip%=CREATE(TOOLTIP,%HWnd,neu%, Neue Datei erstellen...)
zeile%=(zeile%+steig%)
aus$ = create(ITextbutton,%hwnd,ESC Ende ,icondll&,#28,spalte%,zeile%,lang%,hoch%,12,L)
aus% = val(substr$(aus$,1,|))
SetFont aus%,font00%
tip%=CREATE(TOOLTIP,%HWnd,aus%, Programm beenden)
WAITINPUT
END
|
| | | | |
| | Dietmar Horn |
Thema Button: ich such noch nach einer Lösung für Button senkrecht mit Text, aber nicht den Text von oben nach unten. Transparenz habe ich bisher nur mit dem Typ *.Ico hinbekommen. Die konnte ich aber nicht zum Rechteck verbiegen.
Hallo Thomas,
weil bisher zu Deiner Frage noch kein Antwort-Posting gekommen ist, vermute ich mal, daß nicht nur ich zu dämlich bin, um Dein eigentliches Anliegen zu verstehen. Vielleicht könntest Du das noch einmal so (um)formulieren, daß auch ich kapiere, worum es Dir eigentlich geht? Danach kann Dir hier mit an Sicherheit grenzender Wahrscheinlichkeit weitergeholfen werden.
Gruß Dietmar |
| | | Multimedia für Jugendliche und junge Erwachsene - MMJ Hoyerswerda e.V. [...] Windows 95 bis Windows 7 Profan² 6.6 bis XProfan X2 mit XPSE Das große XProfan-Lehrbuch: [...] | 12.02.2008 ▲ |
| |
| | Thomas Freier | Hallo Dietmar,
das könnte so sein, darum noch einmal die Frage im Klartext: Bei MCopyBmp 10, 10 - 100, 100 > 50, 50; -1 können wir bestimmen, welche Farbe als transparent anzusehen ist. Ist das auch möglich, wenn eine *.bmp auf einen Button soll? Ich glaube mich erinnern zu können, dass es mit *.gif und Transparenz auch nicht geht. Oder?
Aber an dieser Stelle noch ein Dankeschön für die MMJ-Quellcodesammlung. Schade, ich habe leider keine Verlinkung auf diesen Seiten gefunden oder in unmittelbarer Nähe der Freeware Profan 6.6 . Sie ist es wert! |
| | | | |
|
Zum QuelltextThemenoptionen | 13.106 Betrachtungen |
ThemeninformationenDieses Thema hat 6 Teilnehmer: |