Italia
Fonte/ Codesnippets

Hyperlinks Messagebox Option

 
- Page 1 -


Andreas Miethe, URL=www.paules-pc-forum.de/forum/spezielles/123967-messagebox-mit-option.html#post754182, ZEITPUNKT=26.12.2009
Messagebox mit Option
Eine kleine Spielerei mit einer MessageBox e einem Hook.
Vielleicht kanns ja jemand gebrauchen.
 $H Windows.ph
 $H Messages.ph
#############################
Messagebox-Konstanten
DEF &IDOK         1
DEF &IDCANCEL     2
DEF &IDABORT      3
DEF &IDRETRY      4
DEF &IDIGNORE     5
DEF &IDYES        6
DEF &IDNO         7
DEF &IDICON      20
DEF &IDPROMPT $FFFF
DEF &IDSTATIC $CAFE
#############################
Struct CWPSTRUCT = lParam&,wParam&,message&,hwnd&
Struct Rect = left&,top&,right&,bottom&
Declare Hook&,OldProc&
Declare B&,B1&

Proc MB

    Parameters wnd&,msg&,wparam&,lparam&
    Declare Result&

    select msg&

        Caseof ~WM_INITDIALOG

        Var Rect# = New(Rect)
        ~GetWindowRect(wnd&,Rect#)
        ~Movewindow(wnd&,Rect#.left&,rect#.top&,width(wnd&)+12,Height(wnd&)+40,1)
        B& = Create("CheckBox",wnd&,"Diese Meldung nicht wieder anzeigen",0,height(wnd&)-18,width(wnd&),18)
        SendMessage(B&,~WM_SETFONT,~GetStockObject(~ANSI_VAR_FONT),1)
        SendMessage(~GetDlgItem(wnd&,&IDICON),~STM_SETIMAGE,~IMAGE_ICON,~LoadIcon(%hInstance,"EIMER"))
        Result& = 1

        Caseof ~WM_COMMAND

        If lparam& = b&

            If Getcheck(B&)

                B1& = 1

            Endif

        Endif

        Caseof ~WM_NCDESTROY

        ~UnhookWindowsHookEx(Hook&)
        Result& = 1

    Endselect

    Result& = ~CallWindowProc(OldProc&,wnd&,msg&,wparam&,lparam&)
    Return Result&

Endproc

Proc SetHook

    Parameters nCode&, wParam&, lParam&

    Select nCode&

        Caseof ~HC_ACTION

        Var pw# = New(CWPSTRUCT)
        pw# = lparam&

        If pw#.message& = ~WM_INITDIALOG

            OldProc& = ~SetWindowlong(pw#.hwnd&,~GWL_WNDPROC,ProcAddr("MB",4))

        Endif

    EndSelect

    Return ~CallNextHookEx(Hook&, nCode&, wParam&, lParam&)

EndProc

Proc PRF_Messagebox

    Set("Fastmode",1)
    Parameters  body$, title$, flags&
    Declare Result&
    Flags& = Flags& | ~MB_ICONQUESTION
    Hook& = ~SetWindowsHookEx(~WH_CALLWNDPROC, ProcAddr("SetHook",3), 0,~GetCurrentThreadId())
    Result& = MessageBox(title$,body$, flags&)
    Set("Fastmode",0)
    Return Result&

EndProc

cls
Print PRF_Messagebox("Titel","Wirklich löschen ? ",~MB_YESNO)
Print IF(B1&=1,"Nicht wieder anzeigen","wieder anzeigen")
Waitinput

Gruss
Andreas


Auch sehr schön mit Hyperlinks:  [...] 

Andreas Miethe, Beitrag=55999, Zeitpunkt=06.02.2010
Per Hook geht eine Menge
 $H Windows.ph
 $H Messages.ph
Struct CWPSTRUCT = lParam&,wParam&,message&,hwnd&
Struct Rect = left&,top&,right&,bottom&
#############################
Messagebox-Konstanten
DEF &IDOK         1
DEF &IDCANCEL     2
DEF &IDABORT      3
DEF &IDRETRY      4
DEF &IDIGNORE     5
DEF &IDYES        6
DEF &IDNO         7
DEF &IDHELP       9
DEF &IDTRYAGAIN  10
DEF &IDCONTINUE  11
DEF &IDICON      20
DEF &IDPROMPT $FFFF
DEF &IDSTATIC $CAFE
#############################

Proc MB

    Parameters wnd&,msg&,wparam&,lparam&
    Declare Result&,W&,H&,b&
    Result& = ~CallWindowProc(OldProc&,wnd&,msg&,wparam&,lparam&)

    select msg&

        Caseof ~WM_INITDIALOG

        Var SRect# = New(Rect)
        ~GetWindowRect(wnd&,SRect#)
        Dialog vergrössern und zentrieren
        W& = SRect#.right& - SRect#.left&
        H& = SRect#.bottom& -SRect#.top& + 40
        ~Movewindow(wnd&,((%maxx/2)-(W&/2)),((%maxy/2)-(H&/2)),W&,H&,1)
        Positionen der Controls 40 Pixel nach untern verchieben
        ~Getwindowrect(~GetDlgItem(wnd&,&IDSTATIC),SRect#)
        ~Mapwindowpoints(0,wnd&,SRect#,2)
        ~Movewindow(~GetDlgItem(wnd&,&IDSTATIC),0,SRect#.Top&+40,SRect#.Right&,SRect#.Bottom&,1)

        Whileloop 1,11

            If ~IsWindow(~GetDlgItem(wnd&,&Loop))

                ~Getwindowrect(~GetDlgItem(wnd&,&Loop),SRect#)
                ~Mapwindowpoints(0,wnd&,SRect#,2)
                ~Setwindowpos(~GetDlgItem(wnd&,&Loop),0,SRect#.Left&,SRect#.Top&+40,0,0,~SWP_NOSIZE | ~SWP_NOZORDER)

            Endif

        Endwhile

        Position vom PROMPT holen
        ~Getwindowrect(~GetDlgItem(wnd&,&IDPROMPT),SRect#)
        ~Mapwindowpoints(0,wnd&,SRect#,2)
        LINKS unter PROMPT anlegen
        Link& = Control("SysLink","<a>Besuch meine Homepage</a>",$50000000,SRect#.Left&,SRect#.Bottom&+10,width(wnd&),18,wnd&,4000,0,0)
        SendMessage(Link&,~WM_SETFONT,~GetStockObject(~ANSI_VAR_FONT),1)
        Mail& = Control("SysLink","<a>Schick mir eine Mail</a>",$50000000,SRect#.Left&,SRect#.Bottom&+30,width(wnd&),18,wnd&,4001,0,0)
        SendMessage(Mail&,~WM_SETFONT,~GetStockObject(~ANSI_VAR_FONT),1)
        Dispose SRect#
        Result& = 1

        Caseof ~WM_NOTIFY

        Link abfragen

        If (Long(lparam&,8) = -2) and (Long(lParam&,0) = LINK&)

            ShellExec("https://www.ampsoft.eu","open",~SW_SHOWNORMAL)

        endif

        If (Long(lparam&,8) = -2) and (Long(lParam&,0) = Mail&)

            ShellExec("Mailto://","open",~SW_SHOWNORMAL)

        endif

        Result& = 1

        Caseof ~WM_NCDESTROY

        ~UnhookWindowsHookEx(Hook&)
        Result& = 1

    Endselect

    Return Result&

Endproc

Proc SetHook

    Parameters nCode&, wParam&, lParam&

    Select nCode&

        Caseof ~HC_ACTION

        Var pw# = New(CWPSTRUCT)
        pw# = lparam&

        If pw#.message& = ~WM_INITDIALOG

            OldProc& = ~SetWindowlong(pw#.hwnd&,~GWL_WNDPROC,ProcAddr("MB",4))
            Dispose pw#

        Endif

    EndSelect

    Return ~CallNextHookEx(Hook&, nCode&, wParam&, lParam&)

EndProc

Proc PRF_Messagebox

    Set("Fastmode",1)
    Parameters  body$, title$, flags&
    Declare Result&
    Hook& = ~SetWindowsHookEx(~WH_CALLWNDPROC, ProcAddr("SetHook",3), 0,~GetCurrentThreadId())
    Result& = MessageBox(title$,body$, flags&)
    Set("Fastmode",0)
    Return Result&

EndProc

Hier gehts los
Declare Hook&,OldProc&
Declare LINK&,Mail&
cls
Print PRF_Messagebox("Eine Frage...","Wirklich löschen ?",~MB_YESNOCANCEL | ~MB_DEFBUTTON2 | ~MB_ICONQUESTION | ~MB_APPLMODAL)
Waitinput
 
27.12.2009  
 



 
- Page 1 -



Andreas
Miethe


Jörg Sellmeyer, Beitrag=55605, Zeitpunkt=27.12.2009
Sehr schön! Bei mir wird allerdings, statt des Textes in der Checkbox, nur ein schwarzer Balken angezeigt.
Ist eigentlich dein ~DeleteObject() etwas anderes als das profane oder potuto man auch einfach DeleteObject h& verwenden?


Das mit dem schwarzen Balken verstehe ich nicht, ich habs ja extra unter XP getestet und fotografiert.

~DeleteObject() oder profanes DeleteObject ist wohl das Selbe.
 
Gruss
Andreas
________ ________ ________ ________ _
Profan 3.3 - XProfanX2
Win 95,98,ME,2000,XP,Vista - Win 7 32 / 64 Bit
ASUS X93S - Intel Core I7-NVIDIA GForce 540M 8GB Arbeitsspeicher
Homepage :  [...] 
27.12.2009  
 



H.Brill, Beitrag=55597, Zeitpunkt=27.12.2009
iF: EndProcedure im Code geändert in EndProc.

Programmierste stereo -> PureBasic + XProfan ?


Also ich hab kein PB und brauch auch keins um zu wissen, dass EndProcedure wohl ein EndProc hätte werden sollen. ^^
 
27.12.2009  
 




Frank
Abbing
Den schwarzen Balken kann ich bestätigen.
 
27.12.2009  
 




Jörg
Sellmeyer
So sieht das dann aus:


mb.jpg  
10 kB
Hochgeladen:27.12.2009
Downloadcounter151
Download
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
27.12.2009  
 



 
- Page 2 -



Rolf
Koch
Wie immer die Manifest, welche diesen schwarzen Balken erscheinen lässt!
 
27.12.2009  
 




Jörg
Sellmeyer
Bei mir hat Profan keine Manifest-File.
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
28.12.2009  
 




Dieter
Zornow
Ebenfalls schwarzer Balken
 
Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai., Win 7 32 bit und Win 7 64 bit, mit XProfan X2
28.12.2009  
 




Andreas
Miethe


Rolf Koch, Beitrag=55613, Zeitpunkt=27.12.2009
Wie immer die Manifest, welche diesen schwarzen Balken erscheinen lässt!




Das hat geholfen.
Habe den Code dementsprechend geändert.
 
Gruss
Andreas
________ ________ ________ ________ _
Profan 3.3 - XProfanX2
Win 95,98,ME,2000,XP,Vista - Win 7 32 / 64 Bit
ASUS X93S - Intel Core I7-NVIDIA GForce 540M 8GB Arbeitsspeicher
Homepage :  [...] 
28.12.2009  
 




Jörg
Sellmeyer
Super! Funktioniert.
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
28.12.2009  
 




Paul
Glatz
Wie ist es possibile den Text der Buttons zu ändern?
 
12.10.2010  
 



Na spätestens z.B. mit FindWindowEx Buttons finden weils die Params
ermöglicht und so viele Buttons ne MSG-Box nicht hat aber GetDlgItem geht bestimmt auch... und dann halt SetText.
 
12.10.2010  
 




Paul
Glatz
Aha. Im bunteren Beispiel ist der Text ja gelb wie kann ich ihn eine andere Farbe geben?

EDIT:
Den Text des Ja Buttons ändern: settext ~GetDlgItem(wnd&,&IDYES),"t1"
 
12.10.2010  
 




Zum Quelltext


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

12.816 Views

Untitledvor 0 min.
E.T. vor 10 Tagen
Gast.081515.12.2024
Member 862464113.05.2024
Uwe Lang17.12.2018
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