Grafik auf Buttons?

Übersicht BlitzBasic BlitzPlus

Neue Antwort erstellen

Garfield

Betreff: Grafik auf Buttons?

BeitragDo, Mai 20, 2004 22:35
Antworten mit Zitat
Benutzer-Profile anzeigen
bisher habe ich im Forum nichts darüber gefunden, außer vom Januar in dem Shadow mitteilt, das auch er keinen Trick kennt.

Vieleicht hat es ja inzwischen jemand geschafft, auf einen Button eine Bitmap zu legen, ohne das der Button seine Funktion verliert?

leider kann man ja auch nicht mehrere Toolsbars machen, das wäre ja eine Lösung......
BlitzPlus|BMax|BMax-GUI -- Sony VAIO Win7 * MacBookPro Sierra

dominik

BeitragFr, Mai 21, 2004 9:59
Antworten mit Zitat
Benutzer-Profile anzeigen
wenn wir schon grad über buttons reden kannst du mir gleich mal erklären wie man die dinger überhaubt abfragt.

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragFr, Mai 21, 2004 11:49
Antworten mit Zitat
Benutzer-Profile anzeigen
@dominik
Code: [AUSKLAPPEN]
;Fenster erstellen
Startwindow = CreateWindow("Startwindow",50,50,700,545,0) 
;Button erstellen
Button_1 = CreateButton ("Klick mich NR 1",160,15,150,25,Startwindow)
Button_2 = CreateButton ("Klick mich NR 2",160,150,150,25,Startwindow)

UpdateWindowMenu Startwindow

Repeat
  Ergebnis = WaitEvent()
   Select Ergebnis
   Case $803
         End
   Case $401
      If EventSource() = Button_1 Then
         ;button wurde geklickt!!!!
         ;was soll nun passieren
         Notify"der Button NR 1 wurde geklickt"
      End If
      
      If EventSource() = Button_2 Then
         ;button wurde geklickt!!!!
         ;was soll nun passieren
         Notify"der Button NR 2 wurde geklickt"
      End If
   End Select
Forever

Ich denke das das Beispiel sich selbst erklärt!
[BB2D | BB3D | BB+]

dominik

BeitragFr, Mai 21, 2004 14:19
Antworten mit Zitat
Benutzer-Profile anzeigen
ja danke.

Garfield

BeitragSa, Mai 22, 2004 13:16
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzPlus|BMax|BMax-GUI -- Sony VAIO Win7 * MacBookPro Sierra
 

DjDETE

BeitragFr, Dez 28, 2007 19:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Es muss doch eine Möglichkeit (z.B. über WinAPI) geben, es haben doch soviele Programme Buttons mit Grafiken?!?!
Aktuelles Projekt: XXX |XXX | 3% der v1b fertig
www.emu-soft.de.vu Für die Homepage suche ich noch Linktauschpartner, bei Interesse einfach melden.

Eingeproggt

BeitragFr, Dez 28, 2007 20:01
Antworten mit Zitat
Benutzer-Profile anzeigen
ql:CreateCanvas

Oder suche im Forum nach "beskinnen".. Ich glaub, da gibts ne DLL, die dir das ganze Fenster beskinnt und du hast dann Designmäßig alle Freiheit der Welt.

mfG, Christoph.

PS: Irgendwer könnte sich darüber aufregen, dass du ständig Threads pusht... Aber immerhin zeugt das davon, dass du auch mal nach etwas suchst....
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

EPS

BeitragSa, Dez 29, 2007 2:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Geht:

Code: [AUSKLAPPEN]
Function CreateImgButton( ico$, x, y, w, h, group, push = 0 )
;==============================================================================================================
; Erstellt ImageButton. ico$ sollte eine Datei vom Typ ICO sein damit das Bild transparent dargestellt wird.
; Wird 'Push' mit 2 angegeben, wird ein Toggle Button erstellt.
;==============================================================================================================

   Local button = CreateButton( "", x, y, w, h, group, push )

   Local BM_SETIMAGE        = $F7
   Local IMAGE_ICON         = $1
   Local GWL_STYLE          = -16
   Local LR_DEFAULTSIZE     = $40
   Local LR_LOADFROMFILE    = $10
   Local BS_ICON            = $40
   Local SPI_GETICONMETRICS = 45
   Local ICONMETRICS        = CreateBank( 20 )
   Local BS_PUSHLIKE        = $1000
   
   If w < 32 Then w = 16 Else w = 32

   Local hbutton = QueryObject( button, 1 )

   ;--> Erstelle Toggle Button
   If push > 0 Then
      api_SetWindowLong( hbutton, GWL_STYLE, api_GetWindowLong( hbutton, GWL_STYLE ) Or BS_PUSHLIKE )
   End If

   Local icon = api_LoadImage( 0, ico$, IMAGE_ICON, w, w, LR_LOADFROMFILE Or LR_DEFAULTSIZE )

   api_SetWindowLong hbutton, GWL_STYLE, api_GetWindowLong( hbutton, GWL_STYLE ) + BS_ICON

   Local oldimage = api_SendMessage( hbutton, BM_SETIMAGE, IMAGE_ICON, icon )
   If oldimage api_DeleteObject( oldimage )

   Return button
   
