Variable zu einem Gui Edit -> Zuweisung auf eine ObjektVar

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

Skywalker
Posts: 12
Joined: 14 Oct 2013, 15:28

Variable zu einem Gui Edit -> Zuweisung auf eine ObjektVar

23 May 2014, 03:49

Ich liebe mein Autohotkey und arbeitet mittlerweile auch erfolgreich mit Klassen!

Eine Frage habe ich bei der ich keine eigene Lösung erarbeiten konnte:

Ich habe eine Klasse die mit Klasse.edit() eine Gui öffnet mit der ich die Variablen der Klasse bearbeiten möchte.
Also so ungefähr - die interessante Zeile ist markiert:

Code: Select all

Klasse := new Klasse()
Klasse.edit()

MsgBox % Klasse.Var1
ExitApp

class Klasse
{
   Var1 := ""

   edit() {
		Gui,KlassenEditGui: Add,Edit,vthis.Var1,             ; die Zeile ist die interessante!
		Gui,KlassenEditGui: Add,Button,,Speichern
		
		Gui,KlassenEditGui: Show,,Edit der Klassenvariable
		WinWaitClose, Edit der Klassenvariable
		return

		KlassenEditGuiButtonSpeichern:
			Gui,KlassenEditGui: Submit
		return
            }
}
Leider geht das natürlich nicht - er tut sich schwer mit der Variable.
Hat jemand eine Idee wie ich meinen Haufen KlassenVariablen auf diese Weise setzen kann?
just me
Posts: 9495
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Variable zu einem Gui Edit -> Zuweisung auf eine ObjektV

23 May 2014, 04:40

Klassen/Objektvariablen kann man nicht als vVariablen in Guis verwenden. vVariablen erwarten hinter dem v einen Namen. Der Ausdruck This.Var1 liefert aber den Wert (und müsste auch per einzelnem % als Ausdruck gekennzeichnet werden). In Variablennamen ist der . nicht zulässig.
Skywalker
Posts: 12
Joined: 14 Oct 2013, 15:28

Re: Variable zu einem Gui Edit -> Zuweisung auf eine ObjektV

23 May 2014, 04:43

Vielen Dank für Deine Antwort - und natürlich für deine tolle Leistung darüber hinaus für AHK ! :ugeek:

Hast Du eventuell eine Idee über welchen Umweg ich es trotzdem umsetzen kann?
just me
Posts: 9495
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Variable zu einem Gui Edit -> Zuweisung auf eine ObjektV

23 May 2014, 04:51

Du kannst nur den Namen der Variablen innerhalb einer Klassenvariablen ablegen, aber das ist wahrscheinlich nicht, was Du willst:

Code: Select all

#NoEnv
Dummy := {Var1: "Edit"}
Gui, Margin, 100, 50
Gui, Add, Edit, % "w300 gSubEdit v" . Dummy.Var1, Edit Text!
Gui, Show, , Test
Return
GuiClose:
ExitApp
SubEdit:
GuiControlGet, Content, , % Dummy.Var1
ToolTip, %Content%
Return
HotKeyIt
Posts: 2364
Joined: 29 Sep 2013, 18:35
Contact:

Re: Variable zu einem Gui Edit -> Zuweisung auf eine ObjektV

23 May 2014, 05:03

Mit AutoHotkey_H ( -> letzte version AHK_H v1 ) ist so etwas möglich :)

Code: Select all

MeineKlasse := new Klasse()
MeineKlasse.edit()

MsgBox % MeineKlasse.Var1
ExitApp

class Klasse
{
  ; Returns the actual content of the variable
  __GET(key){
    If this.HasKey("`a" key){
      Alias(var,this["`a" key])
      return var
    } else return ""
  }
  ; Sets the content of actual variable
  __SET(key,value:=""){
    If this.HasKey("`a" key){
      Alias(var,this["`a" key])
      return var:=value
    } else return ""
  }
  Add(ByRef _1:="",ByRef _2:="",ByRef _3:="",ByRef _4:="",ByRef _5:="",ByRef _6:="",ByRef _7:="",ByRef _8:="",ByRef _9:="",ByRef _10:=""){
    static _AhkVar:="{Int64 ContentsInt64,Double ContentsDouble,PTR object},{char *mByteContents,LPTSTR CharContents},{UINT_PTR Length,Klasse.Add(_AHKVar) *AliasFor},{UINT_PTR Capacity,UINT_PTR BIV},BYTE HowAllocated,BYTE Attrib,BYTE mScope,BYTE Type,LPTSTR Name"
          ,var:=Struct(_AhkVar)
    while IsByRef(_%A_Index%) ; for each passed variable backup var pointer and the name + index in separate aray
      var[]:=getvar(_%A_Index%),ObjInsert(this,"`a" var.AliasFor.name,var.AliasFor["",""])
  }

