Français
Forum

Rebar Größenänderung Subclassing

 
- page 1 -



Jörg
Sellmeyer
Wahrscheinlich überseh je grad irgendwas total Banales mais je bekomm es pas hin, qui Hauteur cet Rebar-Controls trop changement. qui Breite passt sich oui wunderbar automatisch à, mais cela Dingen reagiert pas du tout sur SetWindowPos.
'$I Rebar.inc
'{ Rebar.inc:
 $H Windows.ph
 $H Messages.ph
 $H commctrl.ph

Proc InitCommControls

    Déclarer cmctrl#
    Faible cmctrl#,16
    Claire cmctrl#
    Long cmctrl#,0=8' hiermit wird cela Rebar-Contrôle aktiviert
    Long cmctrl#,4=$FFFF'---Alles initialisieren
    Externe("comctl32.dll","InitCommonControlsEx",cmctrl#)
    Dispose cmctrl#

ENDPROC

struct RebarInfo=Size&,Mask&,Style&,clrFore&,clrBack&,lpText&,cch&,iImage&,hwndChild&,\
cxMinChild&,cyMinChild&,cx&,hbmBack&,wID&,cyChild&,cyMaxChild&,cyIntegral&,\
cxIdeal&,lParam&,cxHeader&
Déclarer RebarInfo#
Faible RebarInfo#,RebarInfo

SubProc Créer.Rebar

    Paramètres hParent&,Text$,x%,y%,b%,h%,Orientation&
    Cas Orientation& = 1:Orientation& = $80'vertikales Rebar

    With RebarInfo#

        .Size& = SizeOf(RebarInfo#)
        .Mask& = ~RBBIM_STYLE

    EndWith

    Retour Contrôle(~REBARCLASSNAME,Text$,$50000804  | Orientation&  | ~RBS_DBLCLKTOGGLE | ~RBS_AUTOSIZE,x%,y%,b%,h%,hParent&,0,$60300)

ENDPROC

Créer("Container","Rebar")

SubProc Rebar.Ajouter

    Paramètres RB&,hwndChild&,cxMinChild&,cyMinChild&,cx&
    Claire RebarInfo#

    With RebarInfo#

        .Size& = SizeOf(RebarInfo#)
        .Mask& = ~RBBIM_STYLE | ~RBBIM_CHILD | ~RBBIM_CHILDSIZE | ~RBBIM_SIZE
        .cxMinChild& = cxMinChild&
        .cyMinChild& = cyMinChild&
        .cx& = cx&' Voreinstellung pour Breite,bzw. Hauteur. Je pour Orientation&
        .hwndChild& = hwndChild&

        Si SendMessage(RB&,~RB_GETBANDCOUNT,0,0) = 0

            .Style&=~RBBS_NOGRIPPER | ~RBBS_CHILDEDGE
            SendMessage(RB&,~RB_INSERTBANDA,0,RebarInfo#)

        D'autre

            .Style&=~RBBS_GRIPPERALWAYS | ~RBBS_CHILDEDGE
            SendMessage(RB&,~RB_INSERTBANDA,-1,RebarInfo#)
            '-1 = à dernier Stelle anhängen

        EndIf

    EndWith

ENDPROC

'Rebar.inc Ende
'}
RBBIM_SIZE

SubClassProc

    Si SubClassMessage(%hWnd, ~wm_sizing)

        Resize
        Set("WinProc", 0)

    EndIf

ENDPROC

Proc Resize

    SetWindowPos Rebar& = 0,0 - Width(%hwnd),(Height(%hwnd))
    'SetWindowPos hList& = 0,0 - Width(hList&),(Height(Rebar&))
    'SetWindowPos hEdit& = 0,0 - Width(hEdit&),(Height(Rebar&))

ENDPROC

Déclarer hList&, hTV&,hEdit&
Fenêtre 800,600
Var Rebar& = Créer("Rebar",%hwnd,»,0,0,Width(%hwnd),Height(%hwnd),0)' si ici comme letztes 1 angegeben wird, ist cela RebarControl vertikal
hList& = Créer("Listbox",%hwnd,0,0,0,0,0)
hEdit& = Créer("MultiEdit",%hwnd,»,0,0,0,0)
Rebar("Add",Rebar&,hList&,50,Height(Rebar&),Width(Rebar&) / 6)
Rebar("Add",Rebar&,hEdit&,50,Height(Rebar&),Width(Rebar&) / 8 * 6)
SubClass %HWnd, 1'SubClassing des Hauptfensters einschalten
SubClass Rebar&,   1'SubClassing des Rebar einschalten

Tandis que 1

    WaitInput

    Si %Key = 4

        Resize
        SetWindowPos Rebar& = 0,0 - (Width(%hwnd)),(Height(%hwnd)-2)

    EndIf

Wend

SubClass %HWnd, 0
SubClass Rebar&,0
 
XProfan X4
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
16.06.2020  
 



« cette Beitrag wurde comme Solution gekennzeichnet. »

- page 2 -



Matthias
Arlt
je hab mir fois le Mühe gemacht et den Source quelque chose umgebaut et bereinigt. Pour cette était je gestern ensuite doch trop fatigué. eh bien klappt cela aussi avec TabControl et TreeView. Sogar sans FastMode. maintenant venons aussi qui Benachrichtigungen vom Rebar par.
'Rebar direct sur HWND
 $H Windows.ph
 $H Messages.ph
 $H commctrl.ph
declare rect#
dim rect#,16

proc InitCommCtrl

    declare icc#
    dim icc#,16
    long icc#,0=8
    long icc#,4=$FFFF
    external("comctl32.dll","InitCommonControlsEx",icc#)
    dispose icc#

endproc

InitCommCtrl

proc RebarBandInfo

    parameters Rebar&,msg&,num&,mask&,style&,child&
    declare Rebar#
    style&=style&*128
    dim Rebar#,80
    long Rebar#,0=80
    long Rebar#,4=mask&
    long Rebar#,8=style&
    long Rebar#,32=child&
    long Rebar#,40=height(Rebar&) - 4
    long Rebar#,44=width(child&,1) + 4
    sendmessage(Rebar&,msg&,num&,Rebar#)
    dispose Rebar#

endproc

'{ SubClassProc:

SubClassProc

    Si SubClassMessage(%hWnd, 78)

        Si Long(&slparam,0) = Rebar&

            Si (Long(&slparam,8) = -839) or (Long(&slparam,8) = -836)'RBN_CHILDSIZE ou bien RBN_ENDDRAG

                Resize
                Set("WinProc", 1)

            EndIf

        ElseIf Long(&slparam,0) = hTab&

            Si Long(&slparam,8) = -551'TCN_SELCHANGE

                Resize
                Set("WinProc", 1)

            EndIf

        EndIf

    EndIf

ENDPROC

Proc Resize

    Setwindowpos Rebar& = 0,0-width(%hwnd),height(%hwnd)
    RebarBandInfo(Rebar&,1030,0,$71,2,hTab&)
    RebarBandInfo(Rebar&,1030,1,$71,1,hEdit&)
    clear rect#
    cas GetActiveTab(hTab&)=0 : sendmessage(Rebar&,~RB_GETRECT,0,rect#)
    SetWindowPos TV& = Long(rect#,0),25 - (Long(rect#,8) - 12),(Long(rect#,12) - 29);1

ENDPROC

declare Rebar&,hList&,hEdit&,TV&,TVR1&,hDlg&,hTab&
Déclarer ActiveTab%,OldTab%
cls
'{ Rebarelemente:
hDlg& = Contrôle("Dialogue",»,$54000000,2,25,180,0,%hwnd,0,%HINSTANCE)
hEdit&=create("MultiEdit",%hwnd,»,0,0,0,0)
'}
'{ Rebar:
ReBar&=Contrôle("ReBarWindow32",»,$50000804,0,0,width(%hwnd),height(%hwnd),%hwnd,1,0)
RebarBandInfo(Rebar&,~RB_INSERTBANDA,0,$71,2,hDlg&)
RebarBandInfo(Rebar&,~RB_INSERTBANDA,1,$71,1,hEdit&)
'}
'{ TabCtrl:
hTab& = Créer("TabCtrl",hDlg&,"Test 3",0,0,180,0)
InsertTab(hTab&,0,"Test 2")
InsertTab(hTab&,0,"Test 1")
SendMessage(hTab&,~TCM_SETCURSEL,0,0)
'}
sendmessage(Rebar&,~RB_GETRECT,0,rect#)
SetWindowPos hDlg& = Long(rect#,0),Long(rect#,4),Long(rect#,8),Long(rect#,12);1
SetWindowPos hTab& = 0,0 - Width(hDlg&),Height(hDlg&);1
'{ Treeview:
TV& = Créer("TreeView",hTab&,0,2,25,(Width(hTab&) - 6),(Height(hTab&) - 29))

WhileLoop 3

    TVR1& = TreeView("InsertItem",TV&,0,0,"Root " + Str$(&Boucle))
    TreeView("SetChildren", TV&,TVR1&, 1)

    WhileLoop 5

        TreeView("InsertItem",TV&,TVR1&,0,"Eintrag " +Str$(&Boucle))

    Wend

    TreeView("Expand", TV&, TVR1&, 3)

Wend

'}
'Hauptsachleife:
'set("FASTMODE",1)
SubClass %HWnd, 1
Resize

tandis que 1

    waitinput
    cas %clé = 4 : Resize

Wend


et qui Hauptschleife ist sur einmal gaaanz schlank...
 
WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia
20.06.2020  
 



 
- page 1 -



Matthias
Arlt
ensuite wirst Du à cette Stelle doch sur Subclassing zurückgreifen doit:
subclass %hwnd,1

subclassproc

    si subclassmessage(%hwnd,78)

        si long(&slparam,0) = Rebar&

            ''ici RB_GETRECT senden...

        endif

    endif

endproc

 
WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia
17.06.2020  
 




Jörg
Sellmeyer
je bekomme es pas hin. Profan empfängt de dem Rebar aucun Messages, scheint es mir.

je hab la fois deux Codevarianten erstellt. Einmal hab je cela Rebar-Contrôle direct aufs Hauptfenster gepappt, là blockiert cela Programme, si je qui Sous-classe-Routine einbaue.
Zweitens liegt cela Rebar-Contrôle sur einem Dialog-Static. là fonctionne cela Programme zwar plus mais es volonté aucun Messages ausgelöst, qui cela Subclassing aktivieren.
Hilfreich wäre es wahrscheinlich, si Profan là qui Notify-Messages empfangen serait mais cela Rebar leitet rien en à Profan plus, bzw Profan empfängt qui pas

il y a une Reihe de Notify-Messages, qui oui c'est ca convenable pour wären. ZB:


RBN_CHILDSIZE Sent by a rebar control when a band's child window is resized. This notification code is sent dans le forme of a WM_NOTIFY message.
 [...] 
'Rebar direct sur HWND
 $H Windows.ph
 $H Messages.ph
 $H commctrl.ph
declare rect#
dim rect#,16

proc InitCommCtrl

    declare icc#
    dim icc#,16
    long icc#,0=8
    long icc#,4=$FFFF
    external("comctl32.dll","InitCommonControlsEx",icc#)
    dispose icc#

endproc

InitCommCtrl

proc RebarBandInfo

    parameters Rebar&,msg&,num&,mask&,style&,child&
    declare Rebar#,wnd&
    wnd&=external("User32","GetParent",Rebar&)
    style&=style&*128
    dim Rebar#,80
    long Rebar#,0=80
    long Rebar#,4=mask&
    long Rebar#,8=style&
    long Rebar#,32=child&
    long Rebar#,40=height(wnd&) - 4
    long Rebar#,44=width(child&,1) + 4
    sendmessage(Rebar&,msg&,num&,Rebar#)
    dispose Rebar#

endproc

'{ SubClassProc:

SubClassProc

    Si SubClassMessage(%hWnd, 78)

        Si Long(&slparam,0) = Rebar&

            'ici RB_GETRECT senden
            'sendmessage(Rebar&,1033,0,rect#)
            Resize

        EndIf

        Set("WinProc", 0)

    EndIf

ENDPROC

Proc Resize

    Claire rect#
    Setwindowpos Rebar& = 0,0-width(%hwnd),height(%hwnd)
    RebarBandInfo(Rebar&,1030,0,$71,2,hTab&)
    RebarBandInfo(Rebar&,1030,1,$71,1,hEdit&)
    sendmessage(Rebar&,~RB_GETRECT,0,rect#)
    SetWindowPos TV& = Long(rect#,0),25 - (Long(rect#,8) - 12),(Long(rect#,12) - 29)';1

ENDPROC

declare Rebar&,hList&,hEdit&,TV&,TVR1&,hDlg&,hTab&
Déclarer ActiveTab%,OldTab%
cls
'{ Rebarelemente:
hDlg& = Contrôle("Dialogue",»,$54000000,2,25,180,0,%hwnd,0,%HINSTANCE)
hEdit&=create("MultiEdit",%hwnd,»,0,0,0,0)
'}
'{ Rebar:
ReBar&=Contrôle("ReBarWindow32",»,$50000804,0,0,width(%hwnd),height(%hwnd),%hwnd,1,0)
RebarBandInfo(Rebar&,~RB_INSERTBANDA,0,$71,2,hDlg&)
RebarBandInfo(Rebar&,~RB_INSERTBANDA,1,$71,1,hEdit&)
'}
'{ TabCtrl:
hTab& = Créer("TabCtrl",hDlg&,"Test 3",0,0,180,0)
InsertTab(hTab&,0,"Test 2")
InsertTab(hTab&,0,"Test 1")
SendMessage(hTab&,~TCM_SETCURSEL,0,0)
'}
sendmessage(Rebar&,~RB_GETRECT,0,rect#)
SetWindowPos hDlg& = Long(rect#,0),Long(rect#,4),Long(rect#,8),Long(rect#,12);1
SetWindowPos hTab& = 0,0 - Width(hDlg&),Height(hDlg&);1
'{ Treeview:
TV& = Créer("TreeView",hTab&,0,2,25,(Width(hTab&) - 6),(Height(hTab&) - 29))

WhileLoop 3

    TVR1& = TreeView("InsertItem",TV&,0,0,"Root " + Str$(&Boucle))
    TreeView("SetChildren", TV&,TVR1&, 1)

    WhileLoop 5

        TreeView("InsertItem",TV&,TVR1&,0,"Eintrag " +Str$(&Boucle))

    Wend

    TreeView("Expand", TV&, TVR1&, 3)

Wend

'}
SubClass %HWnd, 1
'Hauptsachleife:

tandis que 1

    waitinput
    Titre de la fenêtre Str$(&NotifyWnd) + " " + Str$(Rebar&) + " " + Str$(%notifycode)
    ActiveTab% = GetActiveTab(hTab&)

    Si OldTab% <> ActiveTab%

        ShowWindow(Tv&,ActiveTab% = 0)
        ActiveTab% = GetActiveTab(hTab&)

        Si (ActiveTab% = 0)' and GetFocus(Rebar&)

            Resize
            '    SendMessage(hTab&,~TCM_SETCURSEL,0,0)

        EndIf

    EndIf

    Si %clé = 4

        Resize

    EndIf

    OldTab% = GetActiveTab(hTab&)

Wend

SubClass %HWnd, 0

'Rebar sur le dialogue-Static
 $H Windows.ph
 $H Messages.ph
 $H commctrl.ph
declare rect#
dim rect#,16

proc InitCommCtrl

    declare icc#
    dim icc#,16
    long icc#,0=8
    long icc#,4=$FFFF
    external("comctl32.dll","InitCommonControlsEx",icc#)
    dispose icc#

endproc

InitCommCtrl

proc RebarBandInfo

    parameters Rebar&,msg&,num&,mask&,style&,child&
    declare Rebar#,wnd&
    wnd&=external("User32","GetParent",Rebar&)
    style&=style&*128
    dim Rebar#,80
    long Rebar#,0=80
    long Rebar#,4=mask&
    long Rebar#,8=style&
    long Rebar#,32=child&
    long Rebar#,40=height(wnd&) - 4
    long Rebar#,44=width(child&,1) + 4
    sendmessage(Rebar&,msg&,num&,Rebar#)
    dispose Rebar#

endproc

'{ SubClassProc:

SubClassProc

    Si SubClassMessage(%hWnd, 78)

        Si Long(&slparam,0) = Rebar&

            'ici RB_GETRECT senden
            'sendmessage(Rebar&,1033,0,rect#)
            Resize

        EndIf

        Set("WinProc", 0)

    EndIf

ENDPROC

Proc Resize

    setwindowpos hRBDlg& = 0,0-width(%hwnd),height(%hwnd)
    Claire rect#
    setwindowpos Rebar& = 0,0-width(hRBDlg&),height(hRBDlg&)
    RebarBandInfo(Rebar&,1030,0,$71,2,hTab&)
    RebarBandInfo(Rebar&,1030,1,$71,1,hEdit&)
    sendmessage(Rebar&,~RB_GETRECT,0,rect#)
    SetWindowPos TV& = Long(rect#,0),25 - (Long(rect#,8) - 12),(Long(rect#,12) - 29)';1

ENDPROC

declare Rebar&,hList&,hEdit&,TV&,TVR1&,hDlg&,hTab&
Déclarer ActiveTab%,OldTab%
cls
'{ Rebarelemente:
hDlg& = Contrôle("Dialogue",»,$54000000,2,25,180,0,%hwnd,0,%HINSTANCE)
hEdit&=create("MultiEdit",%hwnd,»,0,0,0,0)
'}
'{ Rebar:
Var hRBDlg& = Contrôle("Dialogue",»,$54000000,0,0,Width(%hwnd),Height(%hwnd),%hwnd,0,%HINSTANCE)
ReBar&=Contrôle("ReBarWindow32",»,$50000804,0,0,width(hRBDlg&),height(hRBDlg&),hRBDlg&,1,0)
RebarBandInfo(Rebar&,~RB_INSERTBANDA,0,$71,2,hDlg&)
RebarBandInfo(Rebar&,~RB_INSERTBANDA,1,$71,1,hEdit&)
'}
'{ TabCtrl:
hTab& = Créer("TabCtrl",hDlg&,"Test 3",0,0,180,0)
InsertTab(hTab&,0,"Test 2")
InsertTab(hTab&,0,"Test 1")
SendMessage(hTab&,~TCM_SETCURSEL,0,0)
'}
sendmessage(Rebar&,~RB_GETRECT,0,rect#)
SetWindowPos hDlg& = Long(rect#,0),Long(rect#,4),Long(rect#,8),Long(rect#,12);1
SetWindowPos hTab& = 0,0 - Width(hDlg&),Height(hDlg&);1
'{ Treeview:
TV& = Créer("TreeView",hTab&,0,2,25,(Width(hTab&) - 6),(Height(hTab&) - 29))

WhileLoop 3

    TVR1& = TreeView("InsertItem",TV&,0,0,"Root " + Str$(&Boucle))
    TreeView("SetChildren", TV&,TVR1&, 1)

    WhileLoop 5

        TreeView("InsertItem",TV&,TVR1&,0,"Eintrag " +Str$(&Boucle))

    Wend

    TreeView("Expand", TV&, TVR1&, 3)

Wend

'}
SubClass %HWnd, 1
'Hauptsachleife:

tandis que 1

    waitinput
    Titre de la fenêtre Str$(&NotifyWnd) + " " + Str$(Rebar&) + " " + Str$(%notifycode)
    ActiveTab% = GetActiveTab(hTab&)

    Si OldTab% <> ActiveTab%

        ShowWindow(Tv&,ActiveTab% = 0)
        ActiveTab% = GetActiveTab(hTab&)

        Si (ActiveTab% = 0)

            Resize

        EndIf

    EndIf

    Si %clé = 4

        Resize

    EndIf

    OldTab% = GetActiveTab(hTab&)

Wend

SubClass %HWnd, 0
SubClass Rebar&, 0
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
19.06.2020  
 



 
- page 2 -



Matthias
Arlt
Pour un paire kleinen Changements fonctionne es chez mir (sous 11.2 et FreeProfan32):
'Rebar direct sur HWND
 $H Windows.ph
 $H Messages.ph
 $H commctrl.ph
declare rect#
dim rect#,16

proc InitCommCtrl

    declare icc#
    dim icc#,16
    long icc#,0=8
    long icc#,4=$FFFF
    external("comctl32.dll","InitCommonControlsEx",icc#)
    dispose icc#

endproc

InitCommCtrl

proc RebarBandInfo

    parameters Rebar&,msg&,num&,mask&,style&,child&
    declare Rebar#
    style&=style&*128
    dim Rebar#,80
    long Rebar#,0=80
    long Rebar#,4=mask&
    long Rebar#,8=style&
    long Rebar#,32=child&
    long Rebar#,40=height(Rebar&) - 4
    long Rebar#,44=width(child&,1) + 4
    sendmessage(Rebar&,msg&,num&,Rebar#)
    dispose Rebar#

endproc

'{ SubClassProc:

SubClassProc

    Si SubClassMessage(%hWnd, 78)

        Si Long(&slparam,0) = Rebar&

            Si Long(&slparam,8) = -14'NM_NCHITTEST

                Resize
                Set("WinProc", 1)

            EndIf

        EndIf

    EndIf

ENDPROC

Proc Resize

    Claire rect#
    Setwindowpos Rebar& = 0,0-width(%hwnd),height(%hwnd)
    RebarBandInfo(Rebar&,1030,0,$71,2,hTab&)
    RebarBandInfo(Rebar&,1030,1,$71,1,hEdit&)
    sendmessage(Rebar&,~RB_GETRECT,0,rect#)
    SetWindowPos TV& = Long(rect#,0),25 - (Long(rect#,8) - 12),(Long(rect#,12) - 29);1

ENDPROC

declare Rebar&,hList&,hEdit&,TV&,TVR1&,hDlg&,hTab&
Déclarer ActiveTab%,OldTab%
cls
'{ Rebarelemente:
hDlg& = Contrôle("Dialogue",»,$54000000,2,25,180,0,%hwnd,0,%HINSTANCE)
hEdit&=create("MultiEdit",%hwnd,»,0,0,0,0)
'}
'{ Rebar:
ReBar&=Contrôle("ReBarWindow32",»,$50000804,0,0,width(%hwnd),height(%hwnd),%hwnd,1,0)
RebarBandInfo(Rebar&,~RB_INSERTBANDA,0,$71,2,hDlg&)
RebarBandInfo(Rebar&,~RB_INSERTBANDA,1,$71,1,hEdit&)
'}
'{ TabCtrl:
hTab& = Créer("TabCtrl",hDlg&,"Test 3",0,0,180,0)
InsertTab(hTab&,0,"Test 2")
InsertTab(hTab&,0,"Test 1")
SendMessage(hTab&,~TCM_SETCURSEL,0,0)
'}
sendmessage(Rebar&,~RB_GETRECT,0,rect#)
SetWindowPos hDlg& = Long(rect#,0),Long(rect#,4),Long(rect#,8),Long(rect#,12);1
SetWindowPos hTab& = 0,0 - Width(hDlg&),Height(hDlg&);1
'{ Treeview:
TV& = Créer("TreeView",hTab&,0,2,25,(Width(hTab&) - 6),(Height(hTab&) - 29))

WhileLoop 3

    TVR1& = TreeView("InsertItem",TV&,0,0,"Root " + Str$(&Boucle))
    TreeView("SetChildren", TV&,TVR1&, 1)

    WhileLoop 5

        TreeView("InsertItem",TV&,TVR1&,0,"Eintrag " +Str$(&Boucle))

    Wend

    TreeView("Expand", TV&, TVR1&, 3)

Wend

'}
'Hauptsachleife:
SubClass %HWnd, 1

tandis que 1

    waitinput
    Resize
    Titre de la fenêtre Str$(&NotifyWnd) + " " + Str$(Rebar&) + " " + Str$(%notifycode)
    ActiveTab% = GetActiveTab(hTab&)

    Si OldTab% <> ActiveTab%

        ShowWindow(Tv&,ActiveTab% = 0)
        ActiveTab% = GetActiveTab(hTab&)

        Si (ActiveTab% = 0)' and GetFocus(Rebar&)

            Resize
            'SendMessage(hTab&,~TCM_SETCURSEL,0,0)

        EndIf

    EndIf

    Si %clé = 4

        Resize

    EndIf

    OldTab% = GetActiveTab(hTab&)

Wend

SubClass %HWnd, 0

un weiteres Resize pour dem WaitInput était notwendig et qui Auswertung de NM_NCHITTEST im SubClassing. Eleganter wäre RBN_ENDDRAG gewesen, dringt mais là pas par. je denke, so allez cela sûrement aussi...

Nachtrag: avec den gleichen Changements fonctionne es aussi avec dem Dialog comme Parent. cela SubClassing doit ensuite naturellement pour den Dialog avoir lieu, statt pour %HWND.
 
WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia
19.06.2020  
 




Jörg
Sellmeyer
allô Matthias, merci dass du toi là so reinhängst.
malheureusement ist es so toujours pas brauchbar:
1. drängelt sich cela Treeview toujours wieder dans den Vordergrund, aussi si Tab 2 ou bien 3 eigentlich aktiv sommes. qui sommes oui beide vide et devrait plan ne...aucune Treeview Montrer.
2. ist oui cela Resize pour dem WaitInput un Totschläger, qui im Grunde qui ganze Subclassgeschichte ad absurdum führt.
Dem pourrait on encore engegenwirken, indem qui Proc seulement aufgerufen wird, si le Taille qui la fenêtre sich réellement modifié hat. Pour cette müssten ensuite Breite et Hauteur dans Extravariablen überwacht volonté, quoi aussi wieder dem Grundgedanken des Subclassings zuwiderläuft.
Hinzu venez oui encore, dass aussi TabChanged pas richtig funktioniert. cela reagiert aussi seulement très erratisch et im Prograqmm überwache je cela oui per OldTab% et AktiveTab%.
Es scheint, comme si Profan avec dem Handling qui commctrl.Elemente quelque chose überfordert ist. Im Moment scheint es mir, comme si cela so une impasse ist.
peut-être peux Roland oui la fois quoi en supplément dire.
 
XProfan X4
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
19.06.2020  
 




Matthias
Arlt
cela était mir encore gar pas aufgefallen, qui sich cela TreeView sur alle Tabs drängelt. et oui, cela Ganze ist pas sans "Verrenkungen". à sich wäre cela SubClassing vollkommen überflüssig, weil cela Rebar-Contrôle alle Nouvelles, aussi qui qui Child-Controls, à l' Parent weiterreicht. seulement venons qui là dans unserem le cas pas à...
 
WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia
19.06.2020  
 




Jörg
Sellmeyer
oui c'est ca. si qui Notify-Messages réglé durchgereicht würden, wäre cela un Klacks, würd je la fois dire. So ist es Murx

et c'est eigentlich un très schönes Element, quoi vielseitig einzusetzen wäre.
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
19.06.2020  
 




Matthias
Arlt
Wobei on peut-être aussi qui Erwartung quelque chose einschränken doit, je pour dem, comment on qui définition dans MSDN versteht:
A Rebar control acts as a container for child windows. It can contain one or more bands, and each ruban can have any combination of a gripper bar, a bitmap, a text label, and one child window. à application assigns a child window—typically another control— to a rebar control ruban.

qui discours ist arrêt de je einem Contrôle, pas de einer Kaskade mehrerer multifunktionaler Elemente avec einem undefinierten Bundle de Nouvelles.
 
WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia
19.06.2020  
 




Jörg
Sellmeyer
oui mais musas oui seulement la fois ausreizen, quoi on avec cela faire peux, bevor on es ensuite peut-être doch ad acta poser muss.
 
XProfan X4
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
19.06.2020  
 




Matthias
Arlt
je hab mir fois le Mühe gemacht et den Source quelque chose umgebaut et bereinigt. Pour cette était je gestern ensuite doch trop fatigué. eh bien klappt cela aussi avec TabControl et TreeView. Sogar sans FastMode. maintenant venons aussi qui Benachrichtigungen vom Rebar par.
'Rebar direct sur HWND
 $H Windows.ph
 $H Messages.ph
 $H commctrl.ph
declare rect#
dim rect#,16

proc InitCommCtrl

    declare icc#
    dim icc#,16
    long icc#,0=8
    long icc#,4=$FFFF
    external("comctl32.dll","InitCommonControlsEx",icc#)
    dispose icc#

endproc

InitCommCtrl

proc RebarBandInfo

    parameters Rebar&,msg&,num&,mask&,style&,child&
    declare Rebar#
    style&=style&*128
    dim Rebar#,80
    long Rebar#,0=80
    long Rebar#,4=mask&
    long Rebar#,8=style&
    long Rebar#,32=child&
    long Rebar#,40=height(Rebar&) - 4
    long Rebar#,44=width(child&,1) + 4
    sendmessage(Rebar&,msg&,num&,Rebar#)
    dispose Rebar#

endproc

'{ SubClassProc:

SubClassProc

    Si SubClassMessage(%hWnd, 78)

        Si Long(&slparam,0) = Rebar&

            Si (Long(&slparam,8) = -839) or (Long(&slparam,8) = -836)'RBN_CHILDSIZE ou bien RBN_ENDDRAG

                Resize
                Set("WinProc", 1)

            EndIf

        ElseIf Long(&slparam,0) = hTab&

            Si Long(&slparam,8) = -551'TCN_SELCHANGE

                Resize
                Set("WinProc", 1)

            EndIf

        EndIf

    EndIf

ENDPROC

Proc Resize

    Setwindowpos Rebar& = 0,0-width(%hwnd),height(%hwnd)
    RebarBandInfo(Rebar&,1030,0,$71,2,hTab&)
    RebarBandInfo(Rebar&,1030,1,$71,1,hEdit&)
    clear rect#
    cas GetActiveTab(hTab&)=0 : sendmessage(Rebar&,~RB_GETRECT,0,rect#)
    SetWindowPos TV& = Long(rect#,0),25 - (Long(rect#,8) - 12),(Long(rect#,12) - 29);1

ENDPROC

declare Rebar&,hList&,hEdit&,TV&,TVR1&,hDlg&,hTab&
Déclarer ActiveTab%,OldTab%
cls
'{ Rebarelemente:
hDlg& = Contrôle("Dialogue",»,$54000000,2,25,180,0,%hwnd,0,%HINSTANCE)
hEdit&=create("MultiEdit",%hwnd,»,0,0,0,0)
'}
'{ Rebar:
ReBar&=Contrôle("ReBarWindow32",»,$50000804,0,0,width(%hwnd),height(%hwnd),%hwnd,1,0)
RebarBandInfo(Rebar&,~RB_INSERTBANDA,0,$71,2,hDlg&)
RebarBandInfo(Rebar&,~RB_INSERTBANDA,1,$71,1,hEdit&)
'}
'{ TabCtrl:
hTab& = Créer("TabCtrl",hDlg&,"Test 3",0,0,180,0)
InsertTab(hTab&,0,"Test 2")
InsertTab(hTab&,0,"Test 1")
SendMessage(hTab&,~TCM_SETCURSEL,0,0)
'}
sendmessage(Rebar&,~RB_GETRECT,0,rect#)
SetWindowPos hDlg& = Long(rect#,0),Long(rect#,4),Long(rect#,8),Long(rect#,12);1
SetWindowPos hTab& = 0,0 - Width(hDlg&),Height(hDlg&);1
'{ Treeview:
TV& = Créer("TreeView",hTab&,0,2,25,(Width(hTab&) - 6),(Height(hTab&) - 29))

WhileLoop 3

    TVR1& = TreeView("InsertItem",TV&,0,0,"Root " + Str$(&Boucle))
    TreeView("SetChildren", TV&,TVR1&, 1)

    WhileLoop 5

        TreeView("InsertItem",TV&,TVR1&,0,"Eintrag " +Str$(&Boucle))

    Wend

    TreeView("Expand", TV&, TVR1&, 3)

Wend

'}
'Hauptsachleife:
'set("FASTMODE",1)
SubClass %HWnd, 1
Resize

tandis que 1

    waitinput
    cas %clé = 4 : Resize

Wend


et qui Hauptschleife ist sur einmal gaaanz schlank...
 
WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia
20.06.2020  
 




Jörg
Sellmeyer
Wow - grandiose. So dans etwa J'ai eu es mir eigentlich vorgestellt mais pas gedacht, dass es ensuite doch so "simpel" klappt. entier grand Dank.
 
XProfan X4
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
20.06.2020  
 




Jörg
Sellmeyer
%notifycode funktioniert maintenant aussi. il peut alors avec Profanmitteln qui Subclassproc steuern.
Si (%notifycode = -839) or (%notifycode = -836)'RBN_CHILDSIZE ou bien RBN_ENDDRAG

    'ou bien

    Si (%notifycode = -839) or (%notifycode = -836)'RBN_CHILDSIZE ou bien RBN_ENDDRAG


Allerdings peut sich
Si Long(&slparam,0) = Rebar&


pas par
ElseIf &notifywnd = Rebar&'bzw hTab&


ersetzen. alors scheint là doch encore quoi pas trop stimmen.
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
21.06.2020  
 




Matthias
Arlt
...%notifycode funktioniert maintenant aussi. il peut alors avec Profanmitteln...

oui, cela J'ai eu aussi festgestellt. si cela mais toujours so ist ? So longtemps es là encore Ungereimtheiten gibt, mach je cela dedans vom SubClassing lieber sur l'autre Weise. Zudem schadet es pas, si on sait, à quel Stelle dans wParam/lParam quoi steht. il peut gezielter sur so manches réagir.

&notifywnd wird wohl seulement ensuite sûrement pleine, si aussi cela zugehörige Ereignis, alors %wmnotify, sûrement ausgewertet wird. chez TCN_SELCHANGE ist cela bspw. qui le cas, chez diversen anderen Notifications mais pas.
 
WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia
21.06.2020  
 




répondre


Topictitle, max. 100 marque.
 

Systemprofile:

ne...aucune Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

s'il te plaît s'inscrire um une Beitrag trop verfassen.
 

Options du sujet

9.207 Views

Themeninformationen

cet Thema hat 2 participant:

Jörg Sellmeyer (11x)
Matthias Arlt (10x)


Admins  |  AGB  |  Applications  |  Auteurs  |  Chat  |  protection des données  |  Télécharger  |  Entrance  |  Aider  |  Merchantportal  |  Empreinte  |  Mart  |  Interfaces  |  SDK  |  Services  |  Jeux  |  cherche  |  Support

un projet aller XProfaner, qui il y a!


Mon XProfan
Privé Nouvelles
Eigenes Ablageforum
Sujets-La liste de voeux
Eigene Posts
Eigene Sujets
Zwischenablage
Annuler
 Deutsch English Français Español Italia
Traductions

protection des données


Wir verwenden Cookies seulement comme Session-Cookies à cause de qui technischen Notwendigkeit et chez uns gibt es aucun Cookies de Drittanbietern.

si du ici sur unsere Webseite klickst ou bien navigierst, stimmst du unserer Erfassung de Informationen dans unseren Cookies sur XProfan.Net trop.

Weitere Informationen trop unseren Cookies et en supplément, comment du qui Kontrolle par-dessus behältst, findest du dans unserer nachfolgenden Datenschutzerklärung.


d'accordDatenschutzerklärung
je voudrais keinen Cookie