1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. name22

Beiträge von name22

  • Frage zur GUI

    • name22
    • 30. Mai 2012 um 17:00

    Zuerst erstellst du die HauptGUI (mit dem Eingabefeld) und schaltest sie mit GUISetState sichtbar. Dann erstellst du die 6 anderen GUIs ganz nach deinen wünschen, aber benutzt noch nicht GUISetState. Dadurch sind sie nicht von Anfang an sichtbar.
    Dann fragst du den Wert des Eingabefelds in der Hauptschleife des Scripts ab und schaltest ggf. die GUIs per GUISetState an/aus.
    Hier noch ein Beispiel (mit Arrays, der Übersicht wgen):

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $iGUI_Count = 6 ;Number of (sub)GUIs

    [/autoit] [autoit][/autoit] [autoit]

    $hWnd = GUICreate("Main", 400, 200)
    $cInput = GUICtrlCreateInput("", 10, 10, 60, 20)
    $cButton = GUICtrlCreateButton("OK", 80, 10, 60, 20)
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    Global $aGUIs[$iGUI_Count][2]
    For $i = 0 To $iGUI_Count - 1
    $aGUIs[$i][1] = False ;Visibilty state
    $aGUIs[$i][0] = GUICreate("Sub " & $i + 1, 200, 100)
    GUICtrlCreateLabel("GUI Nr. " & $i + 1, 10, 10, 80, 20)
    Next

    [/autoit] [autoit][/autoit] [autoit]

    While True
    $aMsg = GUIGetMsg(1)
    Switch $aMsg[1]
    Case $hWnd ;If message comes form main Window...
    Switch $aMsg[0]
    Case $GUI_EVENT_CLOSE
    Exit
    Case $cButton
    $iGUI = GUICtrlRead($cInput)
    If StringIsInt($iGUI) And $iGUI >= 0 And $iGUI <= $iGUI_Count Then
    $aGUIs[$iGUI - 1][1] = True
    GUISetState(@SW_SHOW, $aGUIs[$iGUI - 1][0])
    EndIf
    EndSwitch
    Case Else ;If message comes form one of the sub Windows...
    For $i = 0 To $iGUI_Count - 1
    If $aGUIs[$i][0] = $aMsg[1] Then ExitLoop
    Next
    $iGUI = $i ;Index of GUI in $aGUIs

    [/autoit] [autoit][/autoit] [autoit]

    Switch $aMsg[0]
    Case $GUI_EVENT_CLOSE
    $aGUIs[$iGUI][1] = False
    GUISetState(@SW_HIDE, $aMsg[1])
    EndSwitch
    EndSwitch
    WEnd

    [/autoit]
  • Wert in .txt suchen und die Zeile zurückgeben

    • name22
    • 30. Mai 2012 um 12:09

    Wie wärs denn so?

    [autoit]

    $sDataRaw = FileRead(@ScriptDir & "\YourFile.txt")
    $aProblem = StringRegExp($sDataRaw, "(Problem: .+)", 3)

    [/autoit][autoit][/autoit][autoit]

    ConsoleWrite($aProblem[0])

    [/autoit]


    Oder wenn du nur den Wert nach "Problem:" haben willst:

    [autoit]

    $sDataRaw = FileRead(@ScriptDir & "\YourFile.txt")
    $aProblem = StringRegExp($sDataRaw, "Problem: (.+)", 3)

    [/autoit][autoit][/autoit][autoit]

    ConsoleWrite($aProblem[0])

    [/autoit]


    Wenn du uns jetzt noch sagst, wie die anderen Werte aussehen können, und wo genau sie stehen, dann kannst du die anderen Werte auch gleich mit StrinGRegExp zuverlässig auslesen. ;)

  • stayawayknight hat Geburtstag!

    • name22
    • 30. Mai 2012 um 10:15

    Alles Gute zum 17ten BleibWegRitter. :D Eine schöne Feier mit allem drum und dran wünsch ich dir. ;)

  • Gdiplus und string

    • name22
    • 29. Mai 2012 um 16:42

    Das ist eigentlich relativ simpel. Als erstes brauchst du einen Ort wo die Zeichnungen gespeichert werden, ohne dass der Benutzer etwas davon sieht. Also eine Bitmap im Arbeitsspeicher.
    Die erstellst du so:

    [autoit]

    $hBitmap = _GDIPlus_BitmapCreateFromGraphics($iWidth, $iHeight, $hGraphics) ;$iWidth=Breite der GUI, $iHeight=Höhe der GUI, $hGraphics=Handle zumGraphics-Object

    [/autoit]


    Damit du auch in diese Bitmap zeichnen kannst, benötigst du ein Graphics-Object, dass mit der Bitmap verbunden ist. Das bekommst du so:

    [autoit]

    $hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)

    [/autoit]

    Sobald du diese beiden Objekte erzeugt hast, zeichnest du alles was nachher in die GUI kommen soll in die Bitmap hinein (einfach $hBuffer anstatt $hGraphics bei allen Zeichenoperationen verwenden). Nachdem du alles dort hinein gezeichnet hast, muss das ganze ja auf die GUI, da kommt die Funktion _GDIPlus_GraphicsDrawImageRect ins Spiel:

    [autoit]

    _GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap, 0, 0, $iWidht, $iHeight)

    [/autoit]

    Diese Funktion zeichnet einfach die Bitmap auf die GUI. Diese Funktion musst du jedesmal aufrufen, wenn du etwas am Inhalt der Bitmap geändert hast, und das auf der GUI sehen möchtest. Außerdem kommt die Funktion in der selben Form auch in die _ReDraw Funktion die ich in meinem letzten Post angesprochen hatte. Dadurch wird die Bitmap immer dann neu auf die GUI gemalt wenn das Fenster eine WM_PAINT Nachricht erhält (also wenn das Fenster verdeckt wurde).

    Du kannst dir zusätzlich noch das GDI+ Tutorial von Ubuntu anschauen. Einfach mal die Suchfunktion benutzen.

  • Gdiplus und string

    • name22
    • 29. Mai 2012 um 14:12
    Zitat

    Zu String. ich hab das Problem ich habe den String "100 - 30" und von diesem
    String will ich das Ergebnis (also 70). Habs scho mit int probiert, jedoch erfolg los.


    Es gibt die Funktion Execute() die das für dich erledigen könnte, allerdings sollte man immer beachten, dass es so sehr einfach für den Benutzer ist Code in das Programm einzuschleusen.

    Zitat

    Wie kann man die GDIPplusObjecte neu zeichnen lassen,


    _GDIPlus_GraphicsClear() und dann alles neu zeichnen ;).

    Zitat

    da immer wen man das fenster teilweise auserhalb des desktop schiebt,
    die gdi sachen verschwinden.


    In diesem Fall empfehle ich dir die WM_PAINT Nachricht des Fensters zu registrieren.

    [autoit]

    GUIRegisterMsg($WM_PAINT, "_ReDraw")

    [/autoit]


    In der Funktion _ReDraw (oder wie auch immer du diese Funktion nennen willst) musst du nun den Code platzieren der den gesamten Inhalt der Grafik neu zeichnet.

    Zitat

    Auserdem würd ich noch gern wissen wie man mehrere bilder zu einem
    object zusammen fasst, das diese auch gleichzeitig gezeichnet werden und nicht
    nacheinander.


    Ich verstehe nicht ganz was du willst... Hast du vor so etwas wie einen Backbuffer zu benutzen? Also eine Bitmap die mit dem ganzen visuellen Zeugs vollgezeichnet wird, das du nachher auf der GUI haben willst, die du nach Abschluss der Zeichenoperationen auf die GUI zeichnest? Selbst falls du etwas anderes meinst, würde ich dir empfehlen einen Backbuffer zu benutzen. Erstens weil dadurch ein "flackern" während des Zeichnens verhindert wird, zweitens weil du dann in der Funktion _ReDraw nur die alte Bitmap auf die Grapfik der GUI zeichnen musst ohne alles andere neu zu malen.

  • AHK Funktionen zu Autoit

    • name22
    • 28. Mai 2012 um 18:12

    Ich bin mir nicht so ganz sicher ob das mit unseren Forenregeln vereinbar ist. :S

  • Zahl erhöhen

    • name22
    • 28. Mai 2012 um 12:10

    ... Wenn du es gut findest, dass die Funktionsfähigkeit deiner Scripts vom Zufall abhängt und nicht von deinen Skills :rolleyes: .

  • Herzlichen Glühstrumpf minx, manuel6000 & GtaSpider!

    • name22
    • 27. Mai 2012 um 00:24

    Happy Birthday euch allen :thumbup: !
    Feiert schön und lassts euch gut gehen.

  • Zahl erhöhen

    • name22
    • 26. Mai 2012 um 23:22

    Was hat das Local Static außerhalb der Funktion verloren :pinch: ... Alle Variablen die außerhalb von Funktionen deklariert werden sind ausschließlich Global..
    So funktioniert das zwar auch, aber da hattest du mehr oder weniger einfach nur Glück...
    Aber das mit StringFormat ist ja wohl völliger Blödsinn ^^. StringFormat gibt den entsprechend formatierten Wert zurück. Das heißt es muss so aussehen:

    [autoit]

    HotKeySet("k","_1")

    [/autoit][autoit][/autoit][autoit]

    While 1
    Sleep(100)
    WEnd

    [/autoit][autoit][/autoit][autoit]

    Func _1()
    Local Static $zahl = 0
    ConsoleWrite(StringFormat("%02d", $zahl))
    $zahl = $zahl + 1
    EndFunc

    [/autoit]


    (So meinte m-obi das mit Static)

  • Happy Birthday SEuBo und anno2008

    • name22
    • 26. Mai 2012 um 22:44

    Wünsche euch alles gute zum Geburtstag SEuBo und anno2008! :thumbup:

  • Zahl erhöhen

    • name22
    • 26. Mai 2012 um 22:17
    Zitat

    Vielleicht für einen Zähler, der immer 2-Stellig anzeigen soll?^^


    Sehr witzig :rolleyes: ..
    @bbm Du suchst vermutlich:

    [autoit]

    StringFormat("%02d", $zahl)

    [/autoit]
  • Zahl erhöhen

    • name22
    • 26. Mai 2012 um 22:05

    Verzeih die Nachfrage, aber wozu braucht man sowas?

  • $GUI_HIDE ansprechbar machen?

    • name22
    • 26. Mai 2012 um 22:01
    Zitat

    So, jetzt will ich die Bilder von den Controls fix im Hintergrund einbauen


    Und seit wann kann ich bitte Hellsehen? Genau das habe ich gefragt. Ich wusste bis jetzt noch nicht mal, dass du einen Hintergrund in deiner GUI hast. Woher auch?
    Das sollte klappen.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $sPathPic = FileOpenDialog("Open Picture File", "", "Images (*.jpeg;*.gif;*.bmp)")

    [/autoit] [autoit][/autoit] [autoit]

    $hWnd = GUICreate("Test", 200, 100)
    $cPic_BG = GUICtrlCreatePic(, 0, 0, 200, 100, 0x08000000)
    $cClick = GUICtrlCreateLabel("", 0, 0, 100, 50)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    While True
    Switch GUIGetMsg()
    Case $cClick
    MsgBox(64, "Event", "Area clicked.")
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    [/autoit]
  • $GUI_HIDE ansprechbar machen?

    • name22
    • 26. Mai 2012 um 21:17
    Zitat

    na ich hab mir gedacht dass ich das Bild fix einbaue.


    Wie denn? Pic Controls unterstützen das von Haus aus nicht, und GDI+ willst du nicht benutzen...
    Sonst mach ich halt willkürlich Vorschläge die dann ggf. nicht funktionieren.

  • $GUI_HIDE ansprechbar machen?

    • name22
    • 26. Mai 2012 um 20:24

    Wie erzeugst du denn dann das PNG Bild in deiner GUI wenn nicht mit GDI+?

  • For...To...Next abbrechen

    • name22
    • 26. Mai 2012 um 18:10

    Vielleicht wegen dem Plugin, dass zu der Zeit noch geöffnet ist...
    Und wenn du den GUIOnEventMode aktiviert hast, ists damit nicht getan, du musst ihn auch verwenden. ^^ Such doch mal in der Hilfe nach OnEvent Mode und schau dir den Befehl GUISetOnEvent bzw. GUICtrlSetOnEvent an.

  • Standardbrowser im Script verwenden

    • name22
    • 26. Mai 2012 um 17:30
    Zitat

    aber ihn dadurch ansprechen zu können ist nur über Controls möglich (ControlSend, ControlClick, ...)


    Selbst das ist bei vielen (z.B. Firefox) nur stark begrenzt möglich. Firefox rendert alles mit der Gecko-Engine und die erzeugt keine von AutoIt ansprechbaren Controls.

  • Standardbrowser im Script verwenden

    • name22
    • 26. Mai 2012 um 15:58
    Zitat

    Ja hast eigentlich recht, aber ich hätte es schöner gefunden wenn man alle Bowser damit ansprechen könnte...


    Du suchst wohl nach der eierlegenden Wollmilchsau... Alle relevanten Browser stammen von komplett verschiedenen, konkurrierenden Entwicklern. Wie sollte es möglich sein die alle mit der selben Methode anzusprechen?
    Letztendlich kommt es aber immer darauf an was genau du machen willst. Erklär uns mal was du konkret vorhast, dann kann man schon eher sagen ob das geht.

  • Standardbrowser im Script verwenden

    • name22
    • 26. Mai 2012 um 15:10

    Wenn du den Browser in deine GUI einbetten willst, wirst du wohl beim IE bleiben müssen... Per ShellExecute lässt sich nur eine beliebige URL mit dem Standardbrowser öffnen. Der wird aber als neues Fenster geöffnet und lässt sich auch nicht ohne weiteres ansteuern wenn dein Script nicht speziell dafür ausgelegt ist (z.B. Ansteuerung von IE mit Objekten, oder FF mit FF.au3 und MozRepl). Allerdings ist der IE auf beinahe jedem Windows System vorhanden, somit sollte das doch eigentlich kein Problem darstellen, wenn du nichts allzu exotisches vorhast.

  • Text Link funktioniert nicht richtig

    • name22
    • 26. Mai 2012 um 00:17

    Alternativ könnte man auch AdlibRegister("_link", 100) zwischen #endregion und der While-Schleife einfügen. Dann wird die Funktion _link nicht so oft aufgerufen.

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™