Deutsch
Quelltexte/ Codesnippets

Bitmaps Button Controls Icons Zuweisen

 

KompilierenMarkierenSeparieren
Source 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
 
15.07.2007  
 




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
 
XProfan 10
10.02.2008  
 




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

326 kB
Hochgeladen:10.02.2008
Ladeanzahl262
Herunterladen
 
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
 
XProfan 10
11.02.2008  
 




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

454 kB
Hochgeladen:11.02.2008
Ladeanzahl236
Herunterladen
 
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
 
XProfan 10
11.02.2008  
 




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.
KompilierenMarkierenSeparieren
declare 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.

6 kB
Hochgeladen:11.02.2008
Ladeanzahl212
Herunterladen
 
Gruß Thomas
Windows XP SP2, XProfan X2
11.02.2008  
 




Georg
Bernhardt
Hallo

hat alles geklappt mit Button, Bitmap und DLL.Danke

Georg
 
XProfan 10
11.02.2008  
 



Hier ist auch noch was
KompilierenMarkierenSeparieren
DEF 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
 
11.02.2008  
 




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!
 
Gruß Thomas
Windows XP SP2, XProfan X2
13.02.2008  
 




Zum Quelltext


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

13.107 Betrachtungen

Unbenanntvor 0 min.
Normann Strübli08.02.2023
Jörg Sellmeyer05.06.2020
Rainer Hoefs21.02.2018
Andre Rohland04.02.2018
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