Jump to content

Sky Slate Blueberry Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate
Photo

In Formularen AHK-Befehle feldspezifisch definieren


  • Please log in to reply
28 replies to this topic
Meister Lampe
  • Members
  • 39 posts
  • Last active: Jan 15 2016 10:01 AM
  • Joined: 03 Apr 2013

Hallo zusammen!

 

Unabhängig von den anderen Fragen, die ich hier gestellt habe, ist eine weitere, im Auftrag einer Kollegin, die sich ein Script wünscht, hinzugekommen.

 

Sie arbeitet an einer Datenbank mit mehreren(!) Formularen für ein und denselben Datensatz und muß dann immer zum Ausfüllen des zweiten aus der ersten Maske in eine andere Ebene springen, für das es die komplizierte Tastenkombination Str+Alt+Pfeil runter gibt bzw. +Pfeil rauf, um wieder zurück zu gelangen.

 

Ich möchte ihr nun ein Script schreiben, daß bewirkt, daß aus einem definierten Feld des 1. Formulars die Tab-Taste nicht mit dem Cursor in das nächste springt, sondern diese Kombination auslöst, also automatisch ins andere Formular wechselt.

 

Wie kann ich nun dafür sorgen, daß AHK die Felder erkennt? Wenn ich sie mit Rechtsklick/Eigenschaften prüfe, läßt sich z.B. eine "XML ID" erkennen. Kann man darüber was machen?

 

Viele Grüße von Meister Lampe



Meister Lampe
  • Members
  • 39 posts
  • Last active: Jan 15 2016 10:01 AM
  • Joined: 03 Apr 2013

Hallo!

 

Mitlerweile habe ich das Script eigentlich fertiggestellt - bis eben auf diese Bedingung.

 

Im Prinzip möchte ich ja nichts anderes, als das #IfWinActive innerhalb des Fensters über die Namen der Eingabefelder eines Formulars nochmals zu differenzieren.

 

Müßte das nicht zu machen sein?

 

Viele Grüße von Meister Lampe



Andi
  • Members
  • 195 posts
  • Last active: Apr 18 2014 05:03 PM
  • Joined: 11 Feb 2005

upps...siehe unten...



Andi
  • Members
  • 195 posts
  • Last active: Apr 18 2014 05:03 PM
  • Joined: 11 Feb 2005

Hallo,

ein möglicher Ansatz...

#IfWinActive Name_des_Eingabefeldes
tab::
If (A_CaretX > 50 And A_CaretX < 100 And A_CaretY = 80) ;Abfrage, ob sich der Cursor in dem besagten Feld befindet
	send ^!{Down}
else
	Send {Tab}
return
#IfWinActive


^+2::  ; um die Werte für die Cursor Position zu ermitteln 
SetTimer, Cursorüberwachung, 100
Return

Cursorüberwachung:
ToolTip, X%A_CaretX% Y%A_CaretY%, A_CaretX, A_CaretY - 20
Return


Meister Lampe
  • Members
  • 39 posts
  • Last active: Jan 15 2016 10:01 AM
  • Joined: 03 Apr 2013

Hallo Andi!

 

Wie ermittle ich denn die Cursorposiion und übertrage sie?

So wie oben hat das noch nicht geklappt. Ich habe es zur Kontrolle auch mal mit einer anderen Aktion als ^!{Down} versucht. Und kann ich die compilierte Datei dann meiner Kollegin geben? Die hat einen anderen Bildschirm. Und wenn sie das Fenster mal in der Größe verändert, verändert sich ja auch die Mausposition. :/

 

Und wie überhaupt in Deinem Code oben soll ich den Namen des Eingabefeldes definieren bzw. mit der Curserposition verknüpfen? Sonst nützt das IfWinActive doch gar nichts, sondern blockiert nur, oder?

 

Ist denn wirklich keine Lösung über die Feld-ID, den Namen oder den XML-Code möglich?

 

Viele Grüße von Meister Lampe



Andi
  • Members
  • 195 posts
  • Last active: Apr 18 2014 05:03 PM
  • Joined: 11 Feb 2005

Hi Meister L.,

 

 

Wie ermittle ich denn die Cursorposiion und übertrage sie?

 

