Deutsch
Forum

Bilder als Rolloverbutton

 

AndreasS
Guten Morgen,
die Frage: In einem Programm möchte ich gern PNG's als Schaltflächen verwenden. Dabei soll beim darüberfahren mit der Maus ein anderes Bild (ebenfalls mit transparentem Hintergrund) angezeigt werden und bei Mausklick ein weiteres. Über Mausbereiche kein Problem. Aber: das setzt den Einsatz der Abfrage (@mouse) voraus und dies verhindert den Einsatz von waitinput um auf andere (z.B.) Button zu reagieren. Weis irgend jemand eine Lösung ?
Der Einsatz einer Message um das Waitinput zu durchbrechen, ist weder sinnvoll, noch nutzbringend.

Danke

Andreas
 
07.12.2011  
 




Jörg
Sellmeyer
Hier hast Du schonmal einen Anfang:  [...] 


Der Einsatz einer Message um das Waitinput zu durchbrechen, ist weder sinnvoll, noch nutzbringend.


Öhm - wieso nicht?
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
07.12.2011  
 




AndreasS
Zunächst Danke. Aber das ist wenig hilfreich. Bildbutton sind kein Problem und mit BMP's zu arbeiten bringt nichts, wegen des fehlenden Alphakanals.
Das Durchbrechen eines Waitinput bei Auftreten eines Mausereignisses nutzt garnichts, da ein Rücksprung ohne Probleme nicht möglich ist. Jedenfalls nicht ohne das der Programmablauf (hier) völlig durcheinander gerät.

Bye
Andreas
 
07.12.2011  
 



Vielleicht in diese Richtung. Neuzeichnen oder nach XProfan anpassen.
Declare be#,erg&,erg2&,x&,y&
Dim be#,8
DEF GetCursorPos(1) !"USER32","GetCursorPos"
DEF WindowFromPoint(2) !"USER32","WindowFromPoint"
DEF ChildWindowFromPoint(3) !"USER32","ChildWindowFromPoint"
Def GetSysColor(1) !"USER32","GetSysColor"
Def ScreenToClient(2) !"USER32","ScreenToClient"
cls GetSysColor(15)
DEF &WM_MOUSEMOVE 512
Usermessages &WM_MOUSEMOVE
MCLS 40,40,RGB(0,255,0)
var bmp1%=Create("hPic",0,"&MEMBMP")
MCLS 40,40,RGB(255,0,0)
var bmp2%=Create("hPic",0,"&MEMBMP")
var Hdlg&=control("Dialog","",$58000000,50,50,40,40,%hwnd,5000,0)
Startpaint Hdlg&
DrawPic bmp1%, 0, 0; 0
Endpaint Hdlg&

