Italia
Foro

Aktuelle bzw. zuletzt geänderte Zelle in Listview ermitteln

 
- Page 1 -



Stephan
Sonneborn
Hallo zusammen,
ich hab folgendes Problem: in einem mit Franks listview.dll erstellten Listview werden die einzelnen Zellen per Tastatur (Tab-Taste) angewählt und dann editiert.

Kann man feststellen, welche Zelle zuletzt geändert wurde?

Danke im Voraus!!!
 
Schöne Grüße aus Wittgenstein
von Stephan

Programmierumgebung:| XProfan X4 | WIN10 | AMD FX6100 3,3 GHz
11.01.2012  
 



 
- Page 1 -


Doch. Ist leicht zu auszulesen, siehe Funktion GetVar() mit Flag 0 und 6, bzw. Flag 2 und 4.
 
12.01.2012  
 




Stephan
Sonneborn
Hallo Frank, Thomas und David,

vielen Dank per Eure Antworten.

Soweit ich weiß, fängt INITMESSAGES alle Messages des Listviews ab und verarbeitet sie. Deswegen kommen "normale" Messages nicht durch.

Thomas' Lösung wäre eine Möglichkeit.

Franks Vorschlag, die Funktion GETVAR() zu nutzen, habe ich auch schon in Betracht gezogen. Aber GETVAR() gibt doch "nur" das Handle des Edits zurück. Wie komme ich damit an den Spalten- und Zeilenindex?
 
Schöne Grüße aus Wittgenstein
von Stephan

Programmierumgebung:| XProfan X4 | WIN10 | AMD FX6100 3,3 GHz
13.01.2012  
 



Hast du Flag 2 und 4 probiert? Und die Listview.dll-Usermessages?
 
13.01.2012  
 




Stephan
Sonneborn
Ja, aber Flag 2 und 4 liefern nur -1 und die Usermessages sind doch auch nur per Mausklicks...
 
Schöne Grüße aus Wittgenstein
von Stephan

Programmierumgebung:| XProfan X4 | WIN10 | AMD FX6100 3,3 GHz
13.01.2012  
 



Wozu benötigst du das denn? Vielleicht gibts ne weitere Möglichkeit.
 
13.01.2012  
 




Thomas
Freier
@Frank, er möchte einfach wissen in welcher Zeile und Spalte jetzt das EDIT ist, wenn er z.B. die TAB- oder PFEIL-Taste gedrückt hat. Dann entsteht ja ein neues EDIT.
Listview Aiuto:
Wurde die Tabtaste gedrückt, dann baut sich anschließend ein neues Editfeld auf, sodas der nächste Itemtext editiert werden kann.

Intern wirst du ja die Tastenaktion verarbeitet haben. Aber wie kommen wir daran?
 
Gruß Thomas
Windows XP SP2, XProfan X2
14.01.2012  
 



Das hatte ich schon verstanden. Aber wofür wird die Information necessario? Vielleicht kann man das ja anders regeln. Der Tastendruck ansich wird intern ja ermittelt. Die Position im Listview aber nirgendwo angezeigt bekannt gegeben, war finora auch nie nötig.
 
14.01.2012  
 



Könnte mir vorstellen, dass er eine UNDO-Funktion einbauen, und damit n-Vor-Edit mit Zeile+Spalte+Text in ein Array legen will.

Saluto Thomas
 
14.01.2012  
 



Dann bleibt vielleicht noch die Möglichkeit, mit manuellen Edits zu arbeiten, die ja auch supportati werden.
Jede Eventualität einzukalkulieren, die dann nach Jahren vielleicht mal necessario wird, ist ja doch leider nie possibile. Da die Listview.dll auch nicht mehr weiter entwickelt wird, wird es leider auch kein entsprechendes Update mehr geben. Ich programmiere auch schon seit einem Jahr nicht mehr in Assembler und werde das unter 64 Bit auch nicht mehr machen. Eventuell besteht die Möglichkeit, den Sourcecode abzutreten, damit er von jemand Anderem weiter entwickelt wird.
 
14.01.2012  
 



 
- Page 2 -



Stephan
Sonneborn
Unbenannt (14.01.12)

Könnte mir vorstellen, dass er eine UNDO-Funktion einbauen, und damit n-Vor-Edit mit Zeile+Spalte+Text in ein Array legen will.


Bingo!

Hallo Thomas,
es geht um eine Tabelle mit Koordinatenwerten. Diese Werte dienen zur Darstellung einer Zeichnung (geschlossener Linienzug). Wenn nun der Anwender die Koordinaten der einzelnen Punkte verändert, müssen auch die Koordinaten der nächsten Linie geändert werde, damit der Linienzug geschlossen bleibt.
Da der Anwender immer nur einen Koordinatenwert ändern kann, kann dies die x- oder y Koordinate sein.
Plan B ist naturalmente, die Zeile zu ermitteln, in der gerade geändert wird, diese zwischen zu speichern und dann mit dem Inhalt nach dem Editieren zu vergleichen.

