Deutsch
Includes

Docksplitter für XProfan 10

 
- Seite 1 -


Da XProfan bisher keinen Splitter hat, hab ich mal die Docksplitter.dll von David SZAFRANSKI für XProfan gewrapped. Die DLL ist lizensiert unter GPL.

So einem Splitter kann man 2 vorher erstellte Controls zuordnen, wobei sich ListBoxen, Edits und ähnliches besonders eignen. Mit der Maus läßt sich jetzt die größer dieser beiden Controls verändern, bzw. per Mausclick auch eins ganz ausblenden. Bei der Umsetzung im Hinterkopt hab ich natürlich eine Implementation in XProfEdit

Snapschuß:



Das Paket besteht aus einer sehr kleinen DLL, einer Include-Datei, einer Header-Datei, sowie dem oben abgebildeten Beispiel.
 $I DockSplitter.inc
Declare DLLhWnd&
DllhWnd& = Splitter_Init()

IfNot DllhWnd& : End : EndIf

    WindowStyle 26
    Window 100, 100 - 600, 400
    Declare hList&, hEdit&, hSplitter&
    hList& = Create(ListBox, %hWnd, , 0, 0, 0, 0)

    WhileLoop 1, 10, 1

        AddString(hList&, Test  + @Str$(&Loop))

    EndWhile

    hEdit& = Create(MultiEdit, %hWnd, , 0, 0, 0, 0)
    SetText hEdit&, Dies ist ein kleiner erster Test des DockSplitters!
    hSplitter& = Create(Splitter, 0, 0, 600, 400)
    Splitter_SetPanel(hSplitter&, hList&, hEdit&)
    Splitter_SetPosition hSplitter&, 150
    Declare Ende%

    WhileNot Ende%

        WaitInput

    EndWhile

    Splitter_Exit DllhWnd&

Viel Spaß damit

30 kB
Kurzbeschreibung: Version 0.5
Hochgeladen:08.10.2006
Ladeanzahl287
Herunterladen
 
08.10.2006  
 



 
- Seite 2 -



Frank
Abbing
Hier noch ein Splitter-Control, variabel verschiebbar. Íst gerade bei meiner derzeitigen Programmierung abgefallen und kann leicht an eigene Gegebenheiten angepasst werden:
 {$cleq}
@Set(ErrorLevel,0)
Declare x&,y&,z&,text$,xpiadll&
Declare listbox1&,listbox2&,splitter&
Def GetSysColor(1) !USER32,GetSysColor
xpiadll&=UseDll(xpia$)
WindowStyle 543
Window 0,0-640,480
Cls GetSysColor(15)
UseFont MS Sans Serif,13,0,0,0,0
SetDialogFont 1
splitter&=Create(Button,%hwnd,:,200,0,7,400)
listbox1&=Create(ListBox,%hwnd,0,0,0,200,400)
listbox2&=Create(ListBox,%hwnd,0,207,0,200,400)
ClearList
AddWindows
MoveListToList(listbox1&)
ClearList
AddFonts
MoveListToList(listbox2&)