while 1

    waitinput
    case %key=2:BREAK

    If %Umessage = &WM_MOUSEMOVE

        GetCursorPos(be#)
        x&=Long(be#,0)
        y&=Long(be#,4)
        erg&=@WindowFromPoint(x&,y&)

        If erg&<>0

            ScreenToClient(erg&,be#)
            x&=Long(be#,0)
            y&=Long(be#,4)
            erg2&=@ChildWindowFromPoint(erg&,x&,y&)

            If erg2&=Hdlg&

                Startpaint Hdlg&
                DrawPic bmp2%, 0, 0; 0
                Endpaint Hdlg&

                while 1

                    waitinput

                    If %Umessage = &WM_MOUSEMOVE

                        GetCursorPos(be#)
                        x&=Long(be#,0)
                        y&=Long(be#,4)
                        erg&=@WindowFromPoint(x&,y&)

                        If erg&<>0

                            ScreenToClient(erg&,be#)
                            x&=Long(be#,0)
                            y&=Long(be#,4)
                            erg2&=@ChildWindowFromPoint(erg&,x&,y&)
                            case erg2&<>Hdlg& : BREAK

                        EndIf

                    EndIf

                    If  %MousePressed

                        Messagebox("Das war ein Mausklick im Bild!","I N F O",4160)
                        SetFocus(Hdlg&)

                    EndIf

                Wend

                Startpaint Hdlg&
                DrawPic bmp1%, 0, 0; 0
                Endpaint Hdlg&

            endif

        EndIf

    endif

wend

DeleteObject bmp1%
DeleteObject bmp2%
Dispose be#
end

Gruß Thomas
 
07.12.2011  
 




Thomas
Freier
Alphatrans geht vermutlich nur mit GDI+, oder es hilft [...]  weiter.
Beispiel mit GDI
 $H windows.ph
 $H Functions_GDIPLUS.ph
 $H GDIP_Imageging.ph
 $I GDIP_Helper.inc
Declare gdiplusToken&,ImageObject&,ImageObject1&,GraphicObject&,Attributes&
Declare Color_Matrix#
SetAutoPaint 1
gdiplusToken& = InitGDIPlus()'GDIPlus starten
Declare be#,erg&,erg2&,x&,y&
Dim be#,8
DEF GetCursorPos(1) !"USER32","GetCursorPos"
DEF WindowFromPoint(2) !"USER32","WindowFromPoint"
DEF ChildWindowFromPoint(3) !"USER32","ChildWindowFromPoint"
DEF GetSysColor(1) !"USER32","GetSysColor"
DEF ScreenToClient(2) !"USER32","ScreenToClient"
DEF &WM_MOUSEMOVE 512
cls GetSysColor(15)
Usermessages &WM_MOUSEMOVE
MCLS 100,100,GetSysColor(15)
var bmp1%=Create("hPic",0,"&MEMBMP")
var Hdlg&=control("Dialog","",$58000000,50,50,100,100,%hwnd,5000,0)
OBJECT "A-1.png"'Pfad anpassen

while 1

    waitinput
    case %key=2:BREAK

    If %Umessage = &WM_MOUSEMOVE

        GetCursorPos(be#)
        x&=Long(be#,0)
        y&=Long(be#,4)
        erg&=@WindowFromPoint(x&,y&)

        If erg&<>0

            ScreenToClient(erg&,be#)
            x&=Long(be#,0)
            y&=Long(be#,4)
            erg2&=@ChildWindowFromPoint(erg&,x&,y&)

            If erg2&=Hdlg&

                Create("Bitmap", Hdlg&, bmp1%, 0, 0)
                OBJECT "A-2.png"'Pfad anpassen

                while 1

                    waitinput

                    If %Umessage = &WM_MOUSEMOVE

                        GetCursorPos(be#)
                        x&=Long(be#,0)
                        y&=Long(be#,4)
                        erg&=@WindowFromPoint(x&,y&)

                        If erg&<>0

                            ScreenToClient(erg&,be#)
                            x&=Long(be#,0)
                            y&=Long(be#,4)
                            erg2&=@ChildWindowFromPoint(erg&,x&,y&)
                            case erg2&<>Hdlg& : BREAK

                        EndIf

                    EndIf

                    If  %MousePressed

                        Messagebox("Das war ein Mausklick im Bild!","I N F O",4160)
                        SetFocus(Hdlg&)

                    EndIf

                Wend

                Create("Bitmap", Hdlg&, bmp1%, 0, 0)
                OBJECT "A-1.png"'Pfad anpassen

            endif

        EndIf

    endif

    case %wmpaint:OBJECT "A-1.png"'Pfad anpassen

wend

DeleteObject bmp1%
DeleteObject bmp2%
Dispose be#
ExitGDIPlus(gdiplusToken&)'GDIPlus beenden
end

PROC OBJECT

    parameters file$
    ImageObject1& = gdipLoadImage(file$)'Pfad anpassen

    If ImageObject1&

        'und auf %hWnd zeichnen
        ~GdipCreateFromHWND(Hdlg&,ADDR(GraphicObject&))'alle Graphics-Operationen auf %hWnd
        ~GdipDrawImageI(GraphicObject&,ImageObject&,20,0)'Bitmap zeichnen
        'Bild2 mit zeichnen
        ~GdipDrawImageRectRect(GraphicObject&,ImageObject1&,0.0,0.0,Single(400.0),Single(400.0),0.0,0.0,Single(400.0),Single(400.0),~UnitPixel,Attributes&,0,0)
        ~GdipDisposeImageAttributes(Attributes&)
        ~GdipDisposeImage(ImageObject&)
        ~GdipDisposeImage(ImageObject1&)
        ~GdipDeleteGraphics(GraphicObject&)
        Dispose Color_Matrix#

    Endif

Endproc


Gruß Thomas

5 kB
Hochgeladen:07.12.2011
Ladeanzahl117
Herunterladen
5 kB
Hochgeladen:07.12.2011
Ladeanzahl130
Herunterladen
5 kB
Hochgeladen:07.12.2011
Ladeanzahl156
Herunterladen
46 kB
Hochgeladen:07.12.2011
Ladeanzahl153
Herunterladen
9 kB
Hochgeladen:07.12.2011
Ladeanzahl143
Herunterladen
 
Gruß Thomas
Windows XP SP2, XProfan X2
07.12.2011  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

5.315 Betrachtungen

Unbenanntvor 0 min.
p.specht03.12.2020
H.Brill27.12.2018
Andreas Koch14.09.2015
Uwe Lang08.09.2015
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