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. CRouch

Beiträge von CRouch

  • Formular Check - roter Rahmen um Controls

    • CRouch
    • 1. September 2015 um 10:09

    Hi,

    also Problem a) konnte ich lösen indem ich die entsprechenden Controls im TAB einfach "OnTop" gesetzt habe. Jetzt verschwindet hier auch nichts mehr.
    Für b) habe ich noch keine schöne Lösung. Habe auch das Problem, dass bei Aufruf von "Unset" auf ein Control welches vorher noch keinen roten Rahmen erhalten hat, dass Programm abstürzt.
    Habt Ihr hierfür noch einen Vorschlag?

  • Formular Check - roter Rahmen um Controls

    • CRouch
    • 31. August 2015 um 16:26

    Also ich habe die Methode von Chesstiger mal integriert und muss sagen, sehr schick. Größentechnisch ändert das an meiner Executable gar nichts. Wahrscheinlich habe ich die GDI+ schon an anderer Stelle integriert.
    Zwei, bzw. eigentlich nur ein Probleme hindern mich allerdings daran diese Variante zu integrieren.
    a) Nach dem "zeichnen" der roten Rahmen, verschwinden alle Controls innerhalb eines TABs (selbst die, die nicht mit einem roten Rahmen versehen werden). Sie sind zwar noch da, aber erscheinen erst, wenn man mit dem Mauscursor darüber fährt. Ich verwende ISNAutoIt-Studio bzw. das FormStudio davon. Evtl. hat es auch damit zu tun. Ich werde mal versuchen dieses Phänomen im SciTE nachzustellen.
    b) Was sich zwar abfangen lässt, aber nicht ganz so schön an dieser Variante ist, dass der Rahmen bei z.B. wiederholter falscher Eingabe über den bereits gezeichneten Rahmen gelegt wird. Aber ehrlich gesagt habe ich hier noch nicht ganz soweit überlegt. Ich denke mal, man kann vor dem Check der Inputcontrols einfach alle roten Rahmen löschen und danach bei den entsprechend betroffenen Controls wieder einen neuen Rahmen zeichnen.

  • Formular Check - roter Rahmen um Controls

    • CRouch
    • 25. August 2015 um 15:52

    Mist, Entschuldigung. Den Hinweis von Kana die Label zu disablen habe ich gekonnt überlesen.
    Nun funktioniert es wie ich es mir vorgestellt habe. Danke!

    AutoIt
    #include <GUIConstants.au3>
    
    
    $gui = GUICreate("", 300, 200)
    GUISetBkColor (0xFFFFFF)
    $Input_Border1 =GUICtrlCreateLabel("", 9, 9, 192, 22)
    GUICtrlSetState(-1,$GUI_DISABLE)
    $Input_Border2 =GUICtrlCreateLabel("", 9, 39, 192, 22)
    GUICtrlSetState(-1,$GUI_DISABLE)
    $Input_Border3 =GUICtrlCreateLabel("", 9, 69, 192, 22)
    GUICtrlSetState(-1,$GUI_DISABLE)
    
    
    GUICtrlSetBkColor($Input_Border1, 0x666666)
    GUICtrlSetBkColor($Input_Border2, 0x666666)
    GUICtrlSetBkColor($Input_Border3, 0x666666)
    
    
    
    
    
    
    $Input1 = GUICtrlCreateInput("", 10,10,190, 20, -1, $WS_EX_TOOLWINDOW)
    GUICtrlSetBkColor($Input1, 0xDEDEDE)
    
    
    $Input2 = GUICtrlCreateInput("", 10,40,190, 20, -1, $WS_EX_TOOLWINDOW)
    GUICtrlSetBkColor($Input2, 0xDEDEDE)
    
    
    $Input3 = GUICtrlCreateInput("", 10,70,190, 20, -1, $WS_EX_TOOLWINDOW)
    GUICtrlSetBkColor($Input3, 0xDEDEDE)
    
    
    
    
    
    
    $Button = GUICtrlCreateButton("Absenden", 9, 100, 100, 21)
    GUISetState()
    
    
    
    
    While 1
        $msg = GUIGetMsg()
        Switch $msg
            Case $GUI_EVENT_CLOSE
                Exit
    		Case $Button
    			If GUICtrlRead($Input1) = "" Then
    				GUICtrlSetBkColor($Input_Border1, 0xFF0000)
    				;GUICtrlSetState($Input1, $GUI_FOCUS)
    			Else
    				GUICtrlSetBkColor($Input_Border1, 0x666666)
    				;GUICtrlSetState($Input1, $GUI_FOCUS)
    			EndIf
    
    
    			If GUICtrlRead($Input2) = "" Then
    				GUICtrlSetBkColor($Input_Border2, 0xFF0000)
    				;GUICtrlSetState($Input2, $GUI_FOCUS)
    			Else
    				GUICtrlSetBkColor($Input_Border2, 0x666666)
    				;GUICtrlSetState($Input2, $GUI_FOCUS)
    			EndIf
    
    
    			If GUICtrlRead($Input3) = "" Then
    				GUICtrlSetBkColor($Input_Border3, 0xFF0000)
    				;GUICtrlSetState($Input3, $GUI_FOCUS)
    			Else
    				GUICtrlSetBkColor($Input_Border3, 0x666666)
    				;GUICtrlSetState($Input3, $GUI_FOCUS)
    			EndIf
        EndSwitch
    WEnd
    Alles anzeigen
  • Formular Check - roter Rahmen um Controls

    • CRouch
    • 25. August 2015 um 15:08
    Zitat von BugFix

    Man, wo ist deine Kreativität? Da schreibst du rein: DARF NICHT LEER SEIN!  :whistling:

    Naja ganz so unkreativ bin ich nicht. Nur wenn ich die Controls auf GuiCtrlRead($xyzControl) <> "" teste, und bei einem Fehler danach Text reinschreibe, drückt der User danach auf senden und das Formular wird mit "Darf nicht Leer sein!" abgeschickt. Wie könnte denn ansatzweise eine DrawRect Variante mit GDI+ aussehen?

  • Formular Check - roter Rahmen um Controls

    • CRouch
    • 25. August 2015 um 13:42

    Und wenn das Inputfeld leer ist und der User soll darauf hingewiesen werden, dass das Feld leer ist? Keine, rote Schrift ;)

  • Formular Check - roter Rahmen um Controls

    • CRouch
    • 25. August 2015 um 13:15

    Danke erstmal für Deine Idee. Das Problem an dieser Variante ist, dass da Label vor dem Inputfeld liegt und das Inputfeld nicht mehr "anklickbar" ist. Wenn ich die Reihenfolge tausche (so wie im Beispiel) sieht das Ganze nicht mehr besonders schön aus, da ja nicht der Rand des Labels sondern das gesamte Label gefüllt wird.
    Vielleicht noch andere Ideen?

    AutoIt
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <ColorConstants.au3>
    
    
    
    
    $Form1 = GUICreate("Form1", 170, 77, 192, 124)
    $Input1 = GUICtrlCreateInput("Geben Sie eine Zahl ein", 16, 16, 137, 21)
    $Label1 = GUICtrlCreateLabel("", 14, 14, 141, 25)
    
    
    $Button1 = GUICtrlCreateButton("Bestätigen", 16, 40, 138, 25)
    
    
    GUISetState(@SW_SHOW)
    
    
    While 1
    	$nMsg = GUIGetMsg()
    	Switch $nMsg
    		Case $GUI_EVENT_CLOSE
    			Exit
    
    
    		Case $Button1
    			If Not Number(GUICtrlRead($Input1)) Then
    				GUICtrlSetBkColor($Label1, $COLOR_RED)
    			Else
    				GUICtrlSetBkColor($Label1, $CLR_NONE)
    			EndIf
    	EndSwitch
    WEnd
    Alles anzeigen
  • Formular Check - roter Rahmen um Controls

    • CRouch
    • 25. August 2015 um 11:31

    Hallo,
    ich möchte gerne vor dem "absenden" eines Formulars checken, ob die Inputfelder / Comboboxen ausgefüllt wurden. Wenn nicht, soll das entsprechende Element einen roten Rahmen bekommen. Ist der Feld ausgefüllt, soll der Rahmen wieder verschwinden.
    Gibt es hierfür bereits ein UDF oder wie könnte ich das ab einfachsten realisieren?

    Vielen Dank schonmal.

  • Resize auf UDF erzeugte Controls

    • CRouch
    • 27. November 2014 um 14:02

    Hey Danke,

    das werde ich mir mal genauer ansehen.

  • Resize auf UDF erzeugte Controls

    • CRouch
    • 27. November 2014 um 10:25

    Hi,
    ich habe einige UDF erzeugte Controls wie z.B.

    [autoit]

    Global $hTab = _GUICtrlTab_Create($hGUI, 10, 10, 1007, 730)

    [/autoit]

    Meinem Script habe ich

    [autoit]

    Opt("GUIResizeMode",$GUI_DOCKAUTO) ; auto resize all elements

    [/autoit]

    gegönnt.

    So werden alle mit Standardfunktionen erzeugten Controls beim Fenstermaximieren oder skalieren proportional geändert.
    Nur leider werden die UDF-erzeugten Controls nicht vergrößert. Ich habe bisher keine Möglichkeit gefunden dies zu realisieren.

    [autoit]

    GUICtrlSetResizing()

    [/autoit]

    funktioniert nicht mit UDF-erzeugten Controls.

  • Executable als childGUI in parentGUI mit RunAs

    • CRouch
    • 19. November 2014 um 11:03

    :rock: Funktioniert 1A. Vielen Dank für Deine Hilfe!

    Kleine Änderung noch in der Funktion "WM_MOVING".

    [autoit]


    Func WM_MOVING($hWndGUI, $MsgID, $WParam, $LParam)
    Local $aiGUI = WinGetPos($hGUI) ; Fensterposition der Parent GUI vor der Verschiebung
    Local $aiChild = WinGetPos($hChild) ; Fensterposition der Child GUI
    Local $tRect = DllStructCreate($tagRECT, $LParam) ; Fensterposition der Parent GUI nach der Verschiebung

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

    If WinExists($hChild) AND $hChild <> "" Then WinMove($hChild, '', $aiChild[0] - ($aiGUI[0] - $tRect.Left), $aiChild[1] - ($aiGUI[1] - $tRect.Top)) ; Neue Child GUI Position berechnen und verschieben

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

    Return $GUI_RUNDEFMSG
    EndFunc

    [/autoit]

    Da $hChild Global definiert ist, ist die Variable immer da, es steht halt nicht immer ein Handle zum entsprechenden Child drin. Deshalb noch in der If-Anweisung das

    Code
    $hChild <> ""

    .
    Sonst würde die Verschiebung der GUI alle Childs betreffen.

  • Executable als childGUI in parentGUI mit RunAs

    • CRouch
    • 18. November 2014 um 15:28

    Prima, Danke. Damit kann ich schonmal was anfangen. Ich kann schonmal das Parent vom Child aus manipulieren (z.B. disablen).

    Mein Child erscheint als "On-Top"-Gui auf dem Parent. Jetzt würde ich es gerne noch irgendwie realisieren, dass ich das Parent verschieben kann und das Child sich innerhalt des Parents mit bewegt.

  • Executable als childGUI in parentGUI mit RunAs

    • CRouch
    • 18. November 2014 um 11:22

    Hallo zusammen,

    ich habe eine mit Autoit erstellte EXE die eine childGUI($gchild) erzeugt und zur ParentGUI($_parent_ID) gehören soll.

    Code
    $gchild = GUICreate("Child", $GUIchildwidth, $GUIchildheight, (($_parent_width/2)-($GUIchildwidth/2)), (($_parent_height/2)-($GUIchildheight/2)), $WS_POPUPWINDOW, $WS_EX_MDICHILD + $WS_EX_ACCEPTFILES, $_parent_ID)

    Von meiner ParentGUI rufe ich die EXE mit RunAs auf und übergebe das Handle der ParentGUI ($_parent_ID) via Kommadozeilenparameter an die ChildGUI. Dort wird es auch korrekt übernommen.

    Wenn ich in der EXE nun z.B. einen Aufruf starte um das Parent zu disablen, passiert leider nichts.

    Code
    GUISetState(@SW_DISABLE, $_parent_ID)

    Wenn ich eine ChildGUI direkt in der ParentGUI erzeuge und interagiere geht alles wie ich möchte.

    Wie erreiche ich das auch mit einem "EXE-child" welches ich mittel RunAs aufrufe?

    (Wenn ich meinen Text jetzt so lese, klingt es irgendwie kompliziert. Ich hoffe Ihr versteht, wo mein Problem liegt. :D )

  • $WM_NOTIFY, TVN_SELCHANGEDW in TreeView meldet bei Mausclick zweimal

    • CRouch
    • 17. November 2014 um 10:12

    Danke an alle. Einexage´s Variante passt am besten für meine Anwendung.

  • $WM_NOTIFY, TVN_SELCHANGEDW in TreeView meldet bei Mausclick zweimal

    • CRouch
    • 14. November 2014 um 16:25

    Hi,

    Ich verwende die WM_NOTIFY message "TVN_SELCHANGEDW" um bei Änderung eines TreeView-Items eine beliebige Aktion durchzuführen. In meinem Beispiel eine MsgBox.
    Das Problem: Wird das Item mittels Tasteneingaben geändert, erscheint die MsgBox einmal. Wird das Item mittels linker Maustaste verändert, erscheint die MsgBox zweimal.

    Wie kann ich diese doppelte Ausführung verhindern?
    Danke schonmal für Eure Vorschläge.

    folgender Code:

    C
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <StructureConstants.au3>
    #include <listviewconstants.au3>
    #include <GUITreeView.au3>
    
    
    #region - GUI Create
    GUICreate('treeview',550,400)
    $TreeView1=GUICtrlCreateTreeView(10,10,200,380)
    $hTreeView = GUICtrlGetHandle($TreeView1)
    $item1=GUICtrlCreateTreeViewItem("Root Item 1",$TreeView1)
    $item2=GUICtrlCreateTreeViewItem("Root Item 2",$TreeView1)
    for $i=1 to 10
        GUICtrlCreateTreeViewItem("Child Item "&$i,$item1 )
        GUICtrlCreateTreeViewItem("Child Item "&$i,$item2 )
    Next
    $ListView1=GUICtrlCreateListView("test|test",220,10,320,380)
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 150)
    for $i=1 to 50
        GUICtrlCreateListViewItem("List Item"&$i&"|List Item "&$i&" Column 2",$ListView1)
    Next
    
    
    GUISetState()
    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
    #endregion
    
    
    #region - GUI SelectLoop
    While 1
        $msg = GUIGetMsg()
        Switch $msg
            Case  $GUI_EVENT_CLOSE
                Exit
        EndSwitch
    WEnd
    
    
    Func WM_NOTIFY($hWnd, $Msg, $wParam, $lParam)
        Local $tNMHDR, $IdFrom, $iCode
    
    
        $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
        $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
        $IdFrom = DllStructGetData($tNMHDR, "IdFrom")
        $iCode = DllStructGetData($tNMHDR, "Code")
            Switch $hWndFrom
                Case $hTreeView
                    Switch $iCode
                        Case $TVN_SELCHANGEDW                        ; <---------------
                            MsgBox($MB_SYSTEMMODAL,"","changed")
                    EndSwitch
        EndSwitch
    
    
        Return $GUI_RUNDEFMSG
    EndFunc
    Alles anzeigen
  • Temporäre AD User umschaltung möglich?

    • CRouch
    • 12. November 2014 um 13:53

    Okay. Verstehe. Ich werde es bei Gelegenheit mal ausprobieren. Danke.

  • Temporäre AD User umschaltung möglich?

    • CRouch
    • 12. November 2014 um 11:46

    Danke ersteinmal für die Vorschläge.

    @Tlotuade
    So müsste ich erste auf jedem Clientrechner ein Task anlegen. Das möchte ich nicht machen. Das Programm soll out of the Box laufen.

    @misterspeed
    Die Server-Client Idee Sache wäre ein saubere Sache ist aber leider nicht so leicht durchzusetzen, da ich nicht einfach ein von mir erstelltes Programm auf den Server stellen kann. Damit haben unsere Admins ein Problem :).
    Evtl. kann ich das später als Ausbaustufe mal durchsetzen.

    Die aktuelle Lösung, die ich gefunden habe ist etwas "buckelig" geworden, aber funktioniert.
    Ich habe ein extra script als .exe kompiliert. Dieses beinhaltet die Datenmanipulation auf dem Server.

    Wenn durch das Hauptprogramm so eine Manipulation durchgeführt werden soll, muss ein auf dem Netzlaufwerk schreibberechtigter AD-User seine Login-Daten eingeben und das Extrascript wird als RunAs ausgeführt.
    Das funktioniert prinzipiell recht gut, wäre da nicht das Problem, dass dieser User Rechte an der entsprechenden Stelle auf dem Rechner haben muss, wo das Zusatzscript liegt. D.h. ich schiebe das Zusatzprogramm in das @tempdir. Dann führe ich Runas mit @tempdir als working directory aus und lösche am Ende die Datei wieder aus dem @tempdir.

    Für ähnliche, aber weniger umständliche Lösungen bin ich durchaus noch offen :D

  • Temporäre AD User umschaltung möglich?

    • CRouch
    • 10. November 2014 um 17:14

    Hi,

    ich habe ein Script, welches auf einem Netzlaufwerk eine Datei manipulieren soll (Text schreiben). Den Zugriff auf diese Datei haben z.B. nur AD-User der Gruppe ADZUGRIFF.
    Mein Script wird nun von einem User auf einem lokalen AD-Rechner ausgeführt, der nicht dieser Gruppe ADZUGRIFF angehört. Somit weigert sich natürlich das Skript die entsprechende Datei zu ändern.
    Gibt es die Möglichkeit die Dateimaipulation (z.B. via FileWriteLine()) als ein anderer, berechtigter AD-User auszuführen oder muss ich da Umwege über z.B. RunAs gehen?

    Danke schonmal für Eure Antworten.

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™