If 0

    AsmStart GeneriereDatas()

        .data
        point       dd  0,0
        split       dd  0
        profan      dd  0
        listbox1    dd  0
        listbox2    dd  0
        hWnd        dd  0
        uMsg        dd  0
        wParam      dd  0
        lParam      dd  0
        oldproc     dd  0
        .code
        nop

    AsmEnd

    ASMSTART subclass noexport (x&,x&,x&,x&)

        push eax
        push ebx
        push ecx
        push edx
        push edi
        push esi
        push ebp
        push esp
        m2m hWnd,para1
        m2m uMsg,para2
        m2m wParam,para3
        m2m lParam,para4

        .if uMsg == WM_LBUTTONDOWN

            mov    split,TRUE
            invoke LoadCursor,0,IDC_SIZEWE
            invoke SetCursor,eax
            return 0

        .elseif uMsg == WM_LBUTTONUP

            mov    split,FALSE
            return 0

        .endif

        .if uMsg == WM_MOUSEMOVE

            invoke LoadCursor,0,IDC_SIZEWE
            invoke SetCursor,eax

            .if    split == TRUE

                invoke GetCursorPos,addr point
                invoke ScreenToClient,profan,addr point
                lea esi,point
                mov edi,[esi]

                .if SDWORD PTR edi<0

                    mov edi,0

                .endif

                .if edi>400

                    mov edi,400

                .endif

                mov [esi],edi
                lea esi,point
                mov edi,[esi]
                invoke MoveWindow,listbox1,0,0,edi,400,TRUE
                lea esi,point
                mov edi,[esi]
                add edi,7
                mov ebx,400
                sub ebx,edi
                add ebx,7
                invoke MoveWindow,listbox2,edi,0,ebx,400,TRUE
                lea esi,point
                mov edi,[esi]
                invoke MoveWindow,hWnd,edi,0,7,400,TRUE

            .endif

            return 0

        .endif

        pop esp
        pop ebp
        pop esi
        pop edi
        pop edx
        pop ecx
        pop ebx
        pop eax
        invoke CallWindowProc,oldproc,hWnd,uMsg,wParam,lParam
        raus:

    ASMEND

EndIf

ASMSTART StartSubclassing(splitter&,%hwnd,listbox1&,listbox2&)

    m2m profan,para2
    m2m listbox1,para3
    m2m listbox2,para4
    invoke SetWindowLong,para1,GWL_WNDPROC,addr subclass
    mov oldproc,eax

ASMEND

While 1

    waitinput
    Case %key=2:Break

EndWhile

DestroyWindow(%hwnd)
FreeDll xpiadll&
End