Bei mir funktioniert dies ganz gut mit dem u.g. Code (stammt aus der ahk-Hilfedatei). D.h. Du ermittelst damit die linke X-Pos. sowie die rechte (letzte) X-Pos. und die Y-Pos des Eingabefeldes. Einmal ermittelt, musst Du diese dann im o.g. Skript einsetzen: If (A_CaretX >= "Xpos links" And A_CaretX <= "xpos rechts" And A_CaretY = "ypos")

^+2::  ; um die Werte für die Cursor Position zu ermitteln 
SetTimer, Cursorüberwachung, 100
Return

Cursorüberwachung:
ToolTip, X%A_CaretX% Y%A_CaretY%, A_CaretX, A_CaretY - 20
Return

 

Ich habe es zur Kontrolle auch mal mit einer anderen Aktion als ^!{Down} versucht.

Ich dachte, dies sei die Aktion um in das zweite Eingabefenster zu gelangen. Meinst Du mit dem Befehl Send ^!{Down} springt Deine erste Eingabemaske nicht in die Zweite?

 

 

Und kann ich die compilierte Datei dann meiner Kollegin geben?

Kompilieren sollte kein Problem darstellen.

 

 

Und wenn sie das Fenster mal in der Größe verändert, verändert sich ja auch die Mausposition.

Stimmt, die Fenstergröße sollte nicht varieren. In manchen Fenstern klappt es event. auch nicht Cursorpositonen mit A_Caretx bzw. A_Carety zu ermitteln.

 

 

Und wie überhaupt in Deinem Code oben soll ich den Namen des Eingabefeldes definieren bzw. mit der Curserposition verknüpfen? Sonst nützt das IfWinActive doch gar nichts, sondern blockiert nur, oder?

Sorry, der IfWinactive sollte natürlich nicht von dem Namen des Eingabefeldes gefolgt sein, sondern von dem Namen des ersten Eingabefensters...

...d.h. der Hotkey, der auf der Tabtaste liegt, soll ja nur in diesem Fenster funktionieren. Befindet sich der Cursor in dem letzten Eingabefeld sendet die Tab-Taste dann ^!{Down}, ansonsten nur Tab.

 

 

Ist denn wirklich keine Lösung über die Feld-ID, den Namen oder den XML-Code möglich?

 

Du kannst es ja mal probieren, ob Du mit dem folgenden Code weiterkommst (auch aus der Hilfedatei zu finden unter ControlGetFocus)

; Dieses Script ermittelt die ahk_id (HWND) des fokussierten Steuerelements im aktiven Fenster.
; Dieses Script benötigt Windows 98, NT 4.0 SP3+ oder höher.
GuiThreadInfoSize = 48
VarSetCapacity(GuiThreadInfo, GuiThreadInfoSize)
NumPut(GuiThreadInfoSize, GuiThreadInfo, 0)
If not DllCall("GetGUIThreadInfo", uint, 0, str, GuiThreadInfo)
{
    MsgBox GetGUIThreadInfo() hat einen Fehler entdeckt.
    Return
}
FocusedHWND := NumGet(GuiThreadInfo, 12)  ; Ermittelt das hwndFocus-Feld aus der Struktur.
MsgBox % "Die ahk_id (HWND) des fokussierten Steuerelements ist " . FocusedHWND
; Diese ID kann für alle Steuerelement-Befehle verwendet werden. Zum Beispiel:
; ControlGetText, AusgabeVar,, ahk_id %FocusedHWND%

LG Andi



Meister Lampe
  • Members
  • 39 posts
  • Last active: Jan 15 2016 10:01 AM
  • Joined: 03 Apr 2013

Hallo Andi!

 

Ich dachte, dies sei die Aktion um in das zweite Eingabefenster zu gelangen. Meinst Du mit dem Befehl Send ^!{Down} springt Deine erste Eingabemaske nicht in die Zweite?

 

Klar, das ist schon richtig. Ich hatte die beiden Aktionen voneinander getrennt, um sicherzugehen, an welchem Befehl es nun liegen könne und habe dann statt dem Send ^!{Down} z.B. Send, xyz oder so geschrieben.

 

Die ahk_id scheint sich ebenfalls auf das Fenster zu beziehen. Sogar bei anderen Programmen: Bei eine Excel-Mappe haben noch nicht einmal die verschiedenen Tabellen unterschiedliche Nummern.

 

