Italia
Foro

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 possibile 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

Saluto Thomas
 
07.12.2011  
 




Thomas
Freier
Alphatrans geht presumibilmente 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


Saluto Thomas

5 kB
Hochgeladen:07.12.2011
Downloadcounter117
Download
5 kB
Hochgeladen:07.12.2011
Downloadcounter130
Download
5 kB
Hochgeladen:07.12.2011
Downloadcounter156
Download
46 kB
Hochgeladen:07.12.2011
Downloadcounter153
Download
9 kB
Hochgeladen:07.12.2011
Downloadcounter143
Download
 
Gruß Thomas
Windows XP SP2, XProfan X2
07.12.2011  
 



Answer


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

5.331 Views

Untitledvor 0 min.
p.specht03.12.2020
H.Brill27.12.2018
Andreas Koch14.09.2015
Uwe Lang08.09.2015
Di più...

Themeninformationen



Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


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