Der gleiche Code hier für User, die XPIA und XPSE nicht installiert haben (warum auch immer )
DECLARE XPIA_#,XPIA$,EXPIA&,X&,Y&,Z&,TEXT$,XPIADLL&,LISTBOX1&,LISTBOX2&,SPLITTER&
DIM XPIA_#,2560
CLEAR XPIA_#
LONG XPIA_#,0=9460301,3,4,65535,184
LONG XPIA_#,24=64
LONG XPIA_#,60=184,247078670,-855002112,1275181089,1750344141,1881174889,1919381362,1663069537,1869508193,1700929652,1853190688,544106784,542330692,1701080941,168627502,36
LONG XPIA_#,128=-1826774061,-1066155369,-1066155369,-1066155369,-1067326869,-1066155370,-1067393767,-1066155379,1751345490,-1066155369
LONG XPIA_#,184=17744,131404,1161521813
LONG XPIA_#,204=554565856,201654539,1536,512
LONG XPIA_#,224=4236,4096,8192,268435456,4096,512,4
LONG XPIA_#,256=4
LONG XPIA_#,264=12288,512
LONG XPIA_#,276=2,1048576,4096,1048576,4096
LONG XPIA_#,300=16,5200,118,4940,40
LONG XPIA_#,344=8192,132
LONG XPIA_#,400=4096,36
LONG XPIA_#,432=1297301837,12851,1222,4096,1536,512
LONG XPIA_#,468=-536870880,1818587694,25455,148,8192,512,2048
LONG XPIA_#,508=1107296320,5124,5106,5092,5078,5064,5048,5030,5136
LONG XPIA_#,652=-1192457387,1,836297,-2014834838,-16777214,93259893,268439588,-1895008769,1058821,276168464,271320463,1979650048,805670676,-15728624,93263989,268439604,-1893960193,1062917,544603920,272369039,1979650048,1074106148
LONG XPIA_#,740=-15728624,93268085,268439620,-1892911617,1067013,813039376,273417615,1979650048,1342541620,-15728624,93272181,268439636,-1891863041,1071109,1081474832,274466191,1438846976,-997987189,-62535684
LONG XPIA_#,820=-40984,-1010200321,-2081649835,1170734276,1276,-11868160,1397817343,1448563281,905925717,268439588,276301199,905908224,268439592,276563343,905908224,268439596,276825487,905908224,268439600,277087631,1031868416
LONG XPIA_#,904=268439676,513,96935541,268439656,1,8356968,-402626048,388,26273872,384499712,276577665,33689600,175439872,275252679,4096,1031864320,268439676,512,12813583,-2073559040,1778385023,21686272,-397410304,342,275266947
LONG XPIA_#,1004=251727872,42117,274753536,568856576,1744830465,268439648,275527167,703074304,-1929379839,1073205,-2093053168,92078335,191,-1862303488,1979711489,26263301,1049165824,274740621,1049300992,-1872232086,1459617793
LONG XPIA_#,1088=6946922,275789311,-471330816,-1929379840,1073205,-2093053168,-1866790969,721420289,130253791,-1872232086,1392508929,-11075478,1078325,12118032,898433024,268439648,23740043,102504,1778870784,905926400,268439672
LONG XPIA_#,1172=39400,1583176704,1532582495,-2076836008,-15728624,1081397,2083913488,-15728624,1079349,-2009727216,-401604592,86,1098441,-2081649835,1170734276,1276,-37820416,905969663,268439592,275514767,905908224,268439596
LONG XPIA_#,1260=275776911,905908224,268439600,276039055,1013452800,1779433489,607518716,-401604592,52,1083555,281200912,637520896,268439576,269755903,637472768,268439568,269231615,637472768,268439560,268707327,637472768,268439552
LONG XPIA_#,1348=270280191,-859041792,4980
LONG XPIA_#,1368=5154,4096
LONG XPIA_#,1396=5124,5106,5092,5078,5064,5048,5030,5136
LONG XPIA_#,1432=1852990827,842230885,1819042862,1245184,1819042115,1684957527,1917876079,4285295,1699152108,1920287604,1349676915,29551,1699152177,1937331060,1869377347,25165938,1684107084,1936880963,4289135,1867317672,1767335286
LONG XPIA_#,1516=2003788910,30998528,1701995347,1867804261,1701407811,29806,1699938803,1920287604,7499635,1699938845,1852397428,1282895716,1097297519,1937047552,842232421,1819042862,1684471808,775041897,7105636,1885434736,1818504809
LONG XPIA_#,1600=108
LONG XPIA_#,1620=1161521813
LONG XPIA_#,1628=5260,1,2,2,5240,5248,5256,4391,4808,5286,5301,65536,1819300703,1702130793,1866673522,1869771886,1852137324,1818504808,1699151980,1769104750,1147499109,1935766625,1635013376,1968403570,1634493282,1852404595,103
LONG XPIA_#,2048=4096,132,816656548,817836214,819015880,820195546,821375212,822554878,823734544,827863330,828649822,829436266,830222710,831009154,833761684,835203518,838218218,839266816,842150417,844182086,847000177,849556112
LONG XPIA_#,2136=850342569,851129013,853684956,854471400,855257844,856109823,857486097,858272546,859058990,859845434,13126
XPIA$=$TEMPDIR+/_Splitter-Control_enh.dll
FILEMODE 1
ASSIGN #1,XPIA$
OPENRW #1
BLOCKWRITE #1,XPIA_#,0,2560
CLOSERW #1
DISPOSE XPIA_#
@SET(ErrorLevel,0)
DEF GETSYSCOLOR(1) !USER32,GetSysColor
XPIADLL&=USEDLL(XPIA$)
WINDOWSTYLE 543
WINDOW 0,0-640,480
CLS GETSYSCOLOR(15)
USEFONT MS Sans Serif,13,0,0,0,0
SETDIALOGFONT 1
SPLITTER&=CREATE(Button,%HWND,:,200,0,7,400)
LISTBOX1&=CREATE(ListBox,%HWND,0,0,0,200,400)
LISTBOX2&=CREATE(ListBox,%HWND,0,207,0,200,400)
CLEARLIST
ADDWINDOWS
MOVELISTTOLIST(LISTBOX1&)
CLEARLIST
ADDFONTS
MOVELISTTOLIST(LISTBOX2&)

