Italia
Fonte/ Codesnippets

GridBox mit (Sub)Item-Edit

 

Matthias
Arlt

'Es wird nicht der standardmäßige Inplace-Editor der Listview genutzt.
'Dieser würde nur per die erste Spalte zur Verfügung stehen...
'Original-Source Thomas Freier - modifiziert Matthias Arlt
Window 0,0 - 600,410
declare LV&,Spalte&,Zeile&,Item&,Edit&,Font&,Txt$
declare rect#,cellpos_x%,cellpos_y%,cellwidth%,cellheight%
Font&=CreateFont("Verdana",16,0,0,0,0)
SetDialogFont Font&
LV&=Create("GridBox",%hwnd,"Spalte 1;1;60;Spalte 2;1;120;Spalte 3;1;80;Spalte 4;1;80;Spalte 5;1;80",0,10,10,460,250)
SetFont LV&,Font&

whileloop 0,20

    Addstring(LV&,str$(&loop) + "|0|0|0|0")

wend

Edit& = create("Edit",LV&,"",0,0,0,0)
setfont Edit&,Font&

proc SetSubItemEdit

    dim rect#,16
    SendMessage(LV&,$100E,Zeile&,rect#)'LVM_GETITEMRECT
    cellpos_x% = long(rect#,0)
    cellpos_y% = long(rect#,4) - 1
    cellwidth% = sendmessage(LV&,$101D,Spalte&,0)
    cellheight% = (long(rect#,12) - long(rect#,4)) + 1

    if Spalte& > 0

        whileloop 0,(Spalte& - 1),1

            cellpos_x% = cellpos_x% + sendmessage(LV&,$101D,&loop,0)

        wend

    endif

    dispose rect#
    settext Edit&, Txt$
    setwindowpos Edit& = cellpos_x%,cellpos_y% - cellwidth%,cellheight%
    setfocus(Edit&)
    'SendMessage(Edit&,"+({END})") 'Cursor ans Ende setzen...
    SendMessage(Edit&,$B1,0,-1)'oder Alles markieren... (Explorer-konform)

endproc

AddHotKey 13, 13, 0
AddHotKey 37, 37, 0
AddHotKey 38, 38, 0
AddHotKey 39, 39, 0
AddHotKey 40, 40, 0
SubClass %hwnd, 1
usermessages 2000

SubClassProc

    if SubClassMessage(%hwnd, 78)'WM_NOTIFY

        if (Long(&sLParam,8) = -3)

            Item&=Long(&sLParam,12)

            if (Item& <> -1)

                SendMessage(%hwnd,2000,Item&,Long(&sLParam,16))

            endif

        elseif (Long(&sLParam,8) = -180)'LVN_BEGINSCROLL

            settext LV&,Zeile&,Spalte&,gettext$(Edit&)
            setwindowpos Edit& = 0,0-0,0

        endif

    endif

endproc

while 1

    waitinput

    if (%umessage = 2000)

        Txt$ = GetText$(LV&,&uwparam,&ulparam)
        Spalte&= &ulparam
        Zeile&= &uwparam
        SetSubItemEdit

        while getfocus(Edit&)

            waitinput

            if (%menuitem = 13)

                break

            elseif (%menuitem = 37) | (%menuitem = 38) | (%menuitem = 39) | (%menuitem = 40)

                settext LV&,Zeile&,Spalte&,gettext$(Edit&)
                case (%menuitem = 37) : Spalte& = (Spalte& - 1)
                case (%menuitem = 38) : Zeile& = (Zeile& - 1)
                case (%menuitem = 39) : Spalte& = (Spalte& + 1)
                case (%menuitem = 40) : Zeile& = (Zeile& + 1)
                Txt$ = GetText$(LV&,Zeile&,Spalte&)
                SetSubItemEdit

            endif

        wend

        settext LV&,Zeile&,Spalte&,gettext$(Edit&)
        setwindowpos Edit& = 0,0-0,0
        setfocus(%hwnd)

    endif

wend

usermessages 0
SubClass %hwnd, 0
end
 
WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia
02.11.2016  
 




Ernst
Einen Haken hat die Geschichte, wenn der Scrollbalken ins Spiel kommt - das Edit-Feld bzw. der Cursor lässt sich nicht mitscrollen.

z.B.: ein Subitem in der dritten Zeile wird doppelgeklickt -> Edit erscheint; beim hinaufscrollen um eine Zeile sieht man das Erscheinungsbild des Edits in der zweiten und den Cursor darunter in der dritten Zeile. Bei der Eingabe wird in der dritten Zeile unter dem Edit geschrieben (scheinbar) - beim Klick auf ein anderes Subitem wird der Text in das eigentlich richtige Subitem (zweite Zeile) übernommen.
 
11.01.2017  
 




Matthias
Arlt
Eigentlich soll das Edit standardmäßig ja garnicht mitscrollen (im Explorer tut es das ja auch nicht...). Ich habs nochmal überarbeitet. Damit sollte nun das gewohnte Verhalten hergestellt sein.

Und der Vollständigkeit halber das Ganze noch etwas optimiert und gleich noch mit Weiterschaltung mittels Pfeiltasten...

Ich habe das mal in die Code-Box im Eingangsbeitrag verschoben. Schließlich macht es keinen Sinn, dort den noch nicht fehlerbereinigten Source stehen zu lassen. Das geht nur zu Lasten der Übersichtlichkeit. Siehe also weiter oben...

Saluto Matthias
 
WinXP SP2, Win7 - XProfan 10/11/FreeProfan32 - Xpia
11.01.2017  
 



Zum Quelltext


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

6.164 Views

Untitledvor 0 min.
Gast.081503.10.2024
Member 862464112.05.2024
Walter28.11.2022
RudiB.20.08.2022
Di più...

Themeninformationen

Dieses Thema hat 2 subscriber:

Matthias Arlt (2x)
Ernst (1x)


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