Deutsch
Forum

Merkwürdiges Verhalten beim Einsatz eines Tab Controls

 

Dieter
Zornow
Ich habe in meinem Programm Probleme eine mit Create("Bitmap" .... erstellte Grafik je nach Tab anzuzeigen oder zu verstecken, Habe dann mal zum Testen ein Minimalbeispiel gemacht und das verhält sich total anders als in meinem Original. Im Original bekomme ich es nicht versteckt. Hier wird es zunächst nicht angezeigt, obwohl es das müsste. Aber noch klicken auf die Reiter erscheint es dann doch. Habe dann die Abfrage getestet mit TabChanged() getfocus() und Clicked(). Dabei ist noch eine Merkwürdigkeit aufgetaucht. Das Tabcontrol erhält scheinbar niemals den Fokus, denn sonst müsste im Hauptfenster meine Abfrage erscheinen. Ich kann stundenlang klicken, das Tabcontrol hat keinen Fokus erst wenn ich auf einen Reiter zweimal hintereineinander klicke hat es von da an den Fokus.Clicked() und Tabchanged() reagieren aber auch ohne Fokus In diesem Zusammenhang scheint XProfan je nach Laune zu reagieren, denn die Ausgangsbasis war, ich kann die Bitmap nicht verstecken. Hier mal ein Testcode. ich hoffe auf die Schnelle sind keine Fehler drin.
KompilierenMarkierenSeparieren
Def Show(1) ShowWindow(@&(1), 1)
Def Hide(1) ShowWindow(@&(1), 0)
var ende% = 0
cls
dialog()

Proc SetActiveTab

    Parameters Tab&,Index&
    SendMessage(Tab&,$1330,Index&, 0)

EndProc

PROC DIALOG

    var DLG& = CREATE("DIALOG",%Hwnd,"Neues Fenster",(%maxx/2 - 534/2),(%maxy/2 - 500/2),534,500)
    Var tc& = CREATE("TABCTRL",DLG&,"Tab 1",0003,0003,0520,0412)
    InsertTab(tc&,1,"Tab 2")
    InsertTab(tc&,2,"Tab 3")
    InsertTab(tc&,3,"Tab 4")
    var hpic& = Create("hSizedPic",-1,$WinPath+"\Angler.bmp",100,100,1)
    var bmp& = Create("BITMAP",dlg&,hpic&,10,35)
    var but& = Create("Button",dlg&,"Verstecke",10,250,100,25)
    setActivetab(tc&,0)
    show(bmp&)

    whilenot ende%

        waitinput

        If %key = 2

            ende% = 1

        elseif TabChanged(tc&)

        elseif getfocus(tc&)

        elseif clicked(tc&)

            case getfocus(tc&):Print "Focus"
            case getactivetab(tc&) = 0:show(bmp&)
            case getactivetab(tc&) = 1:hide(bmp&)
            case getactivetab(tc&) = 2:hide(bmp&)
            case getactivetab(tc&) = 3:show(bmp&)

        elseif Clicked(but&)

            Hide(bmp&)

        endif

    endwhile

    deleteobject hpic&
    end

endproc


Gruß

Dieter
 
Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai., Win 7 32 bit und Win 7 64 bit, mit XProfan X2
15.08.2008  
 




Jörg
Sellmeyer
Also, wenn Du die Bitmap auf tc& plazierst, erscheint sie auch gleich und die Buttonabfrage darf natürlich nicht hinter GetFocus(tc&) erfolgen. Wenn man hinter die Buttonabfrage wieder den Focus auf tc& setzt, funktioniert es auch.
KompilierenMarkierenSeparieren
 $H commctrl.ph
Def Show(1) ShowWindow(@&(1), 1)
Def Hide(1) ShowWindow(@&(1), 0)
var ende% = 0
cls
dialog()

Proc SetActiveTab

    Parameters Tab&,Index&
    SendMessage(Tab&,$1330,Index&, 0)

EndProc

PROC DIALOG

    var DLG& = CREATE("DIALOG",%Hwnd,"Neues Fenster",(%maxx/2 - 534/2),(%maxy/2 - 500/2),534,500)
    Var tc& = CREATE("TABCTRL",DLG&,"Tab 1",0003,0003,0520,0412)
    InsertTab(tc&,1,"Tab 2")
    InsertTab(tc&,2,"Tab 3")
    InsertTab(tc&,3,"Tab 4")
    var hpic& = Create("hSizedPic",-1,$WinPath+"\Angler.bmp",100,100,1)
    var bmp& = Create("BITMAP",tc&,hpic&,10,35)
    var but& = Create("Button",dlg&,"Verstecke",10,250,100,25)
    setActivetab(tc&,0)
    show(bmp&)

    whilenot ende%

        waitinput

        If %key = 2

            ende% = 1

        elseif TabChanged(tc&)

        elseif TabChanged(tc&)

        elseif clicked(tc&)

            case getfocus(tc&):Print "Focus"
            case getactivetab(tc&) = 0:show(bmp&)
            case getactivetab(tc&) = 1:hide(bmp&)
            case getactivetab(tc&) = 2:hide(bmp&)
            case getactivetab(tc&) = 3:show(bmp&)

        elseif Clicked(but&)

            Hide(bmp&)
            SetFocus(tc&)

        endif

    endwhile

    deleteobject hpic&
    end

endproc


Ich würde es allerdings eher so lösen:
KompilierenMarkierenSeparieren
 $H commctrl.ph
Def Show(1) ShowWindow(@&(1), 1)
Def Hide(1) ShowWindow(@&(1), 0)
var ende% = 0
cls
dialog()

Proc SetActiveTab

    Parameters Tab&,Index&
    SendMessage(Tab&,$1330,Index&, 0)

EndProc

PROC DIALOG

    var DLG& = CREATE("DIALOG",%Hwnd,"Neues Fenster",(%maxx/2 - 534/2),(%maxy/2 - 500/2),534,500)
    Var tc& = CREATE("TABCTRL",DLG&,"Tab 1",0003,0003,0520,0412)
    InsertTab(tc&,1,"Tab 2")
    InsertTab(tc&,2,"Tab 3")
    InsertTab(tc&,3,"Tab 4")
    var hpic& = Create("hSizedPic",-1,$WinPath+"\Angler.bmp",100,100,1)
    var bmp& = Create("BITMAP",tc&,hpic&,10,35)
    var but& = Create("Button",dlg&,"Verstecke",10,250,100,25)
    setActivetab(tc&,0)
    show(bmp&)

    whilenot ende%

        waitinput
        Case Clicked(tc&):ShowWindow(bmp&,(GetActivetab(tc&) = 0) Or (GetActivetab(tc&) = 3))

        If %key = 2

            ende% = 1

        elseif TabChanged(tc&)

            Hier kann man noch andere Sachen machen

        elseif Clicked(but&)

            Hide(bmp&)
            SetFocus(tc&)

        endif

    endwhile

    deleteobject hpic&
    end

endproc

 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
15.08.2008  
 




Dieter
Zornow
@Jörg,

Danke, in meinem Originalprogramm frage ich auch mit Tabchanged() ab. Das war nur ein Test mit dem Fokus. Seltsam ist schon, dass das Tabcontrol erst nach einem Doppelklick den Fokus erhält. Zum zweiten sollte das Bild auch auf dlg& sofort erscheinen, denn Controls sollten meiner Meinung nach nicht auf das Tabcontrol. Wenn man in meinem Beispiel mit Tabchanged() abfragt erscheint es ja auch aber erst nach dem Klick auf die Tabs. Das ist eigentlich alles sehr seltsam und ich kann es mir nicht erklären. Ich will halt immer wissen, warum es sich so verhält.
Bin aber immer noch am suchen warum sich das Bild in meinem Originalprogramm egal wo ich es hinlege nicht verstecken lässt. ich werde wohl alles ändern und jedes Tab auf ein eigenes Control legen, das ich dann gesamt verstecke und anzeige, denn ich habe auf jedem Tab, bei 6 Tabs, ca 17 Controls und Profan ist zu langsam beim Erstellen die nichtangezeigten gleich zu verstecken, so dass alles flackert beim Aufbau.

Gruß

Dieter
 
Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai., Win 7 32 bit und Win 7 64 bit, mit XProfan X2
16.08.2008  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

830 Betrachtungen

Unbenanntvor 0 min.
Jörg Sellmeyer23.06.2020
Torben Nissen04.05.2020
Peter Max Müller16.04.2015
thb25.04.2012

Themeninformationen

Dieses Thema hat 2 Teilnehmer:

Dieter Zornow (2x)
Jörg Sellmeyer (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