   edit() {
    static Var1
        this.Add(var1)
        Gui,KlassenEditGui: Add,Edit,vVar1,             ; die Zeile ist die interessante!
        Gui,KlassenEditGui: Add,Button,Default,Speichern
        
        Gui,KlassenEditGui: Show,,Edit der Klassenvariable
        WinWaitClose, Edit der Klassenvariable
        return

        KlassenEditGuiButtonSpeichern:
            Gui,KlassenEditGui: Submit
        return
   }
}
Ansonsten kann man das auch so umsetzen:

Code: Select all

MeineKlasse := new Klasse()
MeineKlasse.edit()

MsgBox % MeineKlasse.Var1
ExitApp

class Klasse
{
  __Get(key){
    return this.Edit(key)
  }
   edit(key:="") {
    static Var1
        If key
          return %key%
        Gui,KlassenEditGui: Add,Edit,vVar1,             ; die Zeile ist die interessante!
        Gui,KlassenEditGui: Add,Button,Default,Speichern
        
        Gui,KlassenEditGui: Show,,Edit der Klassenvariable
        WinWaitClose, Edit der Klassenvariable
        return

        KlassenEditGuiButtonSpeichern:
            Gui,KlassenEditGui: Submit
        return
   }
}
Vergiss nicht, Klasse ist auch nur ein Object den du nicht mit Klasse := ... überschreiben solltest.
Skywalker
Posts: 12
Joined: 14 Oct 2013, 15:28

Re: Variable zu einem Gui Edit -> Zuweisung auf eine ObjektV

23 May 2014, 09:33

Hallo und vielen Dank an just me und hotkeyit 8-)

Hotkeyit: Dein Konzept leuchtet mir ein und habe es verstanden - ich glaube so kann ich es wirklich lösen.
Nur ein kleiner Hint bei dem ich noch keine richtige Rückgabe bekomme - bei dem Beispiel bekomme ich an dieser Stelle:

Code: Select all

        If key
          return %key%
als Rückgabewert immer "Var1"
Also den Inhalt von "key", nicht von der gewollten Variablen "Var1"

Gibt es sowas wie

Code: Select all

EnvGet, OutputVar, EnvVarName
für Nicht-Env-Variablen?
Damit dürfte es dann gehen, oder?

Lieben Dank für die Hilfe vorab!
just me
Posts: 9495
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Variable zu einem Gui Edit -> Zuweisung auf eine ObjektV

23 May 2014, 11:46

Wenn es ausreicht, dass über Klassenvariable auf Werte aus dem GUI zurückgegriffen werden kann, geht es auch so:

Code: Select all

#NoEnv
NeueKlasse := new Klasse()
NeueKlasse.Edit()
MsgBox % NeueKlasse.Var1
ExitApp

Class Klasse {
   Edit() {
      Gui, KlassenEditGui: New
      Gui, KlassenEditGui: Add, Edit, hwndHED ; die Zeile ist die interessante!
      Gui, KlassenEditGui: Add, Button, , Speichern

      Gui, KlassenEditGui: Show, , Edit der Klassenvariable
      WinWaitClose, Edit der Klassenvariable
      Return

      KlassenEditGuiButtonSpeichern:
         GuiControlGet, Content, , %HED%
         This.Var1 := Content
      Return
   }
}
... oder so:

Code: Select all

#NoEnv
NeueKlasse := new Klasse()
NeueKlasse.Edit("Var2")
MsgBox % NeueKlasse.Var2
ExitApp

Class Klasse {
   Edit(VarName) {
      Gui, KlassenEditGui: New
      Gui, KlassenEditGui: Add, Edit, hwndHED ; die Zeile ist die interessante!
      Gui, KlassenEditGui: Add, Button, , Speichern

      Gui, KlassenEditGui: Show, , Edit der Klassenvariable
      WinWaitClose, Edit der Klassenvariable
      Return

      KlassenEditGuiButtonSpeichern:
         GuiControlGet, Content, , %HED%
         This[VarName] := Content
      Return
   }
}
Skywalker
Posts: 12
Joined: 14 Oct 2013, 15:28

Re: Variable zu einem Gui Edit -> Zuweisung auf eine ObjektV

26 May 2014, 00:53

Großes Kino - danke für die tolle Hilfe!

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 29 guests