Wie kann man hier Bilder einfügen? Ich würde Dir gerne mal das Eigenschaftenfenster des Steuerelements (eigentlich ein übliches Textfeld) als Screenshot zeigen.

 

Viele Grüße von Meister Lampe



Meister Lampe
  • Members
  • 39 posts
  • Last active: Jan 15 2016 10:01 AM
  • Joined: 03 Apr 2013

Hallo!

 

Ich sehe gerade beim Stöbern, daß es ein ähnliches Problem bereits mindestens schon einmal gegeben hat und dieses über SetTimer und ControlGetFocus gelöst wurde.

Siehe im alten Forum hier: http://www.autohotke.../ntopic724.html

Allerdings vermag ich das nicht 1:1 umzudeuten und würde dazu gerne Euch die Eigenschaften meiner Editfelder/Steuerelemente zeigen.

Wie bekomme ich den Screenshot hier herein?

 

Viele Grüße von Meister Lampe



nnnik
  • Members
  • 1625 posts
  • Last active: Jan 24 2019 02:19 PM
  • Joined: 28 Jul 2012
(img)bildurl(/img)
Blpß halt mit eckigen klammern

Visit the new forum ahkscript.org.

http://ahkscript.org


Meister Lampe
  • Members
  • 39 posts
  • Last active: Jan 15 2016 10:01 AM
  • Joined: 03 Apr 2013

Hallo nnik!

 

Um eine Bild-URL einfügen zu können, muß ich das Bild ja erstmal hier irgendwo hochladen. Wie und wo?

Ich kann es zwar in das Editorfenster hineinkopieren, dann erhalte ich beim Versuch, den Beitrag zu posten aber die Meldung, daß ich nicht dazu berechtigt bin.

 

Viele Grüße von Meister Lampe



nnnik
  • Members
  • 1625 posts
  • Last active: Jan 24 2019 02:19 PM
  • Joined: 28 Jul 2012

Dropbox z.B.

So mach ich es zumindest.


Visit the new forum ahkscript.org.

http://ahkscript.org


Meister Lampe
  • Members
  • 39 posts
  • Last active: Jan 15 2016 10:01 AM
  • Joined: 03 Apr 2013

Hallo

 

 

Bei mir kommt, wenn ich die img-Tags reinsetze, die Meldung:

 

"An error occurred

You are not allowed to use that image extension on this community."

 

Viele Grüße von Meister Lampe



nnnik
  • Members
  • 1625 posts
  • Last active: Jan 24 2019 02:19 PM
  • Joined: 28 Jul 2012

Das ist ein bekannter bug.

Hmmm.

Poste einfach den direkten Link zu dem Bild.


Visit the new forum ahkscript.org.

http://ahkscript.org


Meister Lampe
  • Members
  • 39 posts
  • Last active: Jan 15 2016 10:01 AM
  • Joined: 03 Apr 2013

Hallo nnik!

 

So könnte es gehen:

https://www.hidrive....om/lnk/m0MAD7Yz

 

Und wenn Du den Screenshot dann vor Dir hast:

 

So sieht das Eigenschaftenfenster zu dem Eingabefeld, aus dem in die zweite Maske gesprungen werden soll, aus.

Die eigentliche Eingabemaske kann ich aus Datenschutzgründen leider nicht zeigen. Dies sind die Eigenschaften des Feldes, aus dem ich in die andere - in der Hierarchie dieser DB daruntergelegene - Maske springen möchte.

Analog zu diesen hier hat auch das nächste Feld (alle natürlich!) eine solche Aufstellung, nur daß der Name anders lautet und die ID dann 10133 ist (u.s.w.).

Könnte ich damit weiterkommen?

Viele Grüße von Meister Lampe



nnnik
  • Members
  • 1625 posts
  • Last active: Jan 24 2019 02:19 PM
  • Joined: 28 Jul 2012

Entweder du benutzt Andis Variante per A_CaretX / A_CaretY.

Oder du lässt dir ein Liste aler controls auf dem Fenster geben, und versuchst diese dann zu identifizieren z.B. per Koordinate.


Visit the new forum ahkscript.org.

http://ahkscript.org