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

Beiträge von skyteddy

  • ListView und Filter, nur wie am besten?

    • skyteddy
    • 17. Juni 2010 um 19:21

    Hallo Mega,

    ich muss mal schauen, ob ich das hin bekomme. Da ich unten Buttons habe und auch nen eigenen ListView-Handler geschrieben habe, die von der Haupt-ListView Daten auslesen, bearbeiten und auch zurückschreiben, muss ich mir das nochmal gründlich überlegen, ob ich eine zweite Liste einführe, nicht dass ich mehr kaputt mache.

    Und daher funktioniert auch das mit dem _IECreateEmbedded nicht, da die Buttons darauf ja reagieren sollen und auch die Liste verändern.

    Dann bleibe ich wohl bei meinem ersten Wurf, wobei mir der nicht gefällt, aber damit muß ich nicht zuviel ändern.

    Hast Du noch ne Idee, wie ich die einzelnen Zeilen deutlicher markieren könnte, also außer der Hintergrundfarbe?

    Gruß
    R@iner

  • ListView und Filter, nur wie am besten?

    • skyteddy
    • 17. Juni 2010 um 15:52

    Hallo Mega, hallo Nuts,

    Zitat von Xenobiologist

    die Frage ist, wie viele Treffer werden es?


    schwer zu beantworten. Vermutlich kann es eine große Liste werden. Zwischen einem und viele Treffer.

    Es handelt sich um die Firmwareliste. Die zentral gepflegte Liste enthält derzeit ~80 Einträge und wenn der User noch lokal gespeicherte Firmwaren hat, dann kommen die auch noch dazu. Bei einigen Sammlern sind das bis zu 200 Einträge dazu.

    (Veraltete) Screenshots vom eigentlichen Programm, Bilder 2-4: Klick mich

    Der Wunsch der User ist es eben, dass in dieser Firmwareliste gesucht werden kann. Ich suche halt jetzt nach einer einfachen aber guten Lösung zum Suchen/Filtern.

    Ich weiß, die Gui ist nicht der Bringer, aber ich steh damit auf Kriegsfuß.

    Zitat von Xenobiologist

    Muss der User immer alle Treffer sehen?


    Wenn ich eine neue Liste mache, dann ja.

    Zitat von Xenobiologist

    Kann man die Visualisierung der Treffer irgendwo anders machen (statusbar)?


    Ne

    Zitat von Xenobiologist


    = da wäre sich das GuiCtrlSetState und dann hide und die Trefferliste neu aufbauen und an derselben Stelle anzeigen am schnellsten.


    Ah ok, muss ich mir anschauen. Kann ich die "Hauptliste" kopieren und die unnötigen Rows rauslöschen oder was geht Eurer Meinung nach am schnellsten?

    Zitat von Xenobiologist


    = Hintergrundfarbe (ist aber wahrscheinlich zeitintensiv)


    Das habe ich schon letztes Jahr probiert um die unterschiedlichen Firmwaretypen deutlicher zu kennzeichnen, aber das war viel zu langsam.

    Besten Dank!
    R@iner

  • ListView und Filter, nur wie am besten?

    • skyteddy
    • 17. Juni 2010 um 15:21

    Hallo Mega,

    in meinem eigentlichen (Haupt-)programm habe ich dazu leider keinen Platz. :(

    In meinen Augen gibt es nur 3 Möglichkeiten:
    - Ich blende in der aktuellen Liste die nicht benötigten Zeilen aus (wie ginge das?)
    - Ich markiere die Trefferzeilen deutlicher (nur wie?)
    - Ich tausche die alte Liste gegen die Trefferliste aus (wie ginge das am einfachsten?)

    Gruß
    R@iner

  • ListView und Filter, nur wie am besten?

    • skyteddy
    • 17. Juni 2010 um 13:51

    Hallo Zusammen,

    ich bin auf der Suche nach einer Möglichkeit, die Liste eines ListViews zu filtern bzw. darin zu suchen.

    Bisher bin ich mit meinem Lösungsansatz noch nicht ganz glücklich. Die gefundenen Zeilen sind nicht deutlich genug "markiert". Wie könnte ich das besser machen?

    Oder gibt es eine Möglichkeit, die nicht benötigten Zeilen auszublenden, ähnlich wie man es mit _GUICtrlListView_HideColumn für Spalten machen könnte? Dann blieben nur noch die zutreffenden Reihen übrig.

    Spoiler anzeigen
    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <GuiConstantsEx.au3>
    #include <ButtonConstants.au3>
    #include <GuiListView.au3>
    #include <GuiImageList.au3>
    #include <array.au3>
    #include <Date.au3>

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

    Opt('MustDeclareVars', 1)

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

    $Debug_LV = False ; Check ClassName being passed to ListView functions, set to True and use a handle to another control to see it work

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

    #Region Vars-Declaration
    Global $MyGui, $GuiListView, $GuiFilterInput, $GuiStatusLabel, $GuiButtonFiltern, $GuiButtonClear, $GuiButtonLast, $GuiButtonNext, $GuiMSG, $hImage
    Global $GuiWidth = 700, $GuiHeight = 400 ; GUI-Größe
    Global $MaxRows = 999, $MaxCol = 5 ; Reihen und Spalten
    Global $FoundedArray, $FApos ; Hilfsarray für die gefundenen Elemente
    Global $MyInitTimer
    Global Const $ItemDistance = 10
    Global $LastX
    #EndRegion Vars-Declaration

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

    #Region Gui-Creation
    ; -- GUI erzeugen --
    $MyGui = GUICreate("Filter in ListView", $GuiWidth, $GuiHeight)
    $LastX = $ItemDistance
    GUICtrlCreateLabel("Filter:", $LastX, 20, 30, 20)
    $LastX += 30 + $ItemDistance
    $GuiFilterInput = GUICtrlCreateInput("99", $LastX, 20 - 3, 200)
    $LastX += 200 + $ItemDistance
    $GuiButtonFiltern = GUICtrlCreateButton("Filtern/Suchen", $LastX, 20 - 4, 90, 24, $BS_DEFPUSHBUTTON)
    $LastX += 90 + $ItemDistance
    $GuiButtonClear = GUICtrlCreateButton("Löschen", $LastX, 20 - 4, 90, 24)
    $LastX += 90 + $ItemDistance
    $GuiButtonLast = GUICtrlCreateButton("<<", $LastX, 20 - 4, 20, 24)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $LastX += 20 + $ItemDistance
    $GuiButtonNext = GUICtrlCreateButton(">>", $LastX, 20 - 4, 20, 24)
    GUICtrlSetState(-1, $GUI_DISABLE)
    ; $GuiListView = GUICtrlCreateListView("", 10, 60, $GuiWidth - 20, 290, BitOR($LVS_SHOWSELALWAYS, $LVS_NOSORTHEADER), $LVS_EX_FULLROWSELECT)
    $GuiListView = GUICtrlCreateListView("", 10, 60, $GuiWidth - 20, 290, BitOR($LVS_SHOWSELALWAYS, $LVS_NOSORTHEADER), BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_CHECKBOXES))
    $GuiStatusLabel = GUICtrlCreateLabel("Gui erzeugen...", 10, $GuiHeight - 20, $GuiWidth - 20, 20)
    GUISetState(@SW_SHOW, $MyGui)
    #EndRegion Gui-Creation

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

    #Region fill the listview
    ; -- Tabelle füllen --
    $MyInitTimer = TimerInit()
    _GUICtrlListView_BeginUpdate($GuiListView)
    ; Add columns
    For $c = 1 To $MaxCol
    _GUICtrlListView_InsertColumn($GuiListView, $c - 1, "Column " & $c, 100)
    Next
    ; Add items
    SetStatus("Erzeugen (" & $MaxRows & " x " & $MaxCol & ")...", 1)
    For $r = 1 To $MaxRows
    _GUICtrlListView_AddItem($GuiListView, "Row " & $r & ", Col 1, " & Random(0, 99999, 1), $r - 1)
    For $c = 2 To $MaxCol
    _GUICtrlListView_AddSubItem($GuiListView, $r - 1, "Row " & $r & ", Col " & $c & ", " & Random(0, 99999, 1), $c - 1)
    Next
    Next
    _Debug("main", "Tabelle füllen", ru_TimerDiffNice($MyInitTimer))
    ; Spaltenbreite anpassen
    $MyInitTimer = TimerInit()
    For $c = 1 To $MaxCol
    _GUICtrlListView_SetColumnWidth($GuiListView, $c - 1, $LVSCW_AUTOSIZE)
    Next
    _Debug("main", "Spaltenbreite anpassen", ru_TimerDiffNice($MyInitTimer))
    _GUICtrlListView_EndUpdate($GuiListView)
    #EndRegion fill the listview

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

    #Region Main
    ; Mainloop
    SetStatus("")
    While 1
    $GuiMSG = GUIGetMsg()

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

    Switch $GuiMSG
    Case $GUI_EVENT_CLOSE ; Window-Event-Close
    GUISetState(@SW_HIDE, $MyGui)
    GUIDelete($MyGui)
    Exit

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

    Case $GuiButtonFiltern ; Filtern/Suchen
    Search(GUICtrlRead($GuiFilterInput))

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

    Case $GuiButtonClear ; clear filter
    GUICtrlSetData($GuiFilterInput, "")
    Search("")
    SetStatus("Filter gelöscht")

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

    Case $GuiButtonLast ; last
    JumpToFoundedItem(-1)

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

    Case $GuiButtonNext ; next
    JumpToFoundedItem(+1)
    EndSwitch
    WEnd
    #EndRegion Main

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

    #Region Funktionsdefinitionen
    ; Funktion, die im Listview nach dem Filter sucht und alle Zeilen markiert.
    ; Ebenfalls werden die gefundenen Rows im Array $FoundedArray aufgehoben, damit mit "last" und "next" umgeblättert werden kann
    Func Search($myFilter)
    Local $MyLocalInitTimer = TimerInit()
    Local $FoundInRow, $LastRow, $CounterFounded

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

    ; Filter-Eingabe
    ; $myFilter = InputBox("Bitte Filter eingeben", "Z.B. 99", 99, "", 200, 120)
    If $myFilter == "" Then
    ; Alle Selektionen entfernen
    _GUICtrlListView_SetItemSelected($GuiListView, -1, False, False) ; Alle entfernen
    ; Butto deaktivieren
    GUICtrlSetState($GuiButtonLast, $GUI_DISABLE)
    GUICtrlSetState($GuiButtonNext, $GUI_DISABLE)
    ; FoundedArray löschen
    $FoundedArray = "" ; Array
    $FApos = 0 ; Position im Array für "last" und "next"
    SetStatus("Alle anzeigen")
    Return
    EndIf

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

    ; Alle Selektionen entfernen
    _GUICtrlListView_SetItemSelected($GuiListView, -1, False, False) ; Alle entfernen

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

    ; Parameter zurücksetzen
    $FoundInRow = -1 ; start from the beginning
    $LastRow = -2
    $CounterFounded = 0

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

    ; Suchen
    _GUICtrlListView_BeginUpdate($GuiListView)
    SetStatus('Suchen nach "' & $myFilter & '"...', 1)
    ; Search for target item
    While 1
    $FoundInRow = _GUICtrlListView_FindInText($GuiListView, $myFilter, $FoundInRow)
    If $FoundInRow < 0 Or $LastRow >= $FoundInRow Then ExitLoop 1
    ; "Last" aufheben, damit nicht unendlich immer wieder von vorne gesucht wird
    $LastRow = $FoundInRow
    $CounterFounded += 1
    _GUICtrlListView_SetItemSelected($GuiListView, $FoundInRow, True, True) ; Nur den einen setzen
    ; _GUICtrlListView_SetItemState($GuiListView, $FoundInRow, $LVIS_SELECTED, $LVIS_SELECTED)
    ; _GUICtrlListView_EnsureVisible($GuiListView, $FoundInRow) ; Hinscrollen/Anzeigen
    WEnd
    _GUICtrlListView_EndUpdate($GuiListView)

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

    ; Ausgabe, diesmal mit _GUICtrlListView_GetSelectedCount
    ; SetStatus(_GUICtrlListView_GetSelectedCount($GuiListView) & ' Items mit "' & $myFilter & '" gefunden und markiert')

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

    ; Retrieve indices of selected item(s)
    $FoundedArray = _GUICtrlListView_GetSelectedIndices($GuiListView, True)
    ; _ArrayDisplay($FoundedArray, "founded items")
    $FApos = 0
    JumpToFoundedItem(+1)

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

    ; Button frei geben
    If IsArray($FoundedArray) And $FoundedArray[0] > 0 Then
    GUICtrlSetState($GuiButtonLast, $GUI_ENABLE)
    GUICtrlSetState($GuiButtonNext, $GUI_ENABLE)
    EndIf

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

    _Debug("Search", 'suchen nach "' & $myFilter & '"', ru_TimerDiffNice($MyLocalInitTimer))

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

    ; Ausgabe in MsgBox
    If $CounterFounded == 0 Then
    MsgBox(0, "Suchergebnis", 'Es wurden keine Items mit "' & $myFilter & '" gefunden!')
    Else
    MsgBox(0, "Suchergebnis", $CounterFounded & ' Items mit "' & $myFilter & '" gefunden und markiert')
    EndIf
    EndFunc ;==>Search

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

    ; Funktion, die in dem $FoundedArray von der derzeitigen Position im Array $FApos vor +der zurückblättert und an
    ; die betreffende Reihe springt
    ; $ArrayPos ist normalerweise +1 oder -1
    Func JumpToFoundedItem($ArrayPos = 0)
    Local $MyLocalInitTimer = TimerInit()
    Local $NewArrayPos = $FApos + $ArrayPos
    Local $GoToRow

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

    If (Not IsArray($FoundedArray)) Or $FoundedArray[0] == 0 Then
    SetStatus("Kein Sucherergebnis vorhanden")
    Return
    EndIf

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

    ; letztes Element überschritten?
    If $NewArrayPos > $FoundedArray[0] Then $NewArrayPos = 1

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

    ; erstes Element unterschritten
    If $NewArrayPos < 1 Then $NewArrayPos = $FoundedArray[0]

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

    ; Reihe nochmal setzen und hinspringen
    $GoToRow = $FoundedArray[$NewArrayPos]
    _GUICtrlListView_SetItemSelected($GuiListView, $GoToRow, True, True) ; Nur den einen setzen
    _GUICtrlListView_EnsureVisible($GuiListView, $GoToRow) ; Hinscrollen/Anzeigen

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

    ; Pointer umsetzen
    $FApos = $NewArrayPos

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

    SetStatus($NewArrayPos & " # " & $FoundedArray[0] & " gefundenen Items")

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

    _Debug("JumpToFoundedItem", 'jump to result ' & $NewArrayPos & " in row " & $GoToRow, ru_TimerDiffNice($MyLocalInitTimer))
    EndFunc ;==>JumpToFoundedItem

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

    ; Funktion, die den Text um unteren Rand der Gui ausgibt und ggf. den WaitingCursor setzt
    Func SetStatus($Text, $WaitingCursor = 0)
    ; Status ausgeben
    GUICtrlSetData($GuiStatusLabel, $Text)

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

    ; Cursor umsetzen
    If $WaitingCursor Then
    GUISetCursor(15, 1, $MyGui) ; Waiting-Cursor
    Else
    GUISetCursor(-1, 0, $MyGui) ; Normal-Cursor
    EndIf
    EndFunc ;==>SetStatus

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

    ; Funktion, die Debug-Ausgaben macht
    Func _Debug($VonFunc = "", $Text = "", $a = "", $b = "", $c = "", $d = "", $e = "", $f = "")
    Local $Message = '>' & $VonFunc & '<: ' & $Text

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

    If $a <> "" Then $Message &= ", " & $a
    If $b <> "" Then $Message &= ", " & $b
    If $c <> "" Then $Message &= ", " & $c
    If $d <> "" Then $Message &= ", " & $d
    If $e <> "" Then $Message &= ", " & $e
    If $f <> "" Then $Message &= ", " & $f

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

    ConsoleWrite($Message & @CRLF)
    EndFunc ;==>_Debug

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

    ; Funktion, die einen TimerDiff "schöne" Zeitangaben umwandelt und zurückliefert
    ; $typ == "I", dann muß in $InitOrDiffZahl das Ergebnis von TimerInit stehen
    ; $typ == "D", dann muß in $InitOrDiffZahl das Ergebnis von TimerDiff stehen, also das ausgerechnete TimeDifferenz
    Func ru_TimerDiffNice($InitOrDiffZahl, $typ = "I")
    Local $hh, $mm, $ss, $ret
    Local $TimerDiffZahl

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

    If $InitOrDiffZahl <= 0 Then Return ""

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

    ; Schauen, was übergeben wurde
    If $typ == "I" Then
    ; Ist InitTimer-Zahl, daher Diff berechnen
    $TimerDiffZahl = TimerDiff($InitOrDiffZahl)
    ElseIf $typ == "D" Then
    ; TimerDiff-Zahl direkt übernehmen
    $TimerDiffZahl = $InitOrDiffZahl
    Else
    ; Falscher Typ, einfach nichts zurückgeben
    Return ""
    EndIf

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

    ; Integer daraus machen
    $TimerDiffZahl = Int($TimerDiffZahl)

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

    ; hh, mm, ss füllen
    _TicksToTime($TimerDiffZahl, $hh, $mm, $ss)

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

    If $hh > 0 Then $ret &= StringFormat("%02ih ", $hh)
    If $mm > 0 Then $ret &= StringFormat("%02im ", $mm)
    If $ss > 0 Then $ret &= StringFormat("%02is ", $ss)
    If $ss < 1 Then
    $ret &= $TimerDiffZahl & " ticks"
    Else
    $ret &= "(" & $TimerDiffZahl & " ticks)"
    EndIf

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

    Return $ret
    EndFunc ;==>ru_TimerDiffNice
    #EndRegion Funktionsdefinitionen

    [/autoit]


    Probiert hatte ich auch schon von BugFix das "ListView - SubItem einzeln färben/formatieren ", aber das ist bei großen Tabellen leider zu langsam.

    Besten Dank schon mal für jede Idee!
    R@iner

  • Wie compiliere ich x86 und x64-Version in einem Rutsch?

    • skyteddy
    • 9. April 2010 um 19:20

    Ja so könnte man es machen, aber dann fehlen leider alle Resouce-Informationen, wie Logo, Fileversion, etc.in dem Compilat.

    Happy computing!
    R@iner

    PS: Ja die Filegröße ist bei mir auch so.

  • Wie compiliere ich x86 und x64-Version in einem Rutsch?

    • skyteddy
    • 9. April 2010 um 17:51

    Vielen Dank für Deine Bemühungen, aber ich glaube, Du hast mich nicht verstanden.

    Ich will keinen AutoIt-Wrapper nachbauen, zumal ich speziell der ResHacker-Teil nicht nachbauen will oder wüßte, wie ich den aufrufen muß und wie das RessourceFile auszusehen hat.

    Mittlerweile habe ich mir die AutoIt3Wrapper.au3 angeschaut. So wie ich es verstehe, ist entweder ein x86 oder ein x64 möglich, aber nicht beides auf ein mal. Weder über commandline, noch über ne Directive. Ich werd mal Jos ne Email schreiben.

    Besten Dank und ein schönes Wochenende!
    R@iner

  • Wie compiliere ich x86 und x64-Version in einem Rutsch?

    • skyteddy
    • 9. April 2010 um 17:08

    Schau Dir die AutoIt3Wrapper-Direktiven in meinem ersten Posting an oder/und geht mal genau so vor wie ich es im ersten Posting beschrieben habe, dann siehst Du, dass mehrere (AutoIt-)Programme durch den AutoItWrapper hintereinander aufgerufen werden bis unten eine fertige Exe rausplumst. Speziell der Aufruf von ResHacker.exe! da wüßte ich nicht, wie ich Icon und die ganzen Felder in der fertigen Exe ausgetauscht bekomme.

    Happy computing!
    R@iner

  • Wie compiliere ich x86 und x64-Version in einem Rutsch?

    • skyteddy
    • 9. April 2010 um 16:54

    Ist je nett von Dir, aber da fehlt fast alles von den Dingen, die ein normaler "F7", also ein "build" macht. ;)

    Mir ist schon klar, dass ich alles einzenln machen könnte, also AU3Check, obfuscieren, dann jeweils alles einzelnen compilieren, aber wie muss ich dann den ResHacker aufrufen?

    Ich hatte eigentlich gehofft, dass es eine Lösung mit dem AutoItWrapper gibt, der alles auf einmal macht.

    Happy computing!
    R@iner

  • Wie compiliere ich x86 und x64-Version in einem Rutsch?

    • skyteddy
    • 9. April 2010 um 15:59

    Hallo Zusammen,

    ich möchte ein Programm in einem Rutsch für x86 und x64 compilieren.

    Kann ich das mit dem AutoIt3Wrapper bewerkstelligen? Und wenn ja wie?

    Bisher compiliere ich immer erst die x64-Version und dann die x86-Version. Da das Programm ne stattliche Größe mittlerweile hat und auch mein Rechner nicht der schnellste ist (P4) dauert das leider immer sehr lange, zumal immer der Obfuscator viel Zeit in Anspruch nimmt.

    Momentan sieht es so aus:
    - Ich starte "MeinProgramm_V1.2.3.4.au3"
    - setze "#AutoIt3Wrapper_UseX64=y"
    - Mit F7 compiliere ich dann
    - Mach aus "MeinProgramm_V1.2.3.4.exe" dann "MeinProgramm_V1.2.3.4_x64.au3" und aus "MeinProgramm.exe" dann "MeinProgramm_x64.exe"
    - setze "#AutoIt3Wrapper_UseX64=n"
    - Mit F7 compiliere ich dann ein zweites Mal

    Das Resultat ist dann, so wie ich es will:
    MeinProgramm.exe
    MeinProgramm_x64.exe
    MeinProgramm_V1.2.3.4.exe
    MeinProgramm_V1.2.3.4_x64.exe

    Hier mal meine au3:

    Spoiler anzeigen
    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Version=beta
    #AutoIt3Wrapper_icon=.\MeinIcon_32x32.ico
    #AutoIt3Wrapper_outfile=.\MeinProgramm.exe
    #AutoIt3Wrapper_Compression=4
    #AutoIt3Wrapper_UseX64=y
    #AutoIt3Wrapper_Res_Description=Es sagt einfach nur hallo!
    #AutoIt3Wrapper_Res_Fileversion=1.2.3.4
    #AutoIt3Wrapper_Res_LegalCopyright=(c) by Meiner Einer
    #AutoIt3Wrapper_Res_Language=1031
    #AutoIt3Wrapper_Res_Field=Dateiname|MeinProgramm
    #AutoIt3Wrapper_Res_Field=Email|[email='mail@meinedomain.de'][/email]
    #AutoIt3Wrapper_Res_Field=Web|http://www.meinedomain.de
    #AutoIt3Wrapper_Res_Field=Firma|Meiner Einer Service
    #AutoIt3Wrapper_Run_After=copy "%out%" ".\MeinProgramm_V%fileversion%.exe"
    #AutoIt3Wrapper_Run_After=move ".\MeinProgramm_V%fileversion%.au3.tbl" ".\Obfuscator"
    #AutoIt3Wrapper_Run_After=move ".\MeinProgramm_V%fileversion%_Obfuscated.au3" ".\Obfuscator"
    #AutoIt3Wrapper_Run_Obfuscator=y
    #Obfuscator_Parameters=/cs=1 /cn=1 /cf=1 /cv=1 /sf=1 /sv=1
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

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

    ; Filename: MeinProgramm_V1.2.3.4.au3

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

    SayHello()

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

    Func SayHello()
    MsgBox(0, "Hallo", "Ich wollte nur hallo sagen! :-)")
    EndFunc ;==>SayHello

    [/autoit]

    Der AutoIt-Wrapper macht ja mehr, als nur obfuscieren und compilieren. Er ruft auch den ResHacker auf und ersetzt Icon und die Datei-Informationen.

    Ich könnte natürlich jetzt alles in einer Batch machen, also SyntaxCheck, obfuscieren, x64-Variante compilieren, x86-Variante compilieren, aber wie rufe ich dann genau den ResHacker auf?

    Trotzdem hoffe ich, dass ich das irgendwie mit dem AutoIt3Wrapper bewerkstelligen kann. Hat jemand ne Idee?

    Besten Dank im voraus und ein schönes Wochenende!
    R@iner

  • Wie bekomme ich die MsgBox, InputBox und FileOpenDialog in die Nähe meiner MainGUI?

    • skyteddy
    • 3. April 2010 um 17:11

    Hallo Raupi,

    vielen Dank für Deine schnelle Antwort!

    Das mit meinem ersten Button ist Absicht, damit man die Unterschiede sieht.

    Nochmal zum Hergang bei mir hier auf Windows XP:

    Test 1:
    1) Starten des Programms
    2) Verschieben der gui nach rechts oben
    3) Drücken auf den ersten Button -> FileOpenDialog öffnet sich in der linken oberen Ecke
    4) Drücken auf den zweiten Button -> FileOpenDialog öffnet sich in der linken oberen Ecke und nicht an der GUI
    5) Drücken auf den dritten Button -> InputBox öffnet sich in der linken oberen Ecke
    6) Drücken auf den vierten Button -> MsgBox öffnet sich Bildschirmmittig
    7) Programm beenden

    Test 2:
    1) Starten des Programms
    2) Verschieben der gui nach rechts oben
    3) Drücken auf den zweiten Button -> FileOpenDialog öffnet sich an der GUI -> so wie gewünscht
    4) Drücken auf den ersten Button -> FileOpenDialog öffnet sich an der GUI -> vermutlich weil Button Zwei mit dem parent-Verweis als erstes gedrückt wurde und sich die Position gemerkt wurde
    5) Drücken auf den dritten Button -> InputBox öffnet sich in der linken oberen Ecke
    6) Drücken auf den vierten Button -> MsgBox öffnet sich Bildschirmmittig
    7) Programm beenden

    Und warum funktioniert der FileOpenDialog im Test 1 nicht, wenn der Bezug auf hwnd doch gesetzt ist?

    Ah ok, Du hast gerade deinen Beitrag editiert.

    Den Hilfetext habe ich jetzt auch bei der MsgBox gefunden. Bei Inputbox und FileOpenDialog steht er jedenfalls nicht dabei.

    Ich frage mich, für was hwnd bei InputBox und bei MsgBox da ist? Ich sehe keinerlei Auswirkung ob ich da was angebe oder nicht.

    Gut den Workaround bei der Inputbox müsste ich überall einbauen. Nur wie mach ich das mit der MsgBox?

    Frohe Ostern!
    R@iner

  • Wie bekomme ich die MsgBox, InputBox und FileOpenDialog in die Nähe meiner MainGUI?

    • skyteddy
    • 3. April 2010 um 16:19

    Hallo Zusammen,

    kämpfe gerade mit meiner GUI und habe vermutlich eine Kleinigkeit übersehen oder mache einen Denkfehler wo ich Eure Hilfe bräuchte.

    Ich habe eine MainGui. In der gibt es verschiedene Buttons die entweder eine MsgBox, InputBox oder FileOpenDialog öffnen.

    Mein Wunsch ist es nun, nicht die Dialog zentriert am Bildschirm zu haben, sondern immer in der Nähe der MainGUI. Wenn ich z.B. die Gui nach oben rechts am Bildschirm verschiebe, sollen sich da auch die Dialoge öffnen.

    Die Hilfe ist da nur bedingt hilfreich, denn beim FileOpneDialog steht:

    "hwnd [optional] The window handle to use as the parent for this dialog."

    Daraus habe ich die "Beziehung" zwischen Dialog und Gui abgeleitet.

    Interessanterweise funktioniert das so, wie ich es will beim FileOpenDialog, wenn ich meinen 2. Knopf von oben drücke. Also er öffnet mir den Dialog dort, wo sich meine Main-GUI befindet.

    Drücke ich aber nach dem Start meines Testprogramms den obersten Button zuerst, dann erscheint der Dialog in der oberen linken Bildschirmecke, auch wenn ich danach den 2. Knopf drücke. :(

    Bei MsgBox oder InputBox hat es keinerlei Auswirkung, ob ich als hwnd meine MainGui angeben oder nicht. Die wird leider immer Bildschirmmittig platziert. :(

    Was mache ich falsch, oder geht das garnicht, was ich machen will, oder wofür ist das hwnd da? Oder ist es gar ein Bug?

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    Opt('MustDeclareVars', 1)
    ; Opt('CaretCoordMode', 2)
    Opt('GUICloseOnESC', 0)

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

    Global $MyMainGUI, $MyButton1, $MyButton2, $MyButton3, $MyButton4
    Local $GuiMsg

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

    CreateMyGui()

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

    While 1
    $GuiMsg = GUIGetMsg()

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

    Switch $GuiMsg
    Case $GUI_EVENT_CLOSE
    ExitLoop

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

    Case $MyButton1
    FileOpenDialog("Datei auswählen", @WorkingDir & "\", "alle (*.*)", 0, "")

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

    Case $MyButton2
    FileOpenDialog("Datei auswählen", @WorkingDir & "\", "alle (*.*)", 0, "", $MyMainGUI)

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

    Case $MyButton3
    InputBox("Testfrage", "Einfach mal nen Test eingeben", "nix", "", 150, 50, -1, -1, 15, $MyMainGUI)

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

    Case $MyButton4
    MsgBox(0, "Meldungsbox", "Ist die Box da, wo sie sein soll?", 15, $MyMainGUI)
    EndSwitch
    WEnd

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

    GUIDelete($MyMainGUI)

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

    #region funktionsdefinitionen

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

    Func CreateMyGui()

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

    $MyMainGUI = GUICreate("My GUI", 400, 200)

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

    $MyButton1 = GUICtrlCreateButton("FileOpenDialog", 10, 10, 150)
    $MyButton2 = GUICtrlCreateButton("FileOpenDialog mit hwnd", 10, 40, 150)
    $MyButton3 = GUICtrlCreateButton("InputBox mit hwnd", 10, 70, 150)
    $MyButton4 = GUICtrlCreateButton("MsgBox mit hwnd", 10, 100, 150)

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

    GUISetState(@SW_SHOW)

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

    EndFunc ;==>CreateMyGui

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

    #endregion funktionsdefinitionen

    [/autoit]

    Happy computing!
    R@iner

  • GUICtrlSetData funktioniert im x64 Compilat der V3.3.6.0 nicht mehr. Wie kann ich das eingrenzen?

    • skyteddy
    • 9. März 2010 um 21:00

    Grins, ah ok :)

    Ich bin dem Link bei deinem Beitrag von oben nicht gefolgt, weil ich dachte, das ist ein Link für ne Anleitung zum RessourceHacker und zum Austausch des Manifests. Und das tue ich mir nicht an.

    Dank Dir und noch nen schönen Abend!
    R@iner

  • GUICtrlSetData funktioniert im x64 Compilat der V3.3.6.0 nicht mehr. Wie kann ich das eingrenzen?

    • skyteddy
    • 9. März 2010 um 20:54

    Lang? Der Thread ist von heute.

    Happy computing!
    R@iner

  • GUICtrlSetData funktioniert im x64 Compilat der V3.3.6.0 nicht mehr. Wie kann ich das eingrenzen?

    • skyteddy
    • 9. März 2010 um 20:43

    Dann haben sie jetzt wenigstens ne Bug-ID dazu ;)

    Hast Du nen link zum Thread, bitte, danke!

    Happy computing!
    R@iner

  • GUICtrlSetData funktioniert im x64 Compilat der V3.3.6.0 nicht mehr. Wie kann ich das eingrenzen?

    • skyteddy
    • 9. März 2010 um 20:18

    Jow, da hast Du Recht. Das Manifest fehlt.

    Ich mach nen Bug auf.

    Danke Euch allen!

    Weiterhin happy computing!
    R@iner

  • GUICtrlSetData funktioniert im x64 Compilat der V3.3.6.0 nicht mehr. Wie kann ich das eingrenzen?

    • skyteddy
    • 9. März 2010 um 15:35

    In meinem großen Script sehe ich gerade, daß ich bei keiner Combo irgendeine Höhe angegeben habe und es geht trotzdem nicht. :(

    In dem kleinen Beispiel von mir in Posting 5 geht es aber problemlos, wenn man gar keine Höhe angibt. Irgendwas ist da faul.

    Und es erklärt nicht, warum es nur bei x64-Exes nicht geht.

    Ich hab jetzt keine Zeit mehr, dem Fehler hinterher zu jagen. Ich bleibe besser bei 3.3.5.6.

    Heute Abend werde ich dann den Bug melden.

    Viele Grüße!
    R@iner

  • GUICtrlSetData funktioniert im x64 Compilat der V3.3.6.0 nicht mehr. Wie kann ich das eingrenzen?

    • skyteddy
    • 9. März 2010 um 13:54

    Hallo Zusammen,

    Oskar dank Dir! Ich konnte den jetzt Fehler lokalisieren, wobei ich mir nicht sicher bin, ob das nun mein Fehler ist oder doch ein Fehler des Compilers.

    Ich bin bisher davon ausgegangen, daß der Wert "height" die Höhe der eigentlichen Control angibt. Bei Buttons und Labels sieht man ja die Höhe deutlich.

    Nach meinen Tests ist die "height" bei einer Combo anscheinend die Höhe inkl. des aufgeklappten Menüs und wirkt sich nicht auf die Höhe des nicht aufgeklappten Controls aus.

    Jetzt stellt sich für mich die Frage, was ist der Wert "height" bei einer Combo wirklich? Und warum ging das bisher immer "gut", nur jetzt nicht mehr bei x64-Compilat der V3.3.6.0?

    Und es erklärt immer noch nicht die Frage, warum mein Beispiel auf Posting 3 nicht geht, denn da arbeite ich ohne "height".

    Hier mein Testscript, was das verdeutlicht:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <String.au3>

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

    Opt('MustDeclareVars', 1)

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

    Example()
    Exit

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

    Func Example()
    Local $msg
    Local $MyGui = GUICreate("Combo-Test", 290, 620) ; will create a dialog box that when displayed is centered

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

    Local $LastX = 10, $LastY = 15, $width = 170, $height = -10

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

    GUICtrlCreateCombo("item1", $LastX, $LastY, $width) ; no height
    GUICtrlSetData(-1, "item2|item3|item4", "item3") ; add other item snd set a new default
    GUICtrlCreateLabel("no height", $LastX + $width + 20, $LastY, 50)

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

    For $x = 1 To 14
    $LastY += 40
    $height += 10
    GUICtrlCreateCombo("item1", $LastX, $LastY, $width, $height)
    GUICtrlSetData(-1, "item2|item3|item4|item5", "item3") ; add other item snd set a new default
    GUICtrlCreateLabel("height "& $height, $LastX + $width + 20, $LastY, 50)
    Next

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

    GUISetState()

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

    ; Run the GUI until the dialog is closed
    While 1
    $msg = GUIGetMsg()

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

    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    WEnd

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

    GUISetState(@SW_HIDE)
    GUIDelete($MyGui)
    EndFunc ;==>Example

    [/autoit]

    Happy computing!
    R@iner

  • GUICtrlSetData funktioniert im x64 Compilat der V3.3.6.0 nicht mehr. Wie kann ich das eingrenzen?

    • skyteddy
    • 9. März 2010 um 00:27

    Hallo Bert,

    ich hab jetzt nochmal versucht, es abzustrippen! :) Und was soll ich sagen, der Fehler tritt nun auf! Zumindest bei mir, in der VM mit 64bit Windows 7

    Hat jemand nen x64-PC, und kann das mal mit dem 3.3.6.0er compilieren und die Exe dann starten.

    Spoiler anzeigen
    [autoit]


    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_UseX64=y
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <GUIConstantsEx.au3>

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

    ; Globale Vars
    Global $ruG_DefaultNotSet = "-"
    Global $ruG_NWadapterListe = "" ; Collected Adapter-Names

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

    Opt('MustDeclareVars', 1)

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

    AdapterAuswahl()
    Exit

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

    Func AdapterAuswahl()
    Local $msg
    Local $rut_LastX = 10, $rut_LastY = 15, $rut_width = 170, $rut_height = 20

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

    GUICreate("Adapter-Auswahl", 250, 100)

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

    Local $ruCO_NWverbindungsName = GUICtrlCreateCombo($ruG_DefaultNotSet, $rut_LastX, $rut_LastY, $rut_width, $rut_height) ; Adapter-Name-Combo

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

    ; ...
    ; ...

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

    $ruG_NWadapterListe = "LAN-Verbindung|LAN-Verbindung 2|LAN-Verbindung 3|LAN-Verbindung 4"
    Local $rut_wert = "LAN-Verbindung 2"

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

    ; ...
    ; ...

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

    GUICtrlSetData($ruCO_NWverbindungsName, "") ; Adapter-Name-Combo löschen
    GUICtrlSetData($ruCO_NWverbindungsName, $ruG_NWadapterListe, $rut_wert) ; Adapter-Name-Combo setzen

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

    ; ...
    ; ...

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

    GUISetState()

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

    ; Run the GUI until the dialog is closed
    While 1
    $msg = GUIGetMsg()

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

    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    WEnd
    EndFunc ;==>AdapterAuswahl

    [/autoit]

    Achso, noch ne Anmerkung. Die Werte werden anscheinend schon gesetzt, aber das Menü klappt nicht auf. Mit Pfeil rauf und runter kann man auswählen.

    Besten Dank und viele Grüße!
    R@iner

  • GUICtrlSetData funktioniert im x64 Compilat der V3.3.6.0 nicht mehr. Wie kann ich das eingrenzen?

    • skyteddy
    • 8. März 2010 um 23:21

    Hallo Zusammen,

    eines meiner Mammut-Programme hat mittlerweile über 10.000 Lines of Code inkl Kommentare.

    Es ist eine GUI mit mehreren Tabs und einigen Combo-Boxen.

    Bis zum Compiler 3.3.5.6 funktionierte sowohl das x86-, also auch das x64 Compilat.

    Jetzt seit gestern, wo ich den 3.3.6.0-Compiler installiert habe, geht kein GUICtrlSetData mehr an den ComboBoxen, im x64-Compilat. Es scheint so, als würde es einfach nicht ausgeführt werden.
    Gleicher Source, nur eben mit x86-Switch compiliert, funktioniert tadellos.

    Wenn ich jetzt aber nur ne kleine GUI baue, mit ner ComboBox oder wenn ich das Beispiel aus dem Help nehme, und diese compiliere, tauchen diese Fehler nicht auf.

    Ich hab auch schon einen Rechner frisch aufgesetzt, AutoIt 3.3.6.0 und SciTE installiert und dort compiliert, aber auch mit dem Compilat habe ich das gleiche Problem.

    Wie kann ich den Fehler einschränken? Um nur die Gui ohne dem Drumherum zum Laufen zu bringen, also den Code abzustrippen, würde ich wahrscheinlich Stunden brauchen.

    Habt ihr eine Idee, was ich machen kann?

    Besten Dank und viele Grüße!
    R@iner

  • Gibt es InetGetDate oder vergleichbares?

    • skyteddy
    • 25. Februar 2010 um 16:47

    Wie sagst Du so schön in Deinem Footer:

    "Jetzt, wo ich weiß wie es geht, versteh ich auch die Gebrauchsanleitung"

    Dass da ein unterschiedlicher Link drin steht fällt mir jetzt erst auf.

    VIelen Dank Andy und viele Grüße!
    R@iner

    PS: In dem "Thanks to:" meines Programmes biste eh schon lange aufgeführt!

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™