End Function


Die API Aufrufe musste dir mal selbst raussuchen, sollte aber kein Thema sein.

Have Fun
mGUI - Graphical User Interface für Blitz3D...Informationen gibt es hier

Man kann sich öfter als zweimal im Leben halb tot lachen.
 

DjDETE

BeitragSa, Dez 29, 2007 14:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie heißt denn die dll? Würde mich sehr über eine Antwort feuen.
Aktuelles Projekt: XXX |XXX | 3% der v1b fertig
www.emu-soft.de.vu Für die Homepage suche ich noch Linktauschpartner, bei Interesse einfach melden.

EPS

BeitragSa, Dez 29, 2007 14:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Die DLL ist die USER32.DLL

Eine Auflistung aller Befehle (decls) müsste hier oder im englischen Forum zu finden sein.
mGUI - Graphical User Interface für Blitz3D...Informationen gibt es hier

Man kann sich öfter als zweimal im Leben halb tot lachen.
 

ChristianK

BeitragSa, Dez 29, 2007 14:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Die DLLs kannst du ganz leicht selbst herausfinden. Es gibt mehrere Webseiten / Programme dafür:

1. MSDN, die "offizielle" WinAPI-Seite
Gib dort einfach in der Suche ( links oben ) den Namen der Funktion ein ( z.B. SetWindowLong ) und du bekommst eine ausführliche Beschreibung des Befehls. Ganz unten steht auch die DLL, in der die Funktion drin ist.

2. Lade dir den API-Viewer von ActiveVB runter
http://www.activevb.de/rubrike...iewer.html

3. Suche direkt auf ActiveVB nach dem Befehl
http://www.activevb.de/rubrike...talog.html
Wenn du dort nach SetWindowLong suchst, bekommst du Folgendes:

Code: [AUSKLAPPEN]
Declare Function SetWindowLong Lib "user32.dll" _
                 Alias "SetWindowLongA" ( _
                 ByVal hwnd As Long, _
                 ByVal nIndex As Long, _
                 ByVal dwNewLong As Long) As Long

Und schon weißt du, dass SetWindowLong in der "user32.dll" drin ist. Wink
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT
 

DjDETE

BeitragSa, Dez 29, 2007 14:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen Dank, das wird mir sicherlich bis an mein Lebensende eine große Hilfe sein.
[nein das ist nicht ironisch gemeint, ich meine es wirklich so, vielen Dank]

Guten Rutsch
DjDETE
Aktuelles Projekt: XXX |XXX | 3% der v1b fertig
www.emu-soft.de.vu Für die Homepage suche ich noch Linktauschpartner, bei Interesse einfach melden.
 

DjDETE

BeitragDo, Jan 24, 2008 17:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei mir kommt da leider immer eine Fehlermeldung von Windows: blitzcc.exe hat ein Problem festgestellt und muss beendet werden...
Wäre toll wenn mir jemand helfen könnte.
Aktuelles Projekt: XXX |XXX | 3% der v1b fertig
www.emu-soft.de.vu Für die Homepage suche ich noch Linktauschpartner, bei Interesse einfach melden.

Hip Teen

BeitragDo, Jan 24, 2008 17:10
Antworten mit Zitat
Benutzer-Profile anzeigen
mach mal Debug Modus an und sag, was dann kommt, und vor allem an welcher Stelle die Fehlermeldung kommt.
Spruch der Woche: "Ahh, ein neues Gesicht?!" - "Nein, das hab ich schon länger"
 

DjDETE