Plan A wäre eben gewesen, tatsächlich direkt zu wissen, welche Zelle geändert wird.
Damit würde die Undo-Funktion naturalmente auch einfacher.
 
Schöne Grüße aus Wittgenstein
von Stephan

Programmierumgebung:| XProfan X4 | WIN10 | AMD FX6100 3,3 GHz
15.01.2012  
 




Stephan
Sonneborn
Frabbing (14.01.12)

Dann bleibt vielleicht noch die Möglichkeit, mit manuellen Edits zu arbeiten, die ja auch supportati werden.
Jede Eventualität einzukalkulieren, die dann nach Jahren vielleicht mal necessario wird, ist ja doch leider nie possibile. Da die Listview.dll auch nicht mehr weiter entwickelt wird, wird es leider auch kein entsprechendes Update mehr geben.


Hallo Frank,
ich werde mich noch mal intensiver mit den manuellen Edits beschäftigen.
Vielen Dank!
 
Schöne Grüße aus Wittgenstein
von Stephan

Programmierumgebung:| XProfan X4 | WIN10 | AMD FX6100 3,3 GHz
15.01.2012  
 




Thomas
Freier
@Stephan, bei den manuellen Edits besser zum Beispiel "Eigene_Eingaben.prf" greifen , da dur hier die zulässigen Eingaben und das Beenden bestimmen und erfassen kannst, auch ob "Abbruch" gewählt wurde.
Scriptbeispiel , die Daten wie in "Eigene_Eingaben.prf" nach Doppelklick ermitteln.
KompilierenMarkierenSeparieren
Proc Haushalt_Ein_Sonst' Sonstige Einnahmen

    case (LV_Column&=0) : Haushalt_Edit 0'Text
    case (LV_Column&=1) : Haushalt_Edit 2'Betrag
    case (LV_Column&=2) : Haushalt_Edit 1'Anzahl
    DeleteSpaceLines(Listview51&,0)
    Rechne_Sonstiges
    Haushalt_Ausgaben
    SetFocus(%hwnd)

EndProc

Proc Haushalt_Edit

    Parameters x%
    Declare x!
    DEF nurzahlen(2) !"NEdit.dll","InitMessages"
    ndll&=usedll(old_file$+"\\Lib\\NEdit.dll")
    var Element&=control("Edit",LV_Text$,$548100C0 | LV_Orient&,LV_Xoffset&,LV_Yoffset&,LV_Width&,LV_Height&,LV_Handle&,100,%hinstance,0)
    SetWindowPos(Element&,-1,0,0,0,0,$13)
    SetFont Element&,LV_Font&
    Setfocus(Element&)
    SendString(Element&,"+({END})")'Text Markieren und Cursor ans Ende
    case x%=1: SetEditNumeric(Element&)'nur Ziffereingaben erlauben
    case x%=2: nurzahlen(element&,7)'nur Ziffereingaben und Nachkommastellen erlauben

    While 1

        WaitInput

        if @TabChanged(T&)

            TAB_WECHSEL GetActiveTab(T&)
            break

        endif

        case iskey(27):BREAK'Abbruch ESC
        CursorPos

        If @lt(mouseposx(0),LV_Xoffset&) OR @lt(mouseposy(0),LV_YOffset&) \

            OR @gt(mouseposx(0),@add(LV_Xoffset&,LV_Width&)) OR @gt(mouseposy(0),@add(LV_Yoffset&,LV_Height&))
            LV_Text$ = @GetText$(Element&)

            If x%=2'Zahl mit Nachstellen

                LV_Text$=Translate$(LV_Text$,",",".")
                x!=val(LV_Text$)
                @Set("Decimals",2)
                LV_Text$=str$(x!)

            EndIf

            SetItemText(LV_HAndle&,addr(LV_Text$),LV_Column&,LV_Row&)
            BREAK

        endif

        If iskey(13)'Speichern Enter gedrückt

            LV_Text$ = @GetText$(Element&)

            If x%=2'Zahl mit Nachstellen

                LV_Text$=Translate$(LV_Text$,",",".")
                x!=val(LV_Text$)
                @Set("Decimals",2)
                LV_Text$=str$(x!)

            EndIf

            SetItemText(LV_HAndle&,addr(LV_Text$),LV_Column&,LV_Row&)
            BREAK

        endif

    wend

    clear y&,x&
    DestroyWindow(Element&)
    FreeDLL&

EndProc


Bei zwei Nachkommastellen nehme ich meist die NEdit.dll. Sonst selbst etwas stricken.
 
Gruß Thomas
Windows XP SP2, XProfan X2
15.01.2012  
 




Answer


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

11.122 Views

Untitledvor 0 min.
Member 154727723.09.2018
Peter Max Müller15.10.2017
Michael W.07.07.2016
RudiB.04.02.2016
Di più...

Themeninformationen



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