| |
|
|
| um in einem programm eine datenerfassung zu realisieren hatte ich bisher eine methode, in der ich 2 LVs benutze. die 1. LV ist einzeilig und verfügt über editfelder. die eingaben werden anschließendt über den zwischenweg einer sql-datenbank in der 2. LV dargestellt. eine LV zur datenerfassung anstelle Text/Button/Editelementen ist wesentlich einfacher wenn sich layouts z.b bei unterschiedlichen bildschirmauflösungen ändern.
leider ist das handling (re.Maustaste bzw. doppelklick) für tastarurorientierte anwender zu umständlich. damit fortlaufend eingaben per tastatur möglich sind möchte ich folgendes realisieren.
1. ich kann per software (sendmessage ?) ein editfeld aktivieren. 2. ENTER wechselt zum nächsten editfeld (geht ja jetzt schon) 3. nach dem letzten feld, ist kein editfeld mehr aktiv, das müßte ich erkennen (Statusabfrage aller editfelder) um den datensatz zu übernehmen und in die 2. LV zu schreiben 4. jetzt aktiviere ich per software wieder das editfeld von 1. und setze den focus auf die LV (das muß nicht zwangsläufig das 1. feld der LV sein)
ich hoffe, ich habe mich verständlich ausgerückt. um mein programm für tastaturbedienung zu optimieren mußte ich auf editfelder ausweichen, sieht aber nicht so toll aus und ist umständlich, da ich mich dynamisch an bildschirmauflösungen anpasse, und auch schnell mal den aufbau der eingabefelder ändere. die LVs werden bei mir vollautomatisch aus der sql-datenbank generiert und stellen die sicht auf eine tabelle dar. insofern stellt die LV mit den eingabefeldern auch nur einen teil meiner datenbank dar.
gibt es für mich hoffnung? das einzige was ich gefunden habe ist die LVM_EDITLABEL message, die aber bei mir gar nichts tut.
r.r. |
|
|
| |
|
|
|
| Hi Ragnar,
hast du das Demo Eigene_Eingaben.prf schon mal angesehen, in dem eigene Controls realisiert werden? Könnte was für dich sein. Um ein Editfeld zu aktivieren, benötigst du ja dessen Handle. Das kannst du mit der Funktion GetVar() / Flag 0 erfragen. Aktivieren geht ja dann mit SetFocus. Vergiss die LVM_EDITLABEL Message von Windows. Ist kompliziert und funktioniert auch nur für Spalte 0.
Hoffe, das hilft dir auf die Sprünge.
Gruß, Frank |
|
|
| |
|
|
|
| vielen dank für die schnelle antwort.
GetOwnControlParas(B,H,S,Z) ist ja ein mächtiges teil. ich hatte zwar schon früher die demo gesehen, aber noch nie versucht zu verstehen wie das funktioniert. damit sollte sich so ziemlich alles machen lassen. nächste woche hab ich urlaub, evtl. wäre das ja mal eine nette fleißaufgabe.
GetVar() ist sicher die lösung um festzustellen wann das editieren begonnen bzw. beendet wurde. eine aktivierung mit setfocus scheint mir nicht möglich, denn dazu müßte ich das handle ja schon vorher kennen. außerdem ist mir aufgefallen, daß sich das handle eines editfeldes bei jeder neuauswahl ständig ändert. also nützt es auch nichts, sich das handle zu merken. vielleicht habe ich ja auch was noch nicht richtig begriffen.... ich habe jedenfalls versucht ein editfeld zum blinken zu bringen (das würde die kontrollmöglichkeit beweisen) - ohne erfolg. wenn man das hinbekäme wäre das die einfachste lösung für mein problem mir dem editieren.
r.r. |
|
|
| |
|
|
|
| Hi,
ich habe jedenfalls versucht ein editfeld zum blinken zu bringen (das würde die kontrollmöglichkeit beweisen) - ohne erfolg. wenn man das hinbekäme wäre das die einfachste lösung für mein problem mir dem editieren.
Das geht so nicht. Sobald das Editfeld den Focus verliert, wird es entfernt. Muß ja auch so sein. Um das zu realisieren, was du anstrebst, müßtest du das Editfeld subclassen. Ich mache das in der Dll schon. Sag mir, was genau du vorhast und ich schau mal, ob ich das irgendwie realisieren kann. Laß uns das aber via persönlicher Mail weiter bequatschen.
Gruß, Frank |
|
|
| |
|
|