Deutsch
Forum

Probleme mit waitinput (wieder mal!)

 

Nico
Madysa
OK, ich habe wieder mal Probleme mit waitinput.
Folgender Code gehört zu dem von mir geschriebenen Button-Helfer, der noch nicht fertig ist.
KompilierenMarkierenSeparieren
Struct GB = gb& , search& , verz& , num& , art& , label&
Def ExtractIcon(3) !"SHELL32","ExtractIconA"
Def LoadImage(6)   !"USER32","LoadImageA"
Def %WinX 565
Def %WinY 305

SubProc Create.Switch

    parameters h& , t$ , x% , y% , dx% , dy%
    return Control("Button",t$,$50011003,x%,y%,dx%,dy%,h&,1002,%Hinstance)

endproc

proc SetNumeric

    parameters e& , on%

    if TestBit(GetStyle(e&),13)            es_numeric = an

        ifnot on%                            if aus

            SetStyle e& , GetStyle(e&) - $2000

        endif

        else                                  es_numeric = aus

        if on%                               if an

            SetStyle e& , GetStyle(e&) + $2000

        endif

    endif

endproc

 $0001 = 00. Stelle
 $0002 = 01. Stelle
 $0004 = 02. Stelle
 $0008 = 03. Stelle
 $0010 = 04. Stelle
 $0020 = 05. Stelle
 $0040 = 06. Stelle
 $0080 = 07. Stelle
 $0100 = 08. Stelle
 $0200 = 09. Stelle
 $0400 = 10. Stelle
 $0800 = 11. Stelle
 $1000 = 12. Stelle
 $2000 = 13. Stelle

proc Delimit

    parameters e&

    if TestBit(GetStyle(e&),7)AutoHScroll

        SetStyle e& , (GetStyle(e&)-$80)

    endif

endproc

