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

Beiträge von BugFix

  • Ini: Alle Sectionen nach Wert durchsuchen

    • BugFix
    • 30. April 2013 um 17:40

    Auch mit der INI geht das recht einfach:

    [autoit]


    $SerNum = "YLS01123548"
    $SearchPattern = "\[(\w+)\]\r\nuser=[\w]+\r\nip=[\d\.]+\r\n\w+=" & $SerNum

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

    ;~ $sRead = FileRead('Deine.INI')

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

    $sRead = _
    "[Computername_A]" & @CRLF & _
    "user=xyz" & @CRLF & _
    "ip=10.1.0.2" & @CRLF & _
    "ser_moni=YLS01123548" & @CRLF & _
    @CRLF & _
    "[Computername_B]" & @CRLF & _
    "user=abc" & @CRLF & _
    "ip=10.1.0.3" & @CRLF & _
    "ser_moni=YLS01123666" & @CRLF

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

    $aRet = StringRegExp($sRead, $SearchPattern, 3)
    ConsoleWrite($aRet[0] & @LF)

    [/autoit]
  • Custom Message Box

    • BugFix
    • 30. April 2013 um 14:47

    Btw.
    Dieses in deinem Code

    [autoit]

    Local $Useopt = Opt("GUIOnEventMode")
    Opt("GUIOnEventMode", 0)

    [/autoit]

    ist identisch mit diesem

    [autoit]

    Local $Useopt = Opt("GUIOnEventMode", 0)

    [/autoit]


    Wird eine Option gesetzt kommt als Rückgabewert immer der vorherige Optionswert, somit brauchst du bei der Zuweisung den Return nur aufzufangen. ;)

  • Listview Spaltennamen auslesen

    • BugFix
    • 28. April 2013 um 08:59

    Mit diesen Funktionen geht das:

    [autoit]

    _GUICtrlListView_GetHeader($hWnd)
    _GUICtrlHeader_GetItemText($hWnd, $iIndex)

    [/autoit]
  • Mein INPUT RECORD struct stimmt unter 64bit wohl nicht - bitte mal drüberschauen

    • BugFix
    • 24. April 2013 um 17:58

    Ich würde nur $tagKEYEVENTREC in diese Markierung setzen, eben um die getrennte Struktur zu markieren.

  • Mein INPUT RECORD struct stimmt unter 64bit wohl nicht - bitte mal drüberschauen

    • BugFix
    • 24. April 2013 um 16:51

    Bette deine Struktur in "struct; ....; endstruct". Wenn ich mich recht erinnere ist das das häufigste Problem bei Nutzung von 64Bit.

  • Timer in einer Statusbar anzeigen und hochzählen lassen.

    • BugFix
    • 23. April 2013 um 05:56

    Wenn du die Zeit anzeigen möchtest, warum verwendest du nicht die Makros?
    Da du die Variable $sTime nicht speicherst, hast du keinen Vergleichswert (Du erstellst die Variable bei jedem Aufruf neu). Und du setzt in der Statusbar die Variable $cdeUhr ohne dass deren Wert die Zeit annimmt.

    Ich würde das so lösen:

    [autoit]


    Func Timer()
    Local $sTime = @Hour & ":" @Min & ":" & @Sec
    Local Static $sLastTime = $sTime
    If StringRight($sLastTime, 2) <> @Sec Then
    $sLastTime = $sTime
    _GUICtrlStatusBar_SetText($cdeStatus, $sTime, 2)
    EndIf
    EndFunc ;==>Timer

    [/autoit]
  • Aktuelless User Verzeichnis

    • BugFix
    • 22. April 2013 um 08:38

    Hättest doch einfach mal die Makros anschauen müssen - steht direkt dort drin:

    [autoit]

    @HomeDrive & @HomePath

    [/autoit]
  • _IsPressed() | 1. Parameter Problem

    • BugFix
    • 21. April 2013 um 18:13

    Ist natürlich ein grenzwertiges Thema und ich denke, das sollte nicht allzusehr vertieft werden.
    Nur ein abschließender Tipp: Schau dir doch mal die Funktion _Ispressed direkt an (also was sie eigentlich tut). Das sollte dich zur Lösung deines Problems bringen.

  • Text in Labels verändern

    • BugFix
    • 19. April 2013 um 13:43

    Ich verwende in der Regel als Sprachdateien in INI-Form. Die Lösung sieht damit so aus.

  • Text in Labels verändern

    • BugFix
    • 19. April 2013 um 12:16

    Dann zeige bitte mal, wie du in die DB speicherst. Das Query allein gibt keine Auskunft über den Inhalt. Speicherst du wirklich die ID des jeweiligen Labels?

  • Text in Labels verändern

    • BugFix
    • 19. April 2013 um 09:23

    Du mußt natürlich auch jedem Label den neuen Wert zuweisen [ GuiCtrlSetData($Label, 'NeuerText') ], ich sehe nur eine Zuweisung für die Combobox.

  • LVM_HITTEST ohne Erfolg

    • BugFix
    • 18. April 2013 um 14:38

    Raupi, deinen Post dazwischen hatte ich glatt übersehen. :whistling:
    Habe aber jetzt mal deinen Tipp umgesetzt und zusätzlich erweitert auf Prüfung De-/Aktivierung einer Checkbox per Spacebar.
    Nun ist es so, wie ich es wollte - fein. 8o

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>
    #include <ListViewConstants.au3>
    #include <StructureConstants.au3>
    #include <WindowsConstants.au3>

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

    $hGui = GUICreate('test')
    $hListView = GUICtrlCreateListView('Spalte1|Spalte2', 10, 10, 300, 200, BitOR($LVS_SHOWSELALWAYS,$LVS_REPORT), BitOR($LVS_EX_CHECKBOXES,$LVS_EX_FULLROWSELECT))
    _GUICtrlListView_SetColumnWidth($hListView, 0, 146)
    _GUICtrlListView_SetColumnWidth($hListView, 1, $LVSCW_AUTOSIZE_USEHEADER)
    For $i = 1 To 10
    GUICtrlCreateListViewItem('Zeile ' & $i & ' Spalte 1|Zeile ' & $i & ' Spalte 2', $hListView)
    Next

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

    GUISetState()
    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

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

    Do
    Until GUIGetMsg() = -3

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

    Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView
    $hWndListView = $hListView
    If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView)
    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iCode = DllStructGetData($tNMHDR, "Code")
    If $hWndFrom = $hWndListView Then
    Switch $iCode
    Case $LVN_ITEMCHANGED ; == Item geändert
    Local $aHit = _GUICtrlListView_HitTest($hWndListView)
    If $aHit[0] > -1 And $aHit[4] Then
    ConsoleWrite('Klick-Index ' & $aHit[0] & ' Check: ' & _GUICtrlListView_GetItemChecked($hWndListView, $aHit[0]) & @LF)
    EndIf
    Case $LVN_KEYDOWN ; == Checkbox per Spacebar De-/Aktiviert
    Local $tInfo = DllStructCreate($tagNMLVKEYDOWN, $ilParam)
    If DllStructGetData($tInfo, "VKey") = 32 Then
    Local $iIndex = _GUICtrlListView_GetSelectedIndices($hWndListView)
    ConsoleWrite('Space-Index ' & $iIndex & ' Check: ' & Not _GUICtrlListView_GetItemChecked($hWndListView, $iIndex) & @LF)
    EndIf
    EndSwitch
    EndIf
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY

    [/autoit]
  • LVM_HITTEST ohne Erfolg

    • BugFix
    • 17. April 2013 um 21:31

    Danke :thumbup:
    Nachdem ich deinen Code gelesen habe ist mir das sonnenklar und ich frage mich, wieso ich das nicht ebenso gelöst habe. :rofl:

  • LVM_HITTEST ohne Erfolg

    • BugFix
    • 17. April 2013 um 19:13

    Hi,

    ich suche nach einer Möglichkeit direkt mit dem Klick (oder De-/Aktivieren per Spacebar) festzustellen ob eine Checkbox im Listview-Item gecheckt ist oder nicht. Dazu ist der Index des Listview-Item erforderlich.
    Wenn das Item selektiert ist, ist das kein Problem - aber ein Klick auf eine Checkbox eines nicht selektierten Item führt nicht zu dessen Selektion.
    Laut MSDN soll mit Senden der "LVM_HITTEST" Message der Index des Items, in dessen Bereich geklickt wurde ermittelt werden können. Ich habe das in folgendem Bsp.Skript mal nachvollzogen - aber als Index erhalte ich immer 0.

    Bitte keine evtl. Lösungsvorschläge, wie man das anders lösen könnte (es gibt keine wirklich sinnvollen ;) - nur riesig aufgeblähte Workarounds über sechs Ecken).

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>
    #include <ListViewConstants.au3>
    #include <StructureConstants.au3>
    #include <WindowsConstants.au3>

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

    $hGui = GUICreate('test')
    $hListView = GUICtrlCreateListView('Spalte1|Spalte2', 10, 10, 300, 200, BitOR($LVS_SHOWSELALWAYS,$LVS_REPORT), BitOR($LVS_EX_CHECKBOXES,$LVS_EX_FULLROWSELECT))
    _GUICtrlListView_SetColumnWidth($hListView, 0, 146)
    _GUICtrlListView_SetColumnWidth($hListView, 1, $LVSCW_AUTOSIZE_USEHEADER)
    For $i = 1 To 10
    GUICtrlCreateListViewItem('Zeile ' & $i & ' Spalte 1|Zeile ' & $i & ' Spalte 2', $hListView)
    Next
    GUISetState()
    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

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

    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

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

    Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView
    $hWndListView = $hListView
    If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView)
    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    If $hWndFrom = $hWndListView Then
    Switch $iCode
    Case $LVN_ITEMCHANGED ; == Item geändert
    Local $old = Opt('MouseCoordMode', 2), $aPos = MouseGetPos(), $tPOINT = DllStructCreate($tagPOINT)
    Opt('MouseCoordMode', $old)
    DllStructSetData($tPOINT, 1, $aPos[0])
    DllStructSetData($tPOINT, 2, $aPos[1])
    Local $tITEM = DllStructCreate('struct; int; endstruct'), $tLVHITTESTINFO = DllStructCreate($tagLVHITTESTINFO)
    DllStructSetData($tLVHITTESTINFO, 1, DllStructGetPtr($tPOINT)) ; == Mauskoordinaten im Client
    DllStructSetData($tLVHITTESTINFO, 'Flags', $LVHT_ONITEMSTATEICON) ; == Flag für "The position is over the state image of a list-view item"
    DllStructSetData($tLVHITTESTINFO, 'Item', DllStructGetPtr($tITEM)) ; == Rückgabewert Listview Item-Index
    ; == LVM_HITTEST Message senden ( http://msdn.microsoft.com/en-us/library/…v=vs.85%29.aspx )
    Local $ret = DllCall("user32.dll", "lresult", "SendMessageW", "hwnd", $hGui, "uint", $LVM_HITTEST, "wparam", 0, "lparam", DllStructGetPtr($tLVHITTESTINFO))
    ;~ ConsoleWrite($ret[0] & ' err: ' & @error & @LF)
    ConsoleWrite('Index changed = ' & DllStructGetData($tITEM, 1) & @LF)
    EndSwitch
    EndIf
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY

    [/autoit]
  • PeX - ein neues flexibles Textsatzsystem

    • BugFix
    • 17. April 2013 um 13:41

    Irgendwas an deinem PDF-Format ist faul. Das "PDF-XChange Viewer Netscape Gecko Plugin" zeigt nur eine leere Seite. :S

  • StringRegExp Tutorial / Reguläre Ausdrücke in AutoIt

    • BugFix
    • 16. April 2013 um 17:09

    Also das mit Schnittmengen zu vergleichen ist kein optimaler Vergleich.
    Das Pattern selbst stellt erst mal gar keine Menge dar und kann insofern auch keine Schnittmengen bilden.
    Das Pattern ist ein Suchmuster - und String(bestandteile), die mit dem Suchmuster übereinstimmen bilden den Match. Mehr Erklärung bedarf es doch gar nicht. :rolleyes:

  • DLLCall in/aus undokumentierter DLL

    • BugFix
    • 15. April 2013 um 09:46
    Zitat von Romboman

    Die _WinAPI_GetFontResourceInfo() ist mir bekannt, sie hat allerdings einen ganz großen Nachteil...
    sie liefert den Schriftgrad des Fonts in Anhängigkeit der Regionaleinstellung zurück


    Versuch doch folgende Lösung: Switche die Regionaleinstellung für die Dauer der Abfrage auf US / EN. Dann sollte das identsich sein. Die Regionaleinstellungen findest du im Schlüssel "HKCU\Control Panel\International". Einfach mal per Hand wechseln und die Änderungen in den Werten dann als Parameter für das automatische Switchen verwenden.

  • Pipeline DLL - die einfachste Art der Prozess-Kommunikation

    • BugFix
    • 15. April 2013 um 09:34

    Wenn du schon "Push" und "Pop" willkürlich gewählt hast, dann wär es doch sinnvoll dort funktionell bedingte Namen zu verwenden.
    Also .Receive und .Send :whistling:

  • DirCopywithProgress.au3

    • BugFix
    • 15. April 2013 um 09:26

    Mal ein paar Hinweise:
    - Variablennamen sollten zwar aussagekräftig - aber auch lesbar sein. Den Funktionsnamen als Bestandteil der Variblennamen zu verwenden ist hier kontraproduktiv. Kurz und prägnant, gern auch mit Notationskürzel vorweg in der Form: "$sQuelle, $sZiel, $iIDProgress".
    - Du berechnest in deiner Schleife in jedem Durchlauf aufs neue die Schrittweite zum Setzen der Progressbar. Das ist zwar unproblematisch für das Zeitverhalten (da ja sowieso eine Berechnung stattfindet) aber ich persönlich finde es besser lesbar, wenn die Schrittweite extra definiert wird. Statt

    [autoit]

    GUICtrlSetData ($DirCopywithProgress_Progressbar, 100 / $DirCopywithProgress_DirFileRekursiv[0][0] * $DirCopywithProgress_Anzahl_1)

    [/autoit]

    besser

    [autoit]

    ; vor der Schleife
    $iStep = 100 / $DirCopywithProgress_DirFileRekursiv[0][0]
    ; in der Schleife
    GUICtrlSetData ($DirCopywithProgress_Progressbar, $iStep * $DirCopywithProgress_Anzahl_1)

    [/autoit]


    - Verwende NIE _ArrayAdd in einer Funktion, die durchaus tausende male diese Funktion aufrufen kann. Denn das ist eine totale Performancebremse. Besser: Array vordefinieren in vorhersehbaren Größenordnungen ( z.B. 100 ) und einen Zähler extra führen. Wenn der Zähler die Vorgabegröße erreicht hat, erst dann das Array um den gleichen Wert vergrößern. Am Ende dann mit ReDim und dem Zählerwert auf die tatsächliche Inhaltsgröße stutzen.

    Das waren jetzt Dinge, die mir beim Drüberschauen ins Auge gesprungen sind. Inhaltlich/funktionell habe ich es nicht geprüft.

  • Nullen vor einer Zahl einfügen (als String)

    • BugFix
    • 15. April 2013 um 09:01

    Bitte Thema auf gelöst setzen (Startpost editieren, Präfix auf "gelöst")

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™