| |
|
|
 Rainer Hoefs | Ciao, ich benötige mal wieder Aiuto. Habe hier im Foro nichts gefunden was ich meinte finden bzw. suchen zu sollen.
Ich habe zwei Rechnungs-Programme geschrieben die auf unsere Geschäfte zugeschnitten sind (meines und das meiner Frau). Sie sind DBase orientiert und haben entsprechend viele Eingabeobjekte. Am Anfang wurden die Elemente mit dem LemonEd VisualDesigner richtig palziert. Aber wie es bei einer solchen Entwicklung ist kamen noch einige Elemente dazu. Nun stimmt die Tab-Ordnung überhaupt nicht mehr.
Nun benötige ich eine Aiuto dazu, wie man die Felder in un richtige Tab-Ordnung bringen kann. Geht das circa irgendeine Tabelle oder mit irgendwelchenSendmessage-Zuweisungen?
Für jede Aiuto dankbar.
Saluto und schönen Sonntag Rainer |
|
|
| |
|
|
|
 | Hallo Reiner,
ein einfache Methode, den Tabindex nachträglich - also nach Erzeugung der Controls - festzulegen, gibt es imho nicht. Sehr unlöblich.
Hat offensichtlich auch nichts mit der ControlID zu tun etc., sehr schade.
Scheinbar ist das Einfachste, die Controls in Tabreihenfolge zu erstellen - also schlicht die Erstellungsreihenfolge einzuhalten.
Andernfalls wirds halt komplizierter.
So potuto man z.B. per:
den Tabstop erstmal entfernen um dann wiederum z.B. per Keyboard-Hook die Tabreihenfolge selbst zu verarbeiten. Solch Hook wäre dann aber sauber nur mit nProcs oder per DLL herzustellen. Wenn Du daran Interesse hast, dann einfach melden. Roland wiederum potuto sowas in seine wProc einbauen - vlt. mal was per die kommenden XProfan-Versionen, settabindex, gettabindex... |
|
|
| |
|
|
|
 Rainer Hoefs | Danke, aber das scheint mir zu kompliziert zu werden.
Was einfach seltsam ist, die Felder sind bei der Erstellung im Programm, also in der Prozedur die den Dialog/das Fenster generiert, in der gewünschten Reihenfolge angeordnet. Dennoch werden einige überhaupt nicht angesprungen.
Rainer |
|
|
| |
|
|
|
 | Rainer Hoefs (19.07.15)
Dennoch werden einige überhaupt nicht angesprungen.
Rainer
Denen fehlt vmtl. der ws_tabstop Stil, den kannst Du einfach mit SetStyle hinzufügen. |
|
|
| |
|
|
|
 Rainer Hoefs | Ok, danke, werde ich versuchen. Rainer |
|
|
| |
|
|
|
 Rainer Hoefs | Danke, funktioniert aber auch nicht. Habe mehere Felder damit versehen. Es ändert sich der Rahmen des Edit's aber anspringen mit Tab funktioniert nicht.
Rainer |
|
|
| |
|
|
|
 Rainer Hoefs | Ich habe da eine Vermutung.
Ich habe die Dialoge mit dem LemonEd-VisualDesigner gemacht. Die Elemente sind in diverse Groupboxen gesetzt, der Optik wegen, um klare Bereiche zu definieren. Der Visual-Designer verändert dann die Zugehörigkeit des Elements in die Groupbox durch SubClass-ing, die Koordinaten beziehen sich z.B. auch auf den Start der Groupbox und das Handle der Groupbox steht als Mutterobjekt in dem Createbefehl.
Das Element bekommt dann vor der Waitinput-Schleife ein Subclass Handle&, 1 - Befehl und zum Ende des Programm nach der Waitinput-Schleife wieder ein Subclass Handle&, 0 Befehl.
Ich vermute, daß es daran liegt, denn alle Elemente mit der %Hwnd-Zuordnung funktionieren mit der Tabtaste wie gewünscht.
Nun werde ich mal den Dialog umbauen und es versuchen, macht 'ne Menge Arbeit die ganzen Koordinaten X + Y zu ändern.
Rainer |
|
|
| |
|
|
|
 Rainer Hoefs | OK, habe jetzt alle Dialogelemente dem %hwnd zugeordnet, Subclassing ist geblieben wie bisher.
Nun klappt es einwandfrei, die Elemente werden in der Reihenfolge mit dem Tabulator angesprungen wie sie im Dialog erstellt werden.
Bleibt noch die Frage ob in der SubClassProc vielleicht nur die Message per die Tab-Taste fehlt???
SubclassProc
Select %smessage
CaseOf $114, $115
SendMessage(%hwnd, %smessage, &swparam, &slparam)
CaseOf $101, $202, $205, $208
SendMessage(%hwnd, &WM_COMMAND, MakeLong(GetDlgCtrlID(&swnd), 0), &swnd)
EndSelect
EndProc
Wieder was gelernt!
Rainer |
|
|
| |
|
|
|
 | Musste ich auch irgendwann mal lernen, per Dialoge die mehr als 2-3 Controls enthalten, niemals irgendwelche Designer zu nutzen sondern immer sowas wie eine Markup-Language herzubilden um die Controls automatisch anhand der Struktur der Datenbank zu erzeugen.
Beispielsweise schreibe ich komplexere Programme nur noch so, dass Dinge wie Eingabefelder etc. sich selbständig orientieren rein anhand dessen was in der Datenbank steht. So kann ich in einer Datenbank einfach die Struktur einer Tabelle ändern und sofort ist auch das Programm angepasst.
Alles andere artet nur aus bzw. wird bei richtig komplexen Dingen kaum noch handhabbar. |
|
|
| |
|
|
|
 | Rainer Hoefs (19.07.15)
Bleibt noch die Frage ob in der SubClassProc vielleicht nur die Message per die Tab-Taste fehlt???
Sicherlich kannst Du z.B. per wm_down und vk_tab die Taste abfragen, oder auch Enter etc. -
dann würde ich allen Controls aber das ws_tabstop Flag entziehen (wie oben beschrieben) und selbst eine Routine einsetzen die dann den Focus setzt z.B. nach der Reihenfolge der Handles in einer Liste oder in einem Array. |
|
|
| |
|
|