IF 0

    EXTERNAL(XPIA$,GeneriereDatas)

ENDIF

EXTERNAL(XPIA$,StartSubclassing,SPLITTER&,%HWND,LISTBOX1&,LISTBOX2&)

WHILE 1

    WAITINPUT

    IF %KEY=2

        BREAK

    ENDIF

ENDWHILE

DESTROYWINDOW(%HWND)
FREEDLL XPIADLL&
END

Als Splitter-Control dient ein gesubclasster Button.
 
22.10.2006  
 




Uwe
''Pascal''
Niemeier
Hallo Leute!

Wenn wir schon mal dabei sind...
window 50,50-700,500
declare ReBar&,ReBar#,Lb1&,Lb2&,Lb3&,a#
dim a#,16
Lb1&=create(listbox,%hwnd,,0,0,0,0)
Lb2&=create(listbox,%hwnd,,0,0,0,0)
Lb3&=create(listbox,%hwnd,,0,0,0,0)
clearlist
addwindows
movelisttolist(Lb1&)
clearlist
addfonts
movelisttolist(Lb2&)
clearlist
addfiles *.*
movelisttolist(Lb3&)
clear a#
long a#,0=8
long a#,4=$FFFF---Alles initialisieren
external(comctl32.dll,InitCommonControlsEx,a#)
--Stil: $50000000 | ~CCS_NORESIZE | ~RBS_FIXEDORDER
ReBar&=Control(ReBarWindow32,,$50000804 ,10,10,600,400,%hwnd,1,0)
struct ReBar=Size&,Mask&,Style&,clrFore&,clrBack&,lpText&,cch&,iImage&,hwndChild&,
cxMinChild&,cyMinChild&,cx&,hbmBack&,wID&,cyChild&,cyMaxChild&,cyIntegral&,
cxIdeal&,lParam&,cxHeader&
dim ReBar#,ReBar--REBARBANDINFO
clear ReBar#

with ReBar#

    .Size&=sizeof(ReBar#)
    .Mask&=$71------RBBIM_STYLE | RBBIM_CHILD | RBBIM_CHILDSIZE | RBBIM_SIZE
    .cyMaxChild&=1--Darf nicht Null sein
    .Style&=256------------------------RBBS_NOGRIPPER (1. Band ohne Griff)
    .cxMinChild&=5---------------------Minimum Breite
    .cyMinChild&=height(ReBar&)--------Höhe des Bandes
    .cx&=100---------------------------Vorgabe Breite
    .hwndChild&=Lb1&-------------------Band 1
    sendmessage(ReBar&,1025,0,ReBar#)--RB_INSERTBAND
    .Style&=128------------------------RBBS_GRIPPERALWAYS (folgende Bänder mit Griff)
    .cxMinChild&=50--------------------Minimum Breite
    .cyMinChild&=200-------------------Höhe des Bandes
    .cx&=300---------------------------Vorgabe Breite
    .hwndChild&=Lb2&-------------------Band 2
    sendmessage(ReBar&,1025,1,ReBar#)--RB_INSERTBAND
    .cxMinChild&=10--------------------Minimum Breite
    .cyMinChild&=300-------------------Höhe des Bandes
    .hwndChild&=Lb3&-------------------Band 3
    sendmessage(ReBar&,1025,2,ReBar#)--RB_INSERTBAND

endwith

while 1

    waitinput

    if sendmessage(ReBar&,1051,0,0) > height(ReBar&)--1051 = RB_GETBARHEIGHT

        clear a#--Umklappen rückgängig, falls Gripper nach unten gezogen wurde
        sendmessage(ReBar&,1047,0,a#)--RB_SIZETORECT

    endif

endwhile


Obwohl es ja eigendlich in den Bereich CodeSnippets gehört... Aber es passt halt grad zum Thema.

SeeYou
Pascal
 
24.10.2006  
 



Wow das wusste ich ja garnicht! Das ist einfach super!
 
24.10.2006  
 



Schöne Idee das ReBar so zu *mißbrauchen*
Hab mit ReBar noch nicht viel gemacht, weil erstellen ist einfach, aber Verwaltung nicht (wenn man es als Toolbar-Ersatz nutzt)
 
24.10.2006  
 




Frank
Abbing
ReBar nach unten ziehen funktioniert noch nicht ganz. Die Controls verschwinden und sind erst beim nächsten Klick wieder da.
Ansonsten: Coole Idee!
 
24.10.2006  
 




Uwe
''Pascal''
Niemeier
Hallo Leute!

[quote:a0651eeb8e]ReBar nach unten ziehen funktioniert noch nicht ganz. Die Controls verschwinden und sind erst beim nächsten Klick wieder da. [/quote:a0651eeb8e]
Bei entsprechender Einstellung des ReBars werden die Bänder (Seiten des Splitters) dann untereinander angezeigt.
Über den Stil konnte ich das bisher nicht unterdrücken, und Profan erkennt die entsprechende Notify-Message nicht.
Im Ernstfall hilft da nur SubClassing des Parents

Ganz haarig wird das bei mehreren ineinander verschachtelten horizontalen und vertikalen ReBars...

SeeYou
Pascal
 
25.10.2006  
 




Rolf
Koch
Echt genial!
Da kann man wirklich feinste Sachen mit machen. Leider bekomme ich soetwas wie unten im Bild nicht hin, das wäre die Steigerung schlechthin. Bedeutet ja, man müsste die Header mit Bitmaps austauschen können. Ich versuchs mal weiter, falls soetwas mit Rebar überhaupt möglich ist.
window 50,50-700,500
USEFONT MS Sans Serif,13,0,0,0,0
SETDIALOGFONT 1
declare ReBar&,ReBar#,Lb1&,Lb2&,Lb3&,a#
dim a#,16
DECLARE a1&,b1&,c1&
DECLARE a2&,c1&,c2&,c3&
DECLARE a3&
Lb1&=create(text,%hwnd,,0,0,0,0)
CREATE(TEXT,lb1&,Seite 1,0013,0013,0130,0014)
a1&    = CREATE(RADIOBUTTON,lb1&,Check Me Seite 1 A,0013,0033,0120,0017)
a2&    = CREATE(RADIOBUTTON,lb1&,Check Me Seite 1 B,0013,0053,0120,0017)
a3&    = CREATE(RADIOBUTTON,lb1&,Check Me Seite 1 C,0013,0073,0120,0017)
Lb2&=create(text,%hwnd,,0,0,0,0)
CREATE(TEXT,lb2&,Seite 2,0013,0013,0130,0014)
b1&    = CREATE(RADIOBUTTON,lb2&,Check Me Seite 2 A,0013,0033,0120,0017)
b2&    = CREATE(RADIOBUTTON,lb2&,Check Me Seite 2 B,0013,0053,0120,0017)
b3&    = CREATE(RADIOBUTTON,lb2&,Check Me Seite 2 C,0013,0073,0120,0017)
Lb3&=create(text,%hwnd,,0,0,0,0)
CREATE(TEXT,lb3&,Seite 3,0013,0013,0130,0014)
c1&    = CREATE(RADIOBUTTON,lb3&,Check Me Seite 3 A,0013,0033,0120,0017)
c2&    = CREATE(RADIOBUTTON,lb3&,Check Me Seite 3 B,0013,0053,0120,0017)
c3&    = CREATE(RADIOBUTTON,lb3&,Check Me Seite 3 C ,0013,0073,0120,0017)
clear a#
long a#,0=8
long a#,4=$FFFF---Alles initialisieren
external(comctl32.dll,InitCommonControlsEx,a#)
--Stil: $50000000 | ~CCS_NORESIZE | ~RBS_FIXEDORDER
ReBar&=Control(ReBarWindow32,,$50000884 ,10,10,300,400,%hwnd,1,0)
struct ReBar=Size&,Mask&,Style&,clrFore&,clrBack&,lpText&,cch&,iImage&,hwndChild&,
cxMinChild&,cyMinChild&,cx&,hbmBack&,wID&,cyChild&,cyMaxChild&,cyIntegral&,
cxIdeal&,lParam&,cxHeader&
dim ReBar#,ReBar--REBARBANDINFO
clear ReBar#

with ReBar#

    .Size&=sizeof(ReBar#)
    .Mask&=$73 ------RBBIM_STYLE | RBBIM_CHILD | RBBIM_CHILDSIZE | RBBIM_SIZE
    .cyMaxChild&=1--Darf nicht Null sein
    .Style&=128------------------------RBBS_GRIPPERALWAYS (folgende Bänder mit Griff)
    .cxMinChild&=5---------------------Minimum Breite
    .cyMinChild&=height(ReBar&)--------Höhe des Bandes
    .cx&=100---------------------------Vorgabe Breite
    .hwndChild&=Lb1&-------------------Band 1
    sendmessage(ReBar&,1025,0,ReBar#)--RB_INSERTBAND
    sendmessage(ReBar&,2048,0,ReBar#)--RB_INSERTBAND
    .Style&=128------------------------RBBS_GRIPPERALWAYS (folgende Bänder mit Griff)
    .cxMinChild&=5--------------------Minimum Breite
    .cyMinChild&=height(ReBar&)-------------------Höhe des Bandes
    .cx&=100---------------------------Vorgabe Breite
    .hwndChild&=Lb2&-------------------Band 2
    sendmessage(ReBar&,1025,1,ReBar#)--RB_INSERTBAND
    .cxMinChild&=5--------------------Minimum Breite
    .cyMinChild&=height(ReBar&)-------------------Höhe des Bandes
    .hwndChild&=Lb3&-------------------Band 3
    sendmessage(ReBar&,1025,2,ReBar#)--RB_INSERTBAND

endwith

while 1

    waitinput

    if sendmessage(ReBar&,1051,0,0) > height(ReBar&)--1051 = RB_GETBARHEIGHT

        clear a#--Umklappen rückgängig, falls Gripper nach unten gezogen wurde
        sendmessage(ReBar&,1047,0,a#)--RB_SIZETORECT

    endif

endwhile


 
07.11.2006  
 




Rolf
Koch
Wow, ich habs. Das Rebarteil lässt sich aber gut verarschen *lol*
Ich bastel noch ein bisschen und dann lege ich es mal hierhin
 
07.11.2006  
 



@Rolf RC1? oO
 
07.11.2006  
 



 
- Seite 3 -



Rolf
Koch
*lol* Hier meine kleine Idee und Umsetzung.
[...] 

Läuft bei mir einwandfrei mit der XProfan Version: 10.0ß-NT RC1.
Könnt mir ja mal schreiben, wie es natürlich wieder mal woanders Probleme macht
 
07.11.2006  
 



Genial Rolf! Das Result sieht einfach spitze aus!
 
07.11.2006  
 




Rolf
Koch
also scheints doch zu laufen - Der Dank gilt vorallem an Pascal, da er hier den Grundstock geliefert hat. Da kann man noch mehr draus machen.
 
07.11.2006  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

20.229 Betrachtungen

Unbenanntvor 0 min.
Gast.081506.09.2024
Rc31.01.2022
Jörg Sellmeyer23.06.2020
jacdelad20.12.2018
Mehr...

Themeninformationen



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