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

  • Bitte mal Testen GetWANIP (Neuer Server)

    • BugFix
    • 23. Juni 2010 um 08:39
    Zitat von AutoBert

    die Aufforderung dieser WebSite mich mit Nutzernamen und Passwort zu identifizieren.


    Dieses Anmelde-Fenster erscheint bereits beim Laden dieses Threads! Sehr merkwürdig.

    Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.

    Dateien

    auth.png 4,9 kB – 0 Downloads
  • Problem beim Zahl definieren

    • BugFix
    • 23. Juni 2010 um 08:36

    Die Vornullen lassen sich mit einer Skriptzeile realisieren:

    [autoit]

    For $i = 0 To 999
    ConsoleWrite(StringRight("00" & $i, 3) & @CRLF)
    Next

    [/autoit]
  • ListView und Filter, nur wie am besten?

    • BugFix
    • 22. Juni 2010 um 21:07

    Hier mein Gedankengang mal als PAP:

    Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.

    Dateien

    PAP.png 9,33 kB – 0 Downloads
  • SciTEexecuter V0.99b.240810

    • BugFix
    • 22. Juni 2010 um 10:09

    Die Nummerierung der Menüeinträge für die user.properties solltest du nicht mit fixen Werten belegen. Deine Installation würde meine properties abschießen, da alle diese Nummern bereits vergeben sind ;)

  • Hauptmenü per Case oder per Guictrlsetonevent => Problem

    • BugFix
    • 22. Juni 2010 um 08:49

    Du mußt disch schon entscheiden:
    Entweder verwendest du OnEvent-Mode oder GuiGetMsg-Mode - beides zusammen geht nicht. ;)

  • Listview von fornherein sortierbar per klick auf spalten überschriften ?

    • BugFix
    • 21. Juni 2010 um 11:34
    Zitat von WhiteLion

    Bei den ganzen funktionen die listview anbietet kann ich mir gar nicht vorstellen das dem wirklich so ist!


    Glaub es ruhig. Lösung bisher so:

    Spoiler anzeigen
    [autoit]

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

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

    Opt('MustDeclareVars', 1)

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

    Global $hListView, $B_DESCENDING
    GUICreate("ListView SimpleSort", 400, 300)
    $hListView = GUICtrlCreateListView("col1|col2|col3", 2, 2, 394, 268)
    GUICtrlSendMsg($hListView, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_GRIDLINES, $LVS_EX_GRIDLINES)
    GUICtrlSendMsg($hListView, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_FULLROWSELECT, $LVS_EX_FULLROWSELECT)
    GUICtrlCreateListViewItem("line4|5|more_a", $hListView)
    GUICtrlCreateListViewItem("line5|4.50 |more_c", $hListView)
    GUICtrlCreateListViewItem("line5|4.0 |more_c", $hListView)
    GUICtrlCreateListViewItem("line3|23|more_e", $hListView)
    GUICtrlCreateListViewItem("line2|0.34560 |more_d", $hListView)
    GUICtrlCreateListViewItem("line1|1.0 |more_b", $hListView)
    GUICtrlCreateListViewItem("line1|0.1 |more_b", $hListView)
    GUICtrlCreateListViewItem("line1|10|more_b", $hListView)
    _GUICtrlListView_SetColumnWidth($hListView, 0, 75)
    _GUICtrlListView_SetColumnWidth($hListView, 1, 75)
    _GUICtrlListView_SetColumnWidth($hListView, 2, 75)
    GUISetState()

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

    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
    Global $B_DESCENDING[_GUICtrlListView_GetColumnCount($hListView)]

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

    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    GUIDelete()

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

    Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg, $iwParam
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView, $tInfo
    $hWndListView = $hListView
    If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView)

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

    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    If ($hWndFrom = $hWndListView) And ($iCode = $LVN_COLUMNCLICK) Then
    $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam)
    _GUICtrlListView_SimpleSort($hWndListView, $B_DESCENDING, DllStructGetData($tInfo, "SubItem"))
    EndIf
    EndFunc ;==>WM_NOTIFY

    [/autoit]
  • endlich lappi?

    • BugFix
    • 21. Juni 2010 um 09:17

    Alizame:
    Hast du keine Shift-Taste auf deiner Tastatur?
    Es gehört zum guten Umgangston, seinem Gegenüber einen lesbaren Text zu präsentieren. Nur Kleinschreibung ist genauso unmöglich, wie Schreiben ohne Interpunktion.
    Beachte das bitte in Zukunft.

  • ListView und Filter, nur wie am besten?

    • BugFix
    • 20. Juni 2010 um 23:19

    Der Aufruf der Funktionen muß innerhalb der WM_NOTIFY erfolgen, im:
    Case $NM_CUSTOMDRAW
    Ob er wirksam ist hab ich noch nicht getestet.
    Kannst ja die Funktionen direkt verwenden:

    [autoit]

    ; BeginUpdate
    _SendMessage($hListView, 0x000B)

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

    ; EndUpdate
    _SendMessage($hListView, 0x000B, 1)

    [/autoit]
  • ListView und Filter, nur wie am besten?

    • BugFix
    • 20. Juni 2010 um 22:56
    Zitat von skyteddy

    Da ich den Inhalt des ListViews immer wieder verändere, sollte auch das Redraw gestoppt werden, während ich z.B. die Spaltenbreite einstelle.
    Normalerweise gibt es dazu ja _GUICtrlListView_BeginUpdate und _GUICtrlListView_EndUpdate, aber das scheint den WM_NOTIFY nicht wirklich zu interessieren, oder gibt es da auch was dazu?


    Bei jeder Aktion, die eine Änderung der Darstellung bewirkt, wird ein Listview (bzw. der sichtbare Teil) neugezeichnet. Wenn keine Farben im Spiel sind ist das kaum merkbar. Um die wechselnden Farben zu realisieren ist es erforderlich auf jede Veränderung zu reagieren. Ein BeginUpdate/EndUpdate läßt sich nicht verwirklichen - woher sollte WM_NOTIFY wissen, dass keine Veränderung mehr erfolgt und erst dann alles bisherige neuzeichnen?
    Man könnte evtl. über eine Zeit-Variable eine erste Änderung registrieren und _BeginUpdate setzen und wenn innerhalb einer Zeit X keine weitere Änderung erfolgt _EndUpdate setzen. Kannst du ja mal testen.

  • Wieso klappt das mit dem Array schon wieder nicht

    • BugFix
    • 20. Juni 2010 um 22:37
    Zitat von SEuBo

    Einmal heißt der Array ja auch $aNKo2 und einmal $aNko2


    Da muß ich dich korrigieren. AutoIt unterscheidet nicht zwischen Groß-/Kleinschreibung der Variablennamen. Das ist absolut egal. Eine $VARIABLE kannst du mit $variable weiterbenutzen. ;)

  • ListView und Filter, nur wie am besten?

    • BugFix
    • 20. Juni 2010 um 15:53

    ^^
    Ich hab es aus einem größeren Skript auf das Wesentliche reduziert.
    Aber die Includes fehlten noch:
    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>
    #include <StructureConstants.au3>
    #include <WindowsConstants.au3>

    Damit läuft es.
    Wegen der anderen Sachen schau ich mal.

    Edit:
    Also zu den anderen Dingen:
    _ArrayFindAll() ist nur begrenzt brauchbar, da im Gegensatz zu dem, was der Funktionsname erwarten läßt, nur die Vorkommen in einer Spalte gefunden werden. Das ist auch der einzige Unterschied zu _ArraySearch(), welches nur das erste Vorkommen in einer Spalte findet.

    Um wirklich ALLE Vorkommen zu finden kannst du so vorgehen:

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>

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

    Local $a[4][2] = [[11,22],[12,22],[22,13],[11,15]]

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

    ; _ArrayFindAll arbeitet nur innerhalb einer Spalte!
    ; Um wirklich ALLE Vorkommen zu finden, muß es auf jede Spalte angewendet werden
    $search = 22
    $sFound = ''
    For $i = 0 To UBound($a, 2) -1
    $found = _ArrayFindAll($a, $search,0,0,0,0,$i)
    For $j = 0 To UBound($found) -1
    $sFound &= $found[$j] & ',' & $i & '|'
    Next
    Next
    $sFound = StringTrimRight($sFound, 1)

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

    $aFound = StringSplit($sFound, '|', 2)

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

    Local $aFoundIndexes[UBound($aFound)][2]
    For $i = 0 To UBound($aFound) -1
    $var = StringSplit($aFound[$i], ',', 2)
    $aFoundIndexes[$i][0] = $var[0]
    $aFoundIndexes[$i][1] = $var[1]
    Next
    _ArraySort($aFoundIndexes)
    _ArrayDisplay($aFoundIndexes) ; Fundstelle als: [0]=Item/ [1]=SubItem

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

    ; === Unterschied beider Funktionen
    ; _ArraySearch findet das ERSTE Vorkommen des Suchbegriffs in EINER Spalte
    ; _ArrayFindAll findet ALLE Vorkommen des Suchbegriffs in EINER Spalte

    [/autoit]
  • ListView und Filter, nur wie am besten?

    • BugFix
    • 20. Juni 2010 um 15:08
    Zitat von skyteddy

    Gibt es auch eine Alternative für den reihenweisen Farbwechsel, also die Alternative zu
    GUICtrlSetBkColor($GuiListView, $ColorLVungerade) ; Farbe ungerade Zeilen
    GUICtrlSetBkColor($GuiListView, $GUI_BKCOLOR_LV_ALTERNATE)
    wenn man das ListView mit _GUICtrlListView_AddArray befüllt?


    Klar, kein Problem mit WM_NOTIFY:

    Spoiler anzeigen
    [autoit]

    $gui = GUICreate('Test 2')
    $ListView1 = GUICtrlCreateListView("Col 1|Col 2", 15, 15, 300, 250)
    $hLV = GUICtrlGetHandle(-1)
    _GUICtrlListView_SetColumnWidth($hLV, 0, 148)
    _GUICtrlListView_SetColumnWidth($hLV, 1, 148)

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

    Local $aToFill[30][2]
    For $i = 0 To 29
    $aToFill[$i][0] = Random(10000, 1000000, 1)
    $aToFill[$i][1] = Random(10000, 1000000, 1)
    Next
    _GUICtrlListView_AddArray($hLV, $aToFill)

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

    GUIRegisterMsg($WM_NOTIFY, 'WM_NOTIFY')
    GUISetState()

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

    Do
    Until GUIGetMsg() = -3
    GUIDelete($gui)

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

    Func WM_NOTIFY($hWnd, $Msg, $wParam, $lParam)
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR
    $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    If $hWndFrom = $hLV Then
    Switch $iCode
    Case $NM_CUSTOMDRAW
    Local $tCustDraw = DllStructCreate($tagNMLVCUSTOMDRAW, $lParam)
    Local $iDrawStage, $iItem, $iSubitem, $hDC, $tRect
    $iDrawStage = DllStructGetData($tCustDraw, 'dwDrawStage')
    Switch $iDrawStage
    Case $CDDS_ITEMPREPAINT
    Return $CDRF_NOTIFYSUBITEMDRAW
    Case BitOR($CDDS_ITEMPREPAINT, $CDDS_SUBITEM)
    $iItem = DllStructGetData($tCustDraw, 'dwItemSpec')
    Switch Mod($iItem, 2)
    Case 0 ; geradzahlig
    DllStructSetData($tCustDraw, 'clrTextBk', 0x23FFFF)
    Case 1 ; ungeradzahlig
    DllStructSetData($tCustDraw, 'clrTextBk', 0x0044FF)
    EndSwitch
    Return $CDRF_NEWFONT
    EndSwitch
    EndSwitch
    EndIf
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY

    [/autoit]
  • Autoit - Mehrere Checkboxen auslesen und status in variable/array packen

    • BugFix
    • 20. Juni 2010 um 13:33

    Wenn man wirklich eine größere Anzahl Checkboxen verwalten möchte, bietet sich zum Bsp. solche Lösung an:

    Spoiler anzeigen
    [autoit]

    ; Muster Checkbox-Bearbeitung
    ; Ziel: einfache Abfrage, welche CB aktiviert sind

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

    #include <GUIConstants.au3>
    Opt('GUIOnEventMode', 1)
    Opt("MustDeclareVars", 1)
    Global $bCheckAll, $bUnCheckAll, $GUI, $i, $str
    Global $arCB[20][2] ; Array für Handle und Dual-Wert der CB
    For $i = 0 To UBound($arCB) -1
    $arCB[$i][1] = 2^$i ; Zuweisung eindeutiger Wert
    Next
    Global $Checked = 0 ; Variable nimmt Status ALLER Checkboxen in einem Wert auf,
    ; Startstatus für alle: UNCHECKED
    Global $w = 500, $h = 20*30+40, $l = (@DesktopWidth-$w)/2, $t = (@DesktopHeight-$h)/2
    Global $top = -10
    $GUI = GUICreate('Test Checkbox', $w, $h, $l, $t)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_Ende')
    For $i = 0 To UBound($arCB) -1
    $top += 30
    $arCB[$i][0] = GUICtrlCreateCheckbox('CheckBox_' & $i+1, 40, $top, 120)
    GUICtrlSetOnEvent(-1, '_ClickCB')
    Next
    $bCheckAll = GUICtrlCreateButton('Alle markieren', 250, 20, 150, 21)
    GUICtrlSetOnEvent(-1, '_CheckAll')
    $bUnCheckAll = GUICtrlCreateButton('Markierung aufheben', 250, 50, 150, 21)
    GUICtrlSetOnEvent(-1, '_UnCheckAll')
    GUISetState()

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

    While 1
    Sleep(100)
    WEnd

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

    Func _Ende()
    Exit
    EndFunc

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

    Func _ClickCB()
    For $i = 0 To UBound($arCB) -1
    If $arCB[$i][0] = @GUI_CtrlId Then
    $Checked = BitXOR($Checked, $arCB[$i][1])
    _ReadCB()
    ExitLoop
    EndIf
    Next
    EndFunc

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

    Func _CheckAll()
    For $i = 0 To UBound($arCB) -1
    If Not BitAND($Checked, $arCB[$i][1]) Then
    GUICtrlSetState($arCB[$i][0], $GUI_CHECKED)
    $Checked = BitXOR($Checked, $arCB[$i][1])
    EndIf
    Next
    _ReadCB()
    EndFunc

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

    Func _UnCheckAll()
    For $i = 0 To UBound($arCB) -1
    If BitAND($Checked, $arCB[$i][1]) Then
    GUICtrlSetState($arCB[$i][0], $GUI_UNCHECKED)
    $Checked = BitXOR($Checked, $arCB[$i][1])
    EndIf
    Next
    _ReadCB()
    EndFunc

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

    Func _ReadCB() ; Fkt. dient nur zur Ausgabe, welche CB markiert sind
    Local $str = 'Markiert: '
    For $i = 0 To UBound($arCB) -1
    If BitAND($Checked, $arCB[$i][1]) Then $str &= $i+1 & ', '
    Next
    WinSetTitle($GUI, '', StringTrimRight($str, 2))
    EndFunc

    [/autoit]
  • Gui Hiintergrundbild Problem (Button)

    • BugFix
    • 20. Juni 2010 um 11:03

    Wenn du keinen tatsächlichen Button benötigst, mal dir einfach einen Rahmen auf das Hintergrundbild, damit der User weiß, wo er klicken muß:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <WindowsConstants.au3>
    #include <Winapi.au3>
    #include <Constants.au3>
    #include <FrameConstants.au3>
    #include <FontConstants.au3>

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

    Global $guiMain, $hDC, $hBrush, $tRECT

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

    Local $iBar = _WinAPI_GetSystemMetrics(4)
    Local $iBorder = _WinAPI_GetSystemMetrics(6)
    Local $hFont, $hOldFont

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

    ; Werte 'Pseudo-Button' (left,top,right,bottom)
    Global $sButton = 'Pseudo-Button' ; Button-Text
    Local $iFontSize = 16 ; Schriftgröße
    Local $iFontWidth = 400 ; 400 = normal, 600 = fett
    Local $bItalic = False ; kursiv
    Local $bUnderline = False ; unterstrichen
    Local $bStrikeout = False ; durchgestrichen
    Local $sFont = 'Comic Sans MS'
    Local $ctrl_L = 74
    Local $ctrl_T = 130
    Local $ctrl_R = $ctrl_L + 100 ; Left +Breite
    Local $ctrl_B = $ctrl_T + 20 ; Top +Höhe
    $tRECT = DllStructCreate('int;int;int;int;')
    DllCall("user32", 'long', 'SetRect', 'ptr', DllStructGetPtr($tRECT), 'long', $ctrl_L, 'long', $ctrl_T, 'long', $ctrl_R, 'long', $ctrl_B)

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

    Local $imgW = 248, $imgH = 281
    Local $mPos, $old

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

    $guiMain = GUICreate('Test', $imgW, $imgH, -1, -1)
    GUICtrlCreatePic(@SystemDir & '\oobe\images\wpakey.jpg', $iBorder, $iBorder, $imgW, $imgH)
    GUICtrlSetState(-1, $GUI_DISABLE)

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

    ; === Zeichenfläche / Font / Farben
    $hDC = _WinAPI_GetDC($guiMain)
    $hBrush = _WinAPI_CreateSolidBrush(0xFF0000)
    $hFont = _WinAPI_CreateFont($iFontSize, 0, 0, 0, $iFontWidth, $bItalic, $bUnderline, $bStrikeout, $DEFAULT_CHARSET, _
    $OUT_DEFAULT_PRECIS, $CLIP_DEFAULT_PRECIS, $DEFAULT_QUALITY, 0, $sFont)
    _WinAPI_SetTextColor($hDC, 0xFF0000)
    _WinAPI_SetBkColor($hDC, 0x000000)
    _WinAPI_SelectObject($hDC, $hFont)
    _WinAPI_SetBkMode($hDC, $TRANSPARENT)

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

    GUISetState(@SW_SHOW, $guiMain)
    GUIRegisterMsg($WM_MOVE, '_WM_MOVE')

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

    _Draw()

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

    While True
    Switch GUIGetMsg ()
    Case $GUI_EVENT_PRIMARYDOWN
    $old = Opt('MouseCoordMode', 0)
    $mPos = MouseGetPos()
    Opt('MouseCoordMode', $old)
    $mPos[1] -= $iBar + 2*$iBorder ; !! Maus hat 0 bei Fensterrand - RECT unterhalb Titelleiste !!
    $ret = DllCall("user32.dll", "bool", "PtInRect", "ptr", DllStructGetPtr($tRECT), "long", $mPos[0], "long", $mPos[1])
    If $ret[0] > 0 Then
    ; innerhalb Rectangle geklickt
    MsgBox(0, '', 'Klick')
    EndIf
    Case $GUI_EVENT_RESTORE, $GUI_EVENT_MAXIMIZE
    _Draw()
    Case -3
    Exit
    EndSwitch
    WEnd
    _WinAPI_DeleteObject($hBrush)
    _WinAPI_ReleaseDC($guiMain, $hDC)
    _WinAPI_SelectObject($hDC, $hOldFont)
    _WinAPI_DeleteObject($hFont)
    _WinAPI_ReleaseDC(0, $hDC)
    _WinAPI_InvalidateRect(0, 0)

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

    Func _WM_MOVE()
    _Draw()
    EndFunc

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

    Func _Draw()
    _WinAPI_FrameRect($hDC, DllStructGetPtr($tRECT), $hBrush)
    _WinAPI_DrawText($hDC, $sButton, $tRECT, BitOR($DT_SINGLELINE,$DT_CENTER,$DT_VCENTER))
    EndFunc

    [/autoit]

    Edit:
    Hab mal noch Beschriftung des "Button" hinzugefügt.

  • Arrays?? wie funktionieren sie??

    • BugFix
    • 19. Juni 2010 um 16:40
    Zitat von crocojunk

    Wie funktionieren Arrays?? Ich weiß was das ist und wozu sie gebraucht werden hab aber keine ahnung wie ich die anwende?


    Wenn du weißt, was Arrays sind und wozu man sie verwendet, verstehe ich deine Fragestellung nicht. Möchtest du die speicherinternen Abläufe wissen oder worauf bezieht sich deine Frage?
    (Kannst auch mal einen Blick in mein Tut werfen - s. Signatur)

  • Verschlüsslungs Algorythmus

    • BugFix
    • 19. Juni 2010 um 16:25

    Also ich bekomme genau das heraus, was rauskommen soll ;-):

    Spoiler anzeigen
    [autoit]

    ConsoleWrite(convert('To be or not to be, that is the question', 'mysecretkey') & @CRLF)

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

    Func convert($text, $key = '')
    ;~ // return text unaltered if the key is blank
    ;~ if ($key == '') {
    ;~ return $text;
    ;~ }
    If $key = '' Then Return $text

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

    ;~ // remove the spaces in the key
    ;~ $key = str_replace(' ', '', $key);
    ;~ if (strlen($key) < 8) {
    ;~ exit('key error');
    ;~ }
    $key = StringReplace($key, Chr(20), '')
    Local $key_len = StringLen($key)
    If $key_len < 8 Then Return SetError(0)

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

    ;~ // set key length to be no more than 32 characters
    ;~ $key_len = strlen($key);
    ;~ if ($key_len > 32) {
    ;~ $key_len = 32;
    ;~ }
    If $key_len > 32 Then $key = StringLeft($key, 32)

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

    ;~ $k = array(); // key array
    ;~ // fill key array with the bitwise AND of the ith key character and 0x1F
    ;~ for ($i = 0; $i < $key_len; ++$i) {
    ;~ $k[$i] = ord($key{$i}) & 0x1F;
    ;~ }
    Local $k = StringSplit($key, '', 2)
    For $i = 0 To UBound($k) -1
    $k[$i] = BitAND(Asc($k[$i]), 0x1F)
    Next

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

    ;~ // perform encryption/decryption
    ;~ for ($i = 0, $j = 0; $i < strlen($text); ++$i) {
    ;~ $e = ord($text{$i});
    ;~ // if the bitwise AND of this character and 0xE0 is non-zero
    ;~ // set this character to the bitwise XOR of itself and the jth key element
    ;~ // else leave this character alone
    ;~ if ($e & 0xE0) {
    ;~ $text{$i} = chr($e ^ $k[$j]);
    ;~ }
    ;~ // increment j, but ensure that it does not exceed key_len-1
    ;~ $j = ($j + 1) % $key_len;
    ;~ }
    Local $aText = StringSplit($text, '', 2), $j = 0, $e, $outText = ''
    For $i = 0 To UBound($aText) -1
    $e = Asc($aText[$i])
    If BitAND($e, 0xE0) Then $aText[$i] = Chr(BitXOR($e, $k[$j]))
    $j = Mod($j+1, $key_len)
    $outText &= $aText[$i]
    Next

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

    ;~ return $text;
    ;~ }
    Return $outText
    EndFunc

    [/autoit]

    Ich habe deinen Code nicht im Detail geprüft - aber einen Fehler habe ich noch gesehen: Du hast "^" als Potenz interpretiert. In php ist das aber BitXOR.

  • Verschlüsslungs Algorythmus

    • BugFix
    • 19. Juni 2010 um 11:08

    Ich habe gerade keine Möglichkeit zum Testen (sitze in einem Vortrag und poste vom Handy), werde aber heute abend mal testen.

  • Verschlüsslungs Algorythmus

    • BugFix
    • 19. Juni 2010 um 07:17

    Schleife in Zeile 20-22 ist falsch. Laut Vorgabe gehört dort BitAND hin - du verwendest BitXOR.

  • Excel Macro ausführen (mit ObjGet!)

    • BugFix
    • 18. Juni 2010 um 22:50

    OK, ich hab dir hier ein funktionsfähiges Bsp. erstellt.
    Das Makro in der Arbeitsmappe speichern, dann klappt das.

    Spoiler anzeigen
    [autoit]

    #cs === Das Makro zentriert die ausgewählte Zelle:

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

    Sub Align_Z()
    '
    ' Align_Z Makro
    ' Makro am 18.06.2010 von Standard aufgezeichnet
    '
    ' Tastenkombination: Strg+Umschalt+Z
    '
    Selection.HorizontalAlignment = xlCenter
    End Sub

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

    #ce

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

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

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

    Local $sheet = "C:\test_1\test.xls"
    Local $Obj1 = ObjGet($sheet)
    If Not IsObj($Obj1) Then Exit MsgBox(0, 'Fehler', 'Excel-Objekt konnte nicht erstellt werden.')

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

    GUICreate('Embedded Excel', 800, 600, -1, -1, $WS_MINIMIZEBOX +$WS_SYSMENU + $WS_CLIPCHILDREN)
    $GUI_Excel = GUICtrlCreateObj($Obj1, 10, 60, 780, 470)
    $btMacro = GUICtrlCreateButton('Makro: Zentrieren', 260, 540, 100)

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

    ; Alle Befehlsschaltflächen deaktivieren:
    ;~ For $Bar In $Obj1.CommandBars
    ;~ If $Bar.Enabled = True Then $Bar.Enabled = False
    ;~ If $Bar.Visible = True Then $Bar.Visible = False
    ;~ Next
    $Obj1.Application.DisplayFormulaBar = False
    $Obj1.Application.CommandBars("Shadow Settings").Visible = False
    $Obj1.Application.DisplayScrollBars = True
    $Obj1.Application.DisplayStatusBar = False

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

    GUISetState(@SW_SHOW)

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

    While 1
    Switch GUIGetMsg()
    Case $btMacro
    $Obj1.Application.Run("Align_Z")
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    [/autoit]

    Edit:
    Ich hab nochmal geschaut, wo dein Fehler war:
    Du hast die Methoden (.Run / .Close) direkt auf das Objekt angewendet - das geht nicht. Diese globalen Operationen müssen immer auf die Applikation bezogen sein: $ObjVariable.Application.Methode(Parameter)

  • Excel Macro ausführen (mit ObjGet!)

    • BugFix
    • 18. Juni 2010 um 18:36

    Ich hab hier mal ein Bsp. für Embedded gefunden, weiß nicht mehr, wer das mal gepostet hatte:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>

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

    $Form1 = GUICreate('Embedded Excel', 600, 600, -1, -1)
    For $i = 1 To 3
    Switch $i
    Case 1
    $Obj1 = ObjCreate('OWC.Spreadsheet') ; OWC 9.0 = Excel 2000
    Case 2
    $Obj1 = ObjCreate('OWC10.Spreadsheet')
    Case 3
    $Obj1 = ObjCreate('OWC11.Spreadsheet')
    EndSwitch
    If IsObj($Obj1) Then ExitLoop
    Next
    If Not IsObj($Obj1) Then Exit MsgBox(0, 'Fehler', 'Excel-Objekt konnte nicht erstellt werden.')

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

    $Obj1_ctrl = GUICtrlCreateObj($Obj1,50, 50,500,500)

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

    With $Obj1
    .AutoFit=0
    .DisplayGridlines=-1
    .DisplayHorizontalScrollBar=0
    .DisplayTitleBar=0
    .DisplayToolbar=0
    .DisplayVerticalScrollBar=0
    .EnableEvents=-1
    .MoveAfterReturn=-1
    .RightToLeft=0
    .ViewableRange='1:26'
    EndWith
    With $Obj1
    .range("A1:D1").Font.Size = 16
    .range("A1:D1").Font.Color = 0xffffff
    .range("A1:D1").Font.Bold = TRUE
    .range("A1:D1").Interior.Color = 0x8888ff
    .range("C1:D1").Interior.Color = 0xff8888
    #region - NICHT mit Excel 2000:
    ;~ .range("A1:D1").HorizontalAlignment = -4108; -4108 = center, -4131 = left, -4152 = right
    ;~ .range("A1:D1").VerticalAlignment = -4108; -4108 = center, -4107 = bottom, -4130 = justify, -4160 = top
    ;~ .Columns("A:G").ColumnWidth = 14
    ;~ .Rows("1:1").RowHeight = 25
    #endregion - NICHT mit Excel 2000
    .range('A1').value = 'aaa'
    .range('A2').value = '65'
    .range('A3').value = '75'
    .range('B1').value = 'bbb'
    .range('C1').value = 'ccc'
    .range('D1').value = 'ddd'
    .range('A19').value = 'SUM(A2:A18)'
    .range('A20').formula = '=SUM(A2:A18)'
    ; NICHT mit Excel 2000:
    ;~ .range('A1').activate
    Endwith

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

    GUISetState(@SW_SHOW)

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    [/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™