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

  • ListView - Zellenhintergrund

    • BugFix
    • 5. Januar 2011 um 13:15
    Zitat von qixx

    BugFix : Und wo wird jetzt genau aufgerufen, dass die Zelle gefärbt wird?


    Schau mal in der Funktion WM_NOTIFY die Kommentare an ;)
    Kannst dort z.B. mit Switch-Case für mehrere Zellen Farbinfos hinterlegen. Aber nicht vergessen einen Else-Zweig für die Default-Färbung zu setzen.

  • ListView - Zellenhintergrund

    • BugFix
    • 5. Januar 2011 um 13:06

    Wenn du nur die Hintergrundfarbe (also nicht die Schriftfarbe und Schriftart) ändern möchtest geht es so am Einfachsten:

    Spoiler anzeigen
    [autoit]

    #Include <GuiConstantsEx.au3>
    #Include <GuiListView.au3>
    #Include <ListViewConstants.au3>
    #Include <StructureConstants.au3>
    #Include <WindowsConstants.au3>

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

    $GUI = GUICreate("Listview Zelle/Spalte färben", 400, 300)

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

    $cListView = GUICtrlCreateListView("", 2, 2, 394, 268)
    $hListView = GUICtrlGetHandle($cListView)

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

    _GUICtrlListView_SetExtendedListViewStyle($hListView, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))

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

    _GUICtrlListView_InsertColumn($hListView, 0, "Column 1", 100)
    _GUICtrlListView_InsertColumn($hListView, 1, "Column 2", 100)
    _GUICtrlListView_InsertColumn($hListView, 2, "Column 3", 100)

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

    For $i = 1 To 30
    _GUICtrlListView_AddItem($hListView, "Row" & $i & ": Col 1", $i-1)
    For $j = 1 To 2
    _GUICtrlListView_AddSubItem ($hListView, $i-1, "Row" & $i & ": Col " & $j+1, $j)
    Next
    Next

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

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

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

    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

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

    Func WM_NOTIFY($hWnd, $Msg, $wParam, $lParam)
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR

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

    $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
    Case $hListView
    Switch $iCode
    Case $NM_CUSTOMDRAW
    If Not _GUICtrlListView_GetViewDetails($hWndFrom) Then Return $GUI_RUNDEFMSG
    Local $tCustDraw = DllStructCreate($tagNMLVCUSTOMDRAW, $lParam)
    Local $iDrawStage, $iItem, $iSubitem, $hDC, $iColor
    $iDrawStage = DllStructGetData($tCustDraw, 'dwDrawStage')
    Switch $iDrawStage
    Case $CDDS_ITEMPREPAINT
    Return $CDRF_NOTIFYSUBITEMDRAW
    Case BitOR($CDDS_ITEMPREPAINT, $CDDS_SUBITEM)
    $iItem = DllStructGetData($tCustDraw, 'dwItemSpec')
    $iSubitem = DllStructGetData($tCustDraw, 'iSubItem')
    $iColor = RGB2BGR(0xFFFF00) ; Hintergrundfarbe für Spalte
    $iColDefault = RGB2BGR(0xFFFFFF) ; Standardfarbe (weiß)
    If $iItem = 1 And $iSubitem = 1 Then ; Hier Item (Zeile) und SubItem (Spalte) festlegen (für Färbung Einzelzelle)
    ;~ If $iSubitem = 1 Then ; Hier SubItem (Spalte) festlegen (für Färbung ganze Spalte)
    DllStructSetData($tCustDraw, 'clrTextBk', $iColor)
    Else
    DllStructSetData($tCustDraw, 'clrTextBk', $iColDefault)
    EndIf
    Return $CDRF_NEWFONT
    EndSwitch
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY

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

    Func RGB2BGR($iColor)
    Return BitAND(BitShift(String(Binary($iColor)), 8), 0xFFFFFF)
    EndFunc

    [/autoit]


    Falls du mehr formatieren möchtest, schau mal hier rein: ListView - SubItem einzeln färben/formatieren, Finale Version!

  • Autoit Quelltext sortieren

    • BugFix
    • 4. Januar 2011 um 22:10

    Achja - falls du SciTE in deutsch möchtest, kopiere die angehängte Datei in das Rootverzeichnis von SciTE.
    Entferne dann die Endung ".txt" vom Dateinamen, habe ich nur angehängt um es hier hochladen zu können. ;)

  • Autoit Quelltext sortieren

    • BugFix
    • 4. Januar 2011 um 21:47

    OK, hier die aktuelle Version.

    Edit: Da war der Oscar schneller. ;)

    Dateien

    SciTE4AutoIt3_2010-02-28.zip 4,92 MB – 337 Downloads
  • x-dimensionales Array?

    • BugFix
    • 4. Januar 2011 um 18:29

    Ich kann keine sinnvolle Struktur erkennen. Du mußt doch wissen wieviel Dimensionen du brauchst. 8 sind es in deiner Darstellung nicht, sondern eher ein seltsamer Mix in einem 2D-Array.

  • Globale Variablen - besser vermeiden

    • BugFix
    • 4. Januar 2011 um 17:17
    Zitat von AspirinJunkie

    Ich hoffe auf dieses Fazit können wir uns einvernehmlich einigen.


    Das ist als Schlußwort absolut treffend. Ich habe meinen Startpost editiert und auch auf dieses Schlußwort verwiesen.
    Danke an alle Beteiligten für die aufschlußreiche Diskussion. :thumbup:
    Meine Großmutter hatte doch recht, wenn sie sagte: "Kannste alt werd'n, wie 'ne Kuh - lernste immer noch dazu."

  • Problem mit dem Notepad

    • BugFix
    • 4. Januar 2011 um 10:44
    Zitat von Dietmar

    Bei
    @ScripDir
    müste man prüfen ob es auf ein \ endet.


    Brauchst du nicht prüfen - die Makros enthalten, soweit ich weiß, niemals einen abschließenden Backslash.

  • csv Datei generieren

    • BugFix
    • 4. Januar 2011 um 10:03

    Vielleicht hilft dir das zum Editieren: ListView - Editieren aller SubItems

  • Globale Variablen - besser vermeiden

    • BugFix
    • 4. Januar 2011 um 09:44
    Zitat von nuts

    Aber wie macht ihr das dann z.B. mit einer aufwendigen Main GUI?

    Ich deklariere dann eine Globale Variable (Array) und speichere darin alle erforderlichen Werte. Ist nur etwas mehr an Dokumentationsaufwand, damit man die Zuordnung auch vor Augen hat.

  • Auflistung von Excel-Makros

    • BugFix
    • 4. Januar 2011 um 00:45

    Leider nicht möglich. Mit Run wird nur der Dialog gestartet. Die Liste des Dialogs ist aber kein Standard-Control und kann nicht per Control-ID oder Class angesprochen werden.

  • Auflistung von Excel-Makros

    • BugFix
    • 4. Januar 2011 um 00:08

    Also, Protection.Property ist ReadOnly!
    Es gibt wohl keinen direkten Weg per Skript das PW zu setzen. Vorstellbar wäre eine Variante mit Send/Controlsend/ControlClick. Mußt halt mal probieren, was da geht.

  • Auflistung von Excel-Makros

    • BugFix
    • 3. Januar 2011 um 23:32
    Zitat von Mike32

    Könntest du mir noch netterweise kurz mitteilen, wie ich per Autoit beim Projekt das Passwort eingebe bzw. den Schutz temporär aufhebe und nachher wieder einschalte?


    Also für das Workbook geht das (wenn ich mich recht erinnere) mit:

    [autoit]

    $oExcel.Workbooks.Open($sPath)
    $oExcel.Workbooks.Unprotect('Passwort')

    [/autoit]


    Aber wenn das Project PW-geschützt ist.. ich glaube, die Protection.Property ist ReadOnly. :S
    Mal suchen, ob es da eine Lösungsmöglichkeit gibt.

  • Auflistung von Excel-Makros

    • BugFix
    • 3. Januar 2011 um 22:51
    Zitat von Mike32

    Die gleiche Datei als Excel 97-2003 (.xls) abgespeichert und ich habe das beschriebene Problem. Kann es sein, dass die VBA-Struktur dann anders ist? - Und wenn ja, wie?

    Das übersteigt mein Wissen in dem Bereich.
    Aber falls es dir reicht, den normalen Makro-Dialog anzuzeigen - das geht so:

    [autoit]

    Const $xlDialogRun = 17
    Local $oExcel, $sPath = 'Deine_Excel.xls'

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

    $oExcel = ObjCreate('Excel.Application')
    $oExcel.Visible = 1
    $oExcel.Workbooks.Open($sPath)
    $oExcel.Application.Dialogs($xlDialogRun).Show

    [/autoit]
  • Auflistung von Excel-Makros

    • BugFix
    • 3. Januar 2011 um 22:31

    Funktioniert bei mir tadellos. Laut MSDN dürfte die Excel-Version keine Rolle spielen. OS ist bei mir XPHome SP3.

  • Auflistung von Excel-Makros

    • BugFix
    • 3. Januar 2011 um 21:39

    Es ist etwas aufwändiger. :rolleyes:
    Ich habe mal das Excel-Object-Model auf MSDN durchforstet und bin zu dieser Lösung gekommen:

    [autoit]

    Const $vbext_ct_ClassModule = 2
    Const $vbext_ct_Document = 100
    Const $vbext_ct_StdModule = 1
    Const $vbext_pk_Proc = 0

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

    Local $sPath = 'Deine_Excel.xls'
    Local $oExcel, $oBook, $oProj, $oComp, $Makro, $aMakro[1] = ['']

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

    $oExcel = ObjCreate('Excel.Application')
    $oExcel.Visible = 1
    $oBook = $oExcel.Workbooks.Open($sPath)
    $oProj = $oBook.VBProject
    $oComp = $oProj.VBComponents

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

    For $Komponente In $oComp
    If $Komponente.Type = $vbext_ct_ClassModule Or $Komponente.Type = $vbext_ct_Document Or _
    $Komponente.Type = $vbext_ct_StdModule Then
    With $Komponente.CodeModule
    For $i = 1 To .CountOfLines
    If .ProcOfLine($i, $vbext_pk_Proc) > "" Then
    $Makro = .ProcOfLine($i, $vbext_pk_Proc)
    If $Makro <> $aMakro[UBound($aMakro)-1] Then
    If $aMakro[UBound($aMakro)-1] <> '' Then ReDim $aMakro[UBound($aMakro)+1]
    $aMakro[UBound($aMakro)-1] = $Makro
    EndIf
    EndIf
    Next
    EndWith
    EndIf
    Next
    For $i = 0 To UBound($aMakro)-1
    ConsoleWrite($aMakro[$i] & @CRLF)
    Next

    [/autoit]

    Edit: Kannst die Makros ja z.B. in einer ComboBox anzeigen und das vom User gewählte Makro so starten:

    [autoit]

    $oExcel.Application.Run('Makro_Name')

    [/autoit]
  • Wechselnde Button in dynamischer Toolbar ansprechen

    • BugFix
    • 3. Januar 2011 um 13:00
    Zitat von woehlb

    Kritisch dürfte in jedem Fall für das AutoIt-Skript eine Änderung der Bildschirmauflösung sein. Wie kritisch ist die Verwendung unterschiedlich großer Bildschirmfonds?


    Das halte ich für unkritisch. Deine Zugriffskoordinaten müssen halt eine relative Berechnung unter Nutzung der Makros für Desktop -Breite/-Höhe beinhalten. Für die Toolbar erhältst du ja die Controlgröße und kannst anhand der Buttonanzahl die Breite der Einzelbutton berechnen.
    Auch die verwendeten Fonts halte ich für nicht relevant. Wenn die Controlgröße sich relativ zum verwendeten Font ändert, so spielt das für dich keine Rolle, weil du in der Koordinatenadressierung die Controlgröße in der Berechnung dann sowieso einfließen läßt.

  • Mein erstes kleines Skript =)

    • BugFix
    • 3. Januar 2011 um 12:52
    Zitat von stayawayknight

    Du kannst den Code aber um einiges kürzen, wenn du Arrays verwendest!


    Mag das meist der Fall sein - hier trifft es nicht unbedingt zu. Die Controls in Arrays zu packen führt zur Einsparung von nur einigen wenigen Skriptzeilen und würde aufgrund des Aufbaus nicht unbedingt die Lesbarkeit erhöhen. ;)

    Was ich empfehelen würde:
    Eine GUI einsparen und Titel und Aktionen nach Bedarf zuordnen.

    Spoiler anzeigen
    [autoit]

    ;~ #Region ### START Koda GUI section ### Form= ===> Identisch zu Form_Add, einfach Umbenennen bei Bedarf und und nach Titel die Aktionen zuordnen (Add oder Bearb.)
    ;~ $Form_bearb = GUICreate("Bearbeiten", 196, 231, 192, 124)
    ;~ $Input1_bearb = GUICtrlCreateInput("", 36, 24, 121, 21)
    ;~ $Input2_bearb = GUICtrlCreateInput("", 36, 72, 121, 21)
    ;~ $Input3_bearb = GUICtrlCreateInput("", 36, 120, 121, 21)
    ;~ $Input4_bearb = GUICtrlCreateInput("", 36, 165, 121, 21)
    ;~ $Button1_bearb = GUICtrlCreateButton("Ok", 36, 192, 43, 25, $WS_GROUP)
    ;~ $Button2_bearb = GUICtrlCreateButton("Cancel", 84, 192, 75, 25, $WS_GROUP)
    ;~ $Label1_bearb = GUICtrlCreateLabel("Artikelbeschreibung:", 36, 8, 100, 17)
    ;~ $Label2_bearb = GUICtrlCreateLabel("Anzahl verfügbare Artikel:", 36, 56, 125, 17)
    ;~ $Label3_bearb = GUICtrlCreateLabel("Anzahl verkaufte Artikel:", 36, 104, 119, 17)
    ;~ $Label4_bearb = GUICtrlCreateLabel("Interne Artikelnummer:", 36, 152, 109, 17)
    ;~ GUISetState(@SW_HIDE)

    [/autoit]


    Die Spaltenbreitenzuordnung könnte man in einer Schleife lösen, bringt aber auch keine große Einsparung.

    Spoiler anzeigen
    [autoit]

    Local $aWidth[420,40,40,40,75]
    For $i = 0 To 4
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, $i, $aWidth[$i])
    Next
    ;~ GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 420)
    ;~ GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 1, 40)
    ;~ GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 2, 40)
    ;~ GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 3, 40)
    ;~ GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 4, 75)

    [/autoit]

    Eventuell überlegenswert, die INI-Struktur so anzupassen, dass sektionsweise gelesen wird. Dann hat man die Daten sofort im Array.

    Eines meiner ersten Skripte war auch eine Artikelverwaltung. Kannst du dir ja mal anschauen. Der Code muß allerdings erst an die aktuelle AutoItversion angepaßt werden.

  • Wechselnde Button in dynamischer Toolbar ansprechen

    • BugFix
    • 3. Januar 2011 um 11:56
    Zitat von woehlb

    Gibt es einen anderen Weg die Command-ID's der dynamischen Button zu ermitteln?


    Ich habe das bei einer Anwendung ähnlich gehabt. Dort wurden auch interne ID vergeben, die per AutoIt nicht auslesbar und somit ansprechbar waren. Ich hatte das dann per Koordinatenberechnung auf Basis der Toolbar-Koords gelöst. (Basisdaten Toolbar + Pixelbreiten der zwischenliegenden Button)
    Ist zwar nicht so schön wie ein ControlClick, aber in der Not... :whistling:

  • FileCommander

    • BugFix
    • 29. Dezember 2010 um 21:46
    Zitat von UEZ

    Ich persönlich bin der Meinung, dass man langsam, aber sicher, sich von BS kleiner Vista verabschieden sollte! Ansonsten hier eine Ausnahme, dort eine Ausnahme.


    Ist aber nicht sehr logisch, da der Support für Vista noch vor dem für XP ausläuft. ( Wie das halt mit tot geborenen Kindern so ist. :D )

  • Arrays ohne Wertzweisung

    • BugFix
    • 29. Dezember 2010 um 12:58

    Ein Array muß bei der Deklaration mindestens ein Element beinhalten.

    [autoit]

    Local $array['Anzahl_Elemente']

    [/autoit]

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™