BeitragDo, Jan 24, 2008 17:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe gerade was herausgefunden:
Wenn ich um dass Resultat zu sehen das mache:
graphics 800,600
repeat
until keydown(1)
dann kommt die Windowsfehlermeldung, obwohl der Debugger an ist, und wenn ich dies mache:
waitkey()
dann kommt zwar keine Fehlermeldung aber eine Grafik ist auf dem Button auch nicht zu sehen...
Danke im Vorraus, DjDETE
Aktuelles Projekt: XXX |XXX | 3% der v1b fertig
www.emu-soft.de.vu Für die Homepage suche ich noch Linktauschpartner, bei Interesse einfach melden.
 

ChristianK

BeitragDo, Jan 24, 2008 17:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Kannst du bitte mal den kompletten Code zeigen?
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT
 

DjDETE

BeitragDo, Jan 24, 2008 17:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Klar:

Code: [AUSKLAPPEN]
window1=CreateWindow("",100,100,200,200)
createimgbutton("icon.ico",30,30,50,50,window1,0)

Function CreateImgButton( ico$, x, y, w, h, group, push = 0 )
;==============================================================================================================
; Erstellt ImageButton. ico$ sollte eine Datei vom Typ ICO sein damit das Bild transparent dargestellt wird.
; Wird 'Push' mit 2 angegeben, wird ein Toggle Button erstellt.
;==============================================================================================================

   Local button = CreateButton( "", x, y, w, h, group, push )

   Local BM_SETIMAGE        = $F7
   Local IMAGE_ICON         = $1
   Local GWL_STYLE          = -16
   Local LR_DEFAULTSIZE     = $40
   Local LR_LOADFROMFILE    = $10
   Local BS_ICON            = $40
   Local SPI_GETICONMETRICS = 45
   Local ICONMETRICS        = CreateBank( 20 )
   Local BS_PUSHLIKE        = $1000
   
   If w < 32 Then w = 16 Else w = 32

   Local hbutton = QueryObject( button, 1 )

   ;--> Erstelle Toggle Button
   If push > 0 Then
      api_SetWindowLong( hbutton, GWL_STYLE, api_GetWindowLong( hbutton, GWL_STYLE ) Or BS_PUSHLIKE )
   End If

   Local icon = api_LoadImage( 0, ico$, IMAGE_ICON, w, w, LR_LOADFROMFILE Or LR_DEFAULTSIZE )

   api_SetWindowLong hbutton, GWL_STYLE, api_GetWindowLong( hbutton, GWL_STYLE ) + BS_ICON

   Local oldimage = api_SendMessage( hbutton, BM_SETIMAGE, IMAGE_ICON, icon )
   If oldimage api_DeleteObject( oldimage )

   Return button
   
End Function

WaitKey()


Bitte, hoffe du kannst mir helfen.
Aktuelles Projekt: XXX |XXX | 3% der v1b fertig
www.emu-soft.de.vu Für die Homepage suche ich noch Linktauschpartner, bei Interesse einfach melden.
 

ChristianK

BeitragDo, Jan 24, 2008 18:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei mir funktioniert der Code ( getestet mit BlitzMax + MaxGUI ). Da die Fehlermeldung am Ende des Programms kommt, wenn ich das richtig verstanden habe, muss Blitz ein Problem beim "Aufräumen" haben. Benutzt du noch andere Userlibs oder Zugriffe auf die WinAPI?
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT
 

DjDETE

BeitragDo, Jan 24, 2008 18:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja! Zum Beispiel ist der hier im Code vorhandene api_deleteoject Befehl aus der gid32.decls.
Aktuelles Projekt: XXX |XXX | 3% der v1b fertig
www.emu-soft.de.vu Für die Homepage suche ich noch Linktauschpartner, bei Interesse einfach melden.
 

DjDETE

BeitragDo, Jan 24, 2008 18:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja! Zum Beispiel ist der hier im Code vorhandene api_deleteoject Befehl aus der gid32.decls.
Und mir ist auch aufgefallen, dass mein Problem nichts mit Graphics, waitkey, etc. zu tun hat, sondern manchmal passiert das eine, ein anderes Mal das Andere...

Edit: will mir den niemand helfen???

Edit2: Für Hilfe wäre ich wirklich sehr dankbar!!!
Aktuelles Projekt: XXX |XXX | 3% der v1b fertig
www.emu-soft.de.vu Für die Homepage suche ich noch Linktauschpartner, bei Interesse einfach melden.

Neue Antwort erstellen


Übersicht BlitzBasic BlitzPlus

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group