| |
|
|
- 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. |
|
|
| |
|
|
|
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? |
|
|
| |
|
|
|
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. |
|
|
| |
|
|
|
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? |
|
|
| |
|
|
|
| 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. |
|
|
| |
|
|
|
| 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 |
|
|
| |
|
|
|
| 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. |
|
|
| |
|
|
| |
|
- 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. |
|
|
| |
|
|