proc IconButton

    parameters was$ , h& , x% , y% , dx% , dy%
    declare ico# , hb& , weg$ , num%

    if Upper$(was$) = "RUN"

        weg$ = Par$(0)
        num% = %(7)

    elseif Upper$(was$) = "ICO"

        weg$ = $(7)
        num% = 0

    elseif Upper$(was$) = "DLL"

        weg$ = $(7)
        num% = %(8)

    endif

    dim ico# , len(weg$) + 1
    String ico# , 0 = weg$
    hb& = CONTROL("Button","",bs&,x%,y%,dx%,dy%,h&,1002,%Hinstance)
    SendMessage(hb&,$00F7,1,ExtractIcon(%Hinstance,ico#,num%))
    dispose ico#
    return hb&

endproc

proc BMPButton

    parameters was$ , h& , x% , y% , dx% , dy%
    declare bmp# , hb& , bmp& , name$ , hi&

    if Upper$(was$) = "RUN"

        name$ = $(7)
        hi&   = %hInstance

    elseif Upper$(was$) = "BMP"

        name$ = $(7)
        hi&   = 0

    elseif Upper$(was$) = "DLL"

        name$ = %(7)
        hi&   = $(8)

    endif

    dim bmp#, len(name$) + 1
    string bmp# , 0 = name$
    bmp& = LoadImage(hi&,bmp#,0,dx%-2,dy%-2,if(Equ$(upper$(was$),"BMP"),$0050,0))
    hb&  = Control("Button","",bs&,x%,y%,dx%,dy%,h&,1001,%HInstance)
    SendMessage(hb&,$00F7,0,bmp&)
    dispose bmp#
    return hb&

endproc

+$120 = links
+$220 = rechts
+$400 = oben
+$800 = unten
+$11003 = Schalter
+$8000 = Flat

proc RealizeStyle

    declare style&
    style& = $54010000

    if GetCheck(bnorm&)

        case GetCheck(tl&)     : style& = style& + $400   + $120
        case GetCheck(tm&)     : style& = style& + $400
        case GetCheck(tr&)     : style& = style& + $400   + $220
        case GetCheck(ml&)     : style& = style& +          $120
        case GetCheck(mm&)     : style& = style&
        case GetCheck(mr&)     : style& = style& +          $220
        case GetCheck(bl&)     : style& = style& + $800   + $120
        case GetCheck(bm&)     : style& = style& + $800
        case GetCheck(br&)     : style& = style& + $800   + $220
        case GetCheck(cbml&)   : style& = style& + $2000

    endif

    case GetCheck(cbflat&) : style& = style& + $8000
    case GetCheck(switch&) : style& = style& + $11003
    case GetCheck(bico&)   : style& = style& + $40
    case GetCheck(bbmp&)   : style& = style& + $80
    Return style&

endproc

proc AddLine

    parameters line$
    SetText dummy& , GetText$(dummy&) + line$ + "
    "

endproc

proc AddICOProc

    AddLine "Def ExtractIcon(3) ! qSHELL32q,qExtractIconAq"
    AddLine ""
    AddLine "proc IconButton"
    AddLine "parameters was$ , h& , x% , y% , dx% , dy%"
    AddLine "declare ico# , hb& , weg$ , num%"
    AddLine " if Upper$(was$) = qRUNq"
    AddLine "   weg$ = Par$(0)"
    AddLine "   num% = %(7)"
    AddLine "  elseif Upper$(was$) = qICOq"
    AddLine "   weg$ = $(7)"
    AddLine "   num% = 0"
    AddLine "  elseif Upper$(was$) = qDLLq"
    AddLine "   weg$ = $(7)"
    AddLine "   num% = %(8)"
    AddLine " endif"
    AddLine " Dim ico# , len(weg$) + 1"
    AddLine " String ico# , 0 = weg$"
    AddLine " hb& = CONTROL(qButtonq,qq,$"+Hex$(bs&)+",x%,y%,dx%,dy%,h&,1002,%Hinstance)"
    AddLine " SendMessage(hb&,$00F7,1,ExtractIcon(%hInstance,ico#,num%))"
    AddLine " Dispose ico#"
    AddLine " return hb&"
    AddLine "endproc"

endproc

proc AddBMPProc

    AddLine "Def LoadImage(6) ! qUSER32q,qLoadImageAq"
    AddLine ""
    AddLine "proc BMPButton"
    AddLine "parameters was$ , h& , x% , y% , dx% , dy%"
    AddLine "declare bmp# , hb& , bmp& , name$ , hi&"
    AddLine " if Upper$(was$) = qRUNq"
    AddLine "   name$ = $(7)"
    AddLine "   hi&   = %hInstance"
    AddLine "  elseif Upper$(was$) = qBMPq"
    AddLine "   name$ = $(7)"
    AddLine "   hi&   = 0"
    AddLine "  elseif Upper$(was$) = qDLLq"
    AddLine "   name$ = $(7)"
    AddLine "   hi& = %(8)"
    AddLine " endif"
    AddLine " Dim bmp#, len(name$) + 1"
    AddLine " String bmp# , 0 = name$"
    AddLine " bmp& = LoadImage(hi&,bmp#,0,dx%-2,dy%-2,if(Equ$(upper$(was$),qBMPq),$0050,0))"
    AddLine " hb&  = Control(qButtonq,qq,$"+Hex$(bs&)+",x%,y%,dx%,dy%,h&,1001,%hInstance)"
    AddLine " SendMessage(hb&,$00F7,0,bmp&)"
    AddLine " Dispose bmp#"
    AddLine " return hb&"
    AddLine "endproc"

endproc

proc MakeDaCode

    SetText dummy& , ""
    AddLine "Button-Style: $"+Hex$(bs&)
    AddLine ""
    AddLine "Def SysColor(1) !qUser32q,qGetSysColorq"
    AddLine ""
    AddLine "declare hBTN&"
    AddLine ""

    if GetCheck(bico&)

        AddIcoProc
        AddLine ""

    elseif GetCheck(bbmp&)

        AddBMPProc
        AddLine ""

    endif

    AddLine "cls SysColor(15)"

    if GetCheck(bico&)

        With ico#

            if GetText$(.art&) = "Aus DLL"

                AddLine "IcoButton qDLLq , %hWnd , 5 , 5 , 100 , 50 , q"+GetText$(.verz&)+"q , "+GetText$(.num&)
                AddLine "hBTN& = &(0)"

            elseif GetText$(.art&) = "Aus Datei"

                AddLine "IcoButton qICOq , %hWnd , 5 , 5 , 100 , 50 , q"+GetText$(.verz&)+"q"
                AddLine "hBTN& = &(0)"

            elseif GetText$(.art&) = "Aus Runtime"

                AddLine "IcoButton qRUNq , %hWnd , 5 , 5 , 100 , 50 , "+GetText$(.num&)
                AddLine "hBTN& = &(0)"

            endif

        EndWith

    elseif GetCheck(bbmp&)

        With bmp#

            if GetText$(.art&) = "Aus DLL"

                AddLine "IcoButton qDLLq , %hWnd , 5 , 5 , 100 , 50 , "+GetText$(.num&)+" , q"+GetText$(.verz&)+"q"
                AddLine "hBTN& = &(0)"

            elseif GetText$(.art&) = "Aus Datei"

                AddLine "IcoButton qBMPq , %hWnd , 5 , 5 , 100 , 50 , q"+GetText$(.verz&)+"q"
                AddLine "hBTN& = &(0)"

            elseif GetText$(.art&) = "Aus Runtime"

                AddLine "IcoButton qRUNq , %hWnd , 5 , 5 , 100 , 50 , "+GetText$(.num&)
                AddLine "hBTN& = &(0)"

            endif

        EndWith

    elseif GetCheck(bnorm&)

        AddLine "hBTN& = @Control(qBUTTONq,qBeendenq,\
        "+
        "         $"+Hex$(bs&)+",5,5,100,50,%hWnd,\
        "+
        "         1000,%hInstance)"

    endif

    AddLine ""
    AddLine "whilenot @Equ(%GetFocus,hBTN&)"
    AddLine "  waitinput"
    AddLine "wend"
    AddLine "end"
    SetText code& , GetText$(dummy&)

endproc

proc CheckPic

    declare buffer# , hb& , bmp& , name$ , hi& , jumper%

    if GetCheck(bico&)

    elseif GetCheck(bbmp&)

        parameters was$ , h& , x% , y% , dx% , dy%

        if GetText$(bmp#.art&) = "aus Runtime"

            name$ = bmp#.num&
            hi&   = %hInstance

        elseif GetText$(bmp#.art&) = "aus Datei"

            name$ = bmp#.verz&
            hi&   = 0

        elseif GetText$(bmp#.art&) = "aus DLL"

            jumper% = 1

        endif

        dim buffer#, len(name$) + 1
        string buffer# , 0 = name$
        bmp& = LoadImage(hi&,buffer#,0,dx%-2,dy%-2,if(Equ$(upper$(was$),"BMP"),$0050,0))
        hb&  = Control("Button","",bs&,x%,y%,dx%,dy%,h&,1001,%hInstance)
        SendMessage(hb&,$00F7,0,bmp&)
        dispose buffer&

    endif

endproc

proc BuildUp

    declare wx% , wy%
    WindowStyle 26
    WindowTitle "Button-Helfer"
    Window %MaxX , %MaxY - %WinX , %WinY
    UseFont "Comic Sans MS" , 17 , 0 , 0 , 1 , 0
    cls External("User32","GetSysColor",15)
    SetDialogFont 1
    dummy& = Create("Text",%hWnd,"",0,0,0,0)
    gbart& = Create("GroupBox",%hWnd,"Art des Button", 5, 5,150,100)
    bnorm& = Create("Switch",%hWnd,"Text-Button"   ,10,20,140, 27)
    bico&  = Create("Switch",%hWnd,"Icon-Button"   ,10,47,140, 27)
    bbmp&  = Create("Switch",%hWnd,"Bitmap-Button" ,10,74,140, 27)
    SetCheck bnorm& , 1
    Text-Bereich
    gbtxt& = Create("GroupBox",%hWnd,"Textausrichtung",5,105,150,100)
    tl& = Create("RadioButton",gbtxt&,"",40+00,20,20,20)
    tm& = Create("RadioButton",gbtxt&,"",40+20,20,20,20)
    tr& = Create("RadioButton",gbtxt&,"",40+40,20,20,20)
    ml& = Create("RadioButton",gbtxt&,"",40+00,40,20,20)
    mm& = Create("RadioButton",gbtxt&,"",40+20,40,20,20)
    mr& = Create("RadioButton",gbtxt&,"",40+40,40,20,20)
    bl& = Create("RadioButton",gbtxt&,"",40+00,60,20,19)
    bm& = Create("RadioButton",gbtxt&,"",40+20,60,20,19)
    br& = Create("RadioButton",gbtxt&,"",40+40,60,20,19)
    cbml&   = Create("CheckBox",gbtxt&,"Mehrere Zeilen",5,78,120,20)
    Icon-Bereich
    ico#.gb&    = Create("GroupBox" ,%hWnd   ,"Icon-Suche",160,5,150,100)
    ico#.art&   = Create("ChoiceBox",ico#.gb&,""          ,  5, 18,140, 80)
    ico#.search&= Create("Button"   ,ico#.gb&,"Suchen"    ,  5, 45, 50, 25)
    ico#.verz&  = Create("Edit"     ,ico#.gb&,"Pfad"      , 60, 45, 85, 20)
    ico#.label& = Create("Text"     ,ico#.gb&,"Nummer:"   ,  5, 75, 60, 20)
    ico#.num&   = Create("Edit"     ,ico#.gb&,"10"        , 70, 75, 75, 20)
    Bitmap-Bereich
    bmp#.gb&    = Create("GroupBox" ,%hWnd   ,"Bitmap-Suche",160,105,150,100)
    bmp#.art&   = Create("ChoiceBox",bmp#.gb&,""            ,  5, 18,140, 80)
    bmp#.search&= Create("Button"   ,bmp#.gb&,"Suchen"      ,  5, 45, 50, 25)
    bmp#.verz&  = Create("Edit"     ,bmp#.gb&,"hInstance&"  , 60, 45, 85, 20)
    bmp#.label& = Create("Text"     ,bmp#.gb&,"Name:"       ,  5, 75, 60, 20)
    bmp#.num&   = Create("Edit"     ,bmp#.gb&,"GESICHT"     , 70, 75, 75, 20)
    cbflat& = Create("CheckBox" ,%hWnd,"Flat-Button"    ,  5,215,150, 20)
    switch& = Create("CheckBox" ,%hWnd,"Schalter-Button",  5,240,150, 20)
    expl&   = Create("Button"   ,%hWnd,"Das Beispiel"   ,160,215,150, 50)
    code&   = Create("MultiEdit",%hWnd,""               ,315,  5,245,260)
    clip&   = Create("Button"   ,%hWnd,"Code in die Zwischenablage kopieren",  5,270,305,30)
    quit&   = Create("Button"   ,%hWnd,"Button-Helfer beenden"              ,315,270,245,30)
    font& = Create("Font","Courier New",15,0,0,0,0)
    Initialisierungen
    SetFont code& , font&
    AddString(ico#.art&,"Aus DLL")
    AddString(ico#.art&,"Aus Datei")
    AddString(ico#.art&,"Aus Runtime")
    AddString(bmp#.art&,"Aus DLL")
    AddString(bmp#.art&,"Aus Datei")
    AddString(bmp#.art&,"Aus Runtime")
    SetNumeric ico#.num& , 1
    Delimit    ico#.num&
    SendMessage(ico#.art&,$014E,1,0)
    SendMessage(bmp#.art&,$014E,1,0)
    EnableWindow bmp#.search& , 0
    EnableWindow ico#.gb&     , 0
    EnableWindow bmp#.gb&     , 0
    SetCheck bnorm& , 1
    SetCheck mm&    , 1
    bs& = RealizeStyle()
    SetStyle expl& , bs&
    MakeDaCode
    wx% = 2 * %WinX -  width(%hWnd)
    wy% = 2 * %WinY - height(%hWnd)
    SetWindowPos %hWnd = (%MaxX-wx%)/2 , (%MaxY-wy%)/2 - wx% , wy%

endproc

proc Beenden

    DeleteObject font&
    Dispose ico#
    Dispose bmp#
    end

endproc

Handles
declare expl& , code& , cbflat& , cbml& , switch& , dummy&
declare gbart& , bnorm& , bico& , bbmp& , ico# , bmp#
declare clip& , quit& , font&
declare gbtxt& , tl& , tm& , tr& , ml& , mm& , mr& , bl& , bm& , br&
Variablen
declare bs& , i% , buttonchecker%
Dim ico# , GB
Dim bmp# , GB
H A U P T P R O G R A M M
BuildUp
bs& = GetStyle(expl&)

whilenot %Key = 2

    GetMessage
    inc i%
    SetText %hWnd , "$" + Hex$(%Message) + " | " + str$(i%)

    ifnot GetCheck(bnorm&) or GetCheck(bico&) or GetCheck(bbmp&)

        SetCheck %GetFocus , 1

    endif

    if (GetFocus(bnorm&) or GetFocus(bico&) or GetFocus(bbmp&)) and not(IsKey(1))

        buttonchecker% = 1

    endif

    if GetFocus(bnorm&)

        SetCheck bico& , 0
        SetCheck bbmp& , 0
        EnableWindow gbtxt& , 1
        EnableWindow ico#.gb& , 0
        EnableWindow bmp#.gb& , 0

    elseif GetFocus(bico&)

        SetCheck bnorm& , 0
        SetCheck bbmp&  , 0
        EnableWindow gbtxt& , 0
        EnableWindow ico#.gb& , 1
        EnableWindow bmp#.gb& , 0

    elseif GetFocus(bbmp&)

        SetCheck bnorm& , 0
        SetCheck bico&  , 0
        EnableWindow gbtxt& , 0
        EnableWindow ico#.gb& , 0
        EnableWindow bmp#.gb& , 1

    endif

    With bmp#

        if GetText$(.art&) = "Aus DLL"

            EnableWindow .search& , 0
            EnableWindow .verz&   , 1
            EnableWindow .label&  , 1
            EnableWindow .num&    , 1
            SetText .verz& , "hInstance&"
            SetText .num&  , "GESICHT"

        elseif GetText$(.art&) = "Aus Datei"

            EnableWindow .search& , 1
            EnableWindow .verz&   , 1
            EnableWindow .label&  , 0
            EnableWindow .num&    , 0
            SetText .verz& , "Pfad"
            SetText .num&  , ""

        elseif GetText$(.art&) = "Aus Runtime"

            EnableWindow .search& , 0
            EnableWindow .verz&   , 0
            EnableWindow .label&  , 1
            EnableWindow .num&    , 1
            SetText .verz& , ""
            SetText .num&  , "GESICHT"

        endif

    EndWith

    With ico#

        if GetText$(.art&) = "Aus DLL"

            EnableWindow .search& , 1
            EnableWindow .verz&   , 1
            EnableWindow .label&  , 1
            EnableWindow .num&    , 1

        elseif GetText$(.art&) = "Aus Datei"

            EnableWindow .search& , 1
            EnableWindow .verz&   , 1
            EnableWindow .label&  , 0
            EnableWindow .num&    , 0

        elseif GetText$(.art&) = "Aus Runtime"

            EnableWindow .search& , 0
            EnableWindow .verz&   , 0
            EnableWindow .label&  , 1
            EnableWindow .num&    , 1

        endif

    EndWith

    bs& = RealizeStyle()

    if (bs& <> GetStyle(expl&)) or buttonchecker%

        MakeDaCode

        if GetCheck(cbml&)

            SetText expl& , "Das
            Beispiel"

        else

            SetText expl& , "Das Beispiel"

        endif

        SetStyle expl& , bs&
        buttonchecker% = 0

    endif

wend

Beenden
Ende

Wichtig sind die ersten Zeilen der Hauptschleife. Mein Problem ist folgendes:
Nehme ich GetMessage, flackert die Code-Anzeige, wenn man auf einen der oberen linken Buttons drückt. Verwende ich waitinput, wird das beim Anklicken der 9 RadioButtons nicht durchbrochen. Ich habe an eine Usermessage gedacht, habe aber keine Ahnung wie. Kann mir jemand helfen?
 
Nico Madysa
17.08.2006  
 




Michael
Dell
Hallole, hatte das Problem auch schon.

Lösung: Die RadioButtons auf %HWnd und die Position auf GroupBox setzen.
KompilierenMarkierenSeparieren
!Tl& = Create("RadioButton",%Hwnd,"",40+00+10,20+105,20,20)
Tm& = Create("RadioButton",%Hwnd,"",40+20+10,20+105,20,20)
Tr& = Create("RadioButton",%Hwnd,"",40+40+10,20+105,20,20)
Ml& = Create("RadioButton",%Hwnd,"",40+00+10,40+105,20,20)
Mm& = Create("RadioButton",%Hwnd,"",40+20+10,40+105,20,20)
Mr& = Create("RadioButton",%Hwnd,"",40+40+10,40+105,20,20)
Bl& = Create("RadioButton",%Hwnd,"",40+00+10,60+105,20,19)
Bm& = Create("RadioButton",%Hwnd,"",40+20+10,60+105,20,19)
Br& = Create("RadioButton",%Hwnd,"",40+40+10,60+105,20,19)

Liegt daran das nur Childs von Fenster/Dialog nicht aber die Childs der Childs das WaitInput durchbrechen.
 
Salu Michael...

Hab zwar krumme Fieß awer dofir e' ecklich Gsicht! 
17.08.2006  
 




Nico
Madysa
Klappt einwandfrei, danke.

P.S.: Vielleicht sollte diesbezüglich mal das waitinput überarbeitet werden.
 
Nico Madysa
01.09.2006  
 



Schau Dir auch mal das Beispiel zur Lists.Pcu  an, vielleicht solltest Du das einfach erweitern - die Engine finde ich ist mir gut gelungen. (und nix flackert etc)
 
01.09.2006  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

721 Betrachtungen

Unbenanntvor 0 min.
Walter30.12.2022
Joerg28.04.2016
H.Brill12.12.2014
Chregu Mueller02.04.2013
Mehr...

Themeninformationen

Dieses Thema hat 3 Teilnehmer:

Nico Madysa (2x)
iF (1x)
Michael Dell (1x)


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