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

  • OrganizeIncludes

    • BugFix
    • 24. August 2008 um 07:52
    Zitat von Tweaky

    da das zu suchende Array einen falschen Bereich hatte


    Danke, das ist übrigens einer der Gründe, warum ich mir abgewöhnt habe, den zurückgegeben Zähler in $Array[0] als Obergrenze zu verwenden. Ich verwende nur UBound($Array) -1, dann stimmt es immer. :D

    Edit:
    Übrigens glaube ich nun doch, dass ich von Demenz geplagt werde. ;( Habe die Frage ja schon mal gestellt und daraufhin kam deine oben genannte Antwort. Und ich kann mich dadran echt nicht mehr erinnern... schlimm, schlimm. 8|

  • ADO - Objekt, Methode GetRows ==> ArrayFehler

    • BugFix
    • 23. August 2008 um 18:13

    Hi,
    wenn man mit einem ADO-Objekt eine Datenbankabfrage macht, kann man mittels GetRows das zurückgelieferte RecordSet in ein Array wandeln.
    Dabei ist mir ein seltsames Verhalten aufgefallen:
    Liefert das Ergebnis nur eine Spalte zurück (also ein 1D-Array), so muß ich auf dieses Array aber als 2D-Array zugreifen!! und als Wert für die zweite Dimension dann 0 einsetzen!
    Also nicht wundern, wenn ihr mal damit arbeitet und plötzlich einen Arrayfehler auftritt - nun wißt ihr wieso. ;)

    Spoiler anzeigen
    [autoit]

    $objConnection = ObjCreate("ADODB.Connection")
    $data_source = "C:/GDILine/Factur/GDI.GDB"
    $connStr = "DRIVER=Firebird/InterBase(r) driver; UID=SYSDBA; PWD=masterkey; DBNAME=" & $data_source & ";"
    $objConnection.Open($connStr)
    $oRecordSet = $objConnection.Execute("SELECT name1 FROM kunden WHERE ort = 'Musterstadt' ORDER BY name1;")
    $arErgebnis = $oRecordSet.GetRows
    ConsoleWrite(UBound($arErgebnis, 2) & @CRLF) ; liefert 1 ==> ist ja auch nur eine Spalte

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

    ; Jetzt aber:
    For $i = 0 To UBound($arErgebnis) -1
    ConsoleWrite($arErgebnis[$i] & @CRLF) ; liefert Array-Fehler !!
    Next

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

    ; der Hammer:
    For $i = 0 To UBound($arErgebnis) -1
    ConsoleWrite($arErgebnis[$i][0] & @CRLF) ; liefert das korrekte Ergebnis obwohl 1D-Array !!
    Next

    [/autoit]
  • OrganizeIncludes

    • BugFix
    • 23. August 2008 um 14:27

    Wollte ich dir schon ewig sagen: OI ignoriert die WindowsConstants.au3 - also es wird nicht erkannt, dass diese eingebunden werden muß. (Ver. 4.0)

  • Drop löscht bisherigen Inhalt im Edit

    • BugFix
    • 23. August 2008 um 13:05

    Ah, Danke - der Ansatz war gut. Habs jetzt noch etwas vereinfacht:

    Spoiler anzeigen
    [autoit]

    #include<GuiListView.au3>
    #include<GUIConstantsEx.au3>
    #Include <GuiEdit.au3>
    Opt("GUIOnEventMode", 1)
    Global $content

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

    $Form1 = GUICreate("Form1", 690, 222, 195, 115)
    GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
    GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, '_down')
    GUISetOnEvent($GUI_EVENT_DROPPED, '_dropped')
    $ListView1 = GUICtrlCreateListView("Tabelle", 455, 8, 230, 189)
    GUICtrlSendMsg(-1, 0x101E, 0, $LVSCW_AUTOSIZE_USEHEADER )
    $LVTable = GUICtrlGetHandle($ListView1)
    $Edit1 = GUICtrlCreateEdit("Bla-Bla ", 8, 8, 441, 189)
    GUICtrlSetState($Edit1, $GUI_DROPACCEPTED)
    $hEdit = GUICtrlGetHandle($Edit1)
    For $i = 1 To 10
    _GUICtrlListView_AddItem($LVTable, 'Eintrag ' & StringRight('0' & $i, 2))
    Next
    GUISetState()

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

    While True
    Sleep(100)
    WEnd

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

    Func Form1Close()
    Exit
    EndFunc
    Func _down()
    $content = GUICtrlRead($Edit1)
    EndFunc
    Func _dropped()
    If @GUI_DropId <> $Edit1 Then Return
    If @GUI_DragId = $ListView1 Then _
    Local $strAppend = _GUICtrlListView_GetItemText($LVTable, _GUICtrlListView_GetSelectedIndices($LVTable))
    _GUICtrlEdit_AppendText($hEdit, $content & $strAppend)
    EndFunc

    [/autoit]
  • Drop löscht bisherigen Inhalt im Edit

    • BugFix
    • 23. August 2008 um 12:19
    Zitat von Tweaky

    Würde mich aber brennend interessieren an was das liegt ?(

    Ich vermute fast, dass das gewollt ist (in SQL gibt es ja z.B. den Befehl DROP zum Löschen). Also werde ich mal schnell meine eigene Drag 'n Drop-Funktion schreiben. :D

  • Drop löscht bisherigen Inhalt im Edit

    • BugFix
    • 23. August 2008 um 10:14

    Hi,
    wie ihr im Skript seht, kann ich die Einträge aus dem Listview per Drag&Drop ins Edit schreiben. Geht auch tadellos.
    Ich möchte jedoch den bisherigen Inhalt des Edits erhalten (deshalb verwende ich auch die Append-Funktion) - aber sowie gedropt wird, wird der Inhalt des Edits gnadenlos überschrieben.
    Wie kann ich das unterbinden?

    Spoiler anzeigen
    [autoit]

    #include<GuiListView.au3>
    #include<GUIConstantsEx.au3>
    #Include <GuiEdit.au3>
    Opt("GUIOnEventMode", 1)
    $Form1 = GUICreate("Form1", 690, 222, 195, 115)
    GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
    GUISetOnEvent($GUI_EVENT_DROPPED, '_dropped')
    $ListView1 = GUICtrlCreateListView("Tabelle", 455, 8, 230, 189)
    GUICtrlSendMsg(-1, 0x101E, 0, $LVSCW_AUTOSIZE_USEHEADER )
    $LVTable = GUICtrlGetHandle($ListView1)
    $Edit1 = GUICtrlCreateEdit("Bla-Bla ", 8, 8, 441, 189)
    GUICtrlSetState($Edit1, $GUI_DROPACCEPTED)
    $hEdit = GUICtrlGetHandle($Edit1)
    For $i = 1 To 10
    _GUICtrlListView_AddItem($LVTable, 'Eintrag ' & StringRight('0' & $i, 2))
    Next
    GUISetState()

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

    While True
    Sleep(100)
    WEnd

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

    Func Form1Close()
    Exit
    EndFunc
    Func _dropped()
    If @GUI_DropId <> $Edit1 Then Return
    If @GUI_DragId = $ListView1 Then _
    Local $strAppend = _GUICtrlListView_GetItemText($LVTable, _GUICtrlListView_GetSelectedIndices($LVTable))
    _GUICtrlEdit_AppendText($hEdit, $strAppend)
    EndFunc

    [/autoit]
  • Emailsenden,Zwischenspeichern,Sicherheitsblock!

    • BugFix
    • 22. August 2008 um 22:29

    zu 1.
    Die Suche bemühen, dazu stehen schon x funktionsfähige Beispiele im Forum.

    zu 2.
    Um in ein Word-Dokument zu schreiben muß es geöffnet sein. Das kann selbstverständlich im Hintergrund sein. Schau dir mal die Funktionen der "Word.au3" an.

    zu 3.
    Auch das Thema PC sperren wurde in verschiedenen Threads ausgiebig durchgekaut.

  • IRC Client mit dcc funktion

    • BugFix
    • 22. August 2008 um 14:27

    Kleiner Tipp:
    Starte meinen Bsp.-Client, dort werden ja Ereignisse (eingehende Nachrichten etc.) in die Console geschrieben. Dann schicke von einem anderen Client (mIRC, Miranda...) eine DCC-Anforderung. Dann kannst du genau sehen, wie diese Anforderung vom Protokoll her behandelt wird und brauchst nur analog reagieren.

  • Microsoft SQL UDF

    • BugFix
    • 21. August 2008 um 19:19

    Füge mal das Error-Handling ein, das hilft dir weiter:

    [autoit]

    Global $oMyError = ObjEvent("AutoIt.Error","MyErrFunc") ; Initialize a COM error handler

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

    Func MyErrFunc()
    Msgbox(0,"AutoItCOM Test","Ein COM-Fehler ist aufgetreten !" & @CRLF & @CRLF & _
    "err.description is: " & @TAB & $oMyError.description & @CRLF & _
    "err.windescription:" & @TAB & $oMyError.windescription & @CRLF & _
    "err.number is: " & @TAB & hex($oMyError.number,8) & @CRLF & _
    "err.lastdllerror is: " & @TAB & $oMyError.lastdllerror & @CRLF & _
    "err.scriptline is: " & @TAB & $oMyError.scriptline & @CRLF & _
    "err.source is: " & @TAB & $oMyError.source & @CRLF & _
    "err.helpfile is: " & @TAB & $oMyError.helpfile & @CRLF & _
    "err.helpcontext is: " & @TAB & $oMyError.helpcontext )
    EndIf
    Local $err = $oMyError.number
    If $err = 0 Then $err = -1
    Local $g_eventerror = $err
    Endfunc

    [/autoit]
  • Ini wird nicht richtig sortiert!

    • BugFix
    • 19. August 2008 um 21:45

    Machs einfach so:

    [autoit]

    Global $INI = @ScriptDir & '\testini.ini'
    Global $strWrite = ''
    If Not FileExists($INI) Then IniWriteSection($INI, 'test', 'key1=A'& @LF &'key3=B'& @LF &'key71=C'& @LF &'key45=D')

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

    Global $ReadSec = IniReadSection($INI, 'test')
    For $i = 1 To UBound($ReadSec) -1
    $strWrite &= 'Key' & $i & '=' & $ReadSec[$i][1] & @LF
    Next
    IniWriteSection($INI, 'test', $strWrite)

    [/autoit]
  • Ini wird nicht richtig sortiert!

    • BugFix
    • 19. August 2008 um 21:20

    Also nehme ich mal an, dass der Name der Keys (Key1, Key2..) keine Rolle spielt? Es wird nur der erste, zweite... usw. Eintrag abgefragt, unabhängig vom Schlüsselnamen? Oder wie läuft es?

  • Eure Meinung ist gefragt - 32bit oder 64bit, XP oder Vista

    • BugFix
    • 18. August 2008 um 21:27

    Ich glaube, die Meinungen dazu sind so vielschichtig, wie das Wetter :D
    Ich persönlich lehne Vista auch kpl. ab, was ich damit bisher ausprobiert habe, gibt keinen signifikanten Grund XP fallen zu lassen.
    Ob 64-Bit Technologie aktuell irgendwelche Vorteile bringt, wage ich zu bezweifeln. Dort, wo Unmengen an Daten verwaltet werden und es auf Prozessorfähigkeiten ankommt, verwendet man sowieso kein Windows (Media-Bereich, Publishing, da ist der Apfel unumstrittener König).
    Für privaten Bereich ist 64-Bit, sowas wie mit Kanonen auf Spatzen schießen.
    Mein ganz privater Tipp: Dual Core 32-Bit, WinXP

  • Frage...Inputbox Countdown ins Label ...

    • BugFix
    • 18. August 2008 um 19:57

    Hab grad in der Shoutbox gelesen, dass du an den beiden Schleifenformen
    While .. WEnd
    Do ... Until
    verzweifelst.
    Ich zeigs dir am Bsp., beide Varianten machen absolut dasselbe, nur auf andere Art und Weise:

    [autoit]

    While 1
    $msg = GUIGetMsg()
    If $msg = $GUI_EVENT_CLOSE Then Exit
    WEnd
    ; oder
    Do
    $msg = GUIGetMsg()
    Until $msg = $GUI_EVENT_CLOSE

    [/autoit]


    Siehst du den Unterschied, bzw. die Gemeinsamkeiten? - Nun kannst du es sicher in deinem Skript richtig verwenden.

  • Child GUI geöffnet, Parent GUI disabled

    • BugFix
    • 18. August 2008 um 19:29

    Wie wärs denn, wenn du ein wirkliches CHILD-Window erstellst? Lies die Hilfe zu den Styles.

  • Frage...Inputbox Countdown ins Label ...

    • BugFix
    • 18. August 2008 um 18:57

    Also ich bin nicht gewillt letztendlich dein Skript komplett umzuschreiben. Das mußt du selber tun. Genug Hinweise hab ich dir gegeben.
    Ich habe aber den Eindruck, dass es bei dir noch am grundlegenden Verständnis mangelt. Da solltest du dich erst mal mit den Grundlagen beschäftigen und kleine Brötchen backen.

  • TabItem abfragen?

    • BugFix
    • 18. August 2008 um 18:52
    [autoit]

    Case $msg = $Tab
    $aktivesTabItem = _GUICtrlTab_GetCurSel($Tab)

    [/autoit]
  • ip auslesen

    • BugFix
    • 17. August 2008 um 23:16
    [autoit]

    MsgBox(0, '', 'LAN-IP: ' & @IPAddress1)

    [/autoit]
  • Frage...Inputbox Countdown ins Label ...

    • BugFix
    • 17. August 2008 um 21:22

    Das war das Codestücke aus meinem Bsp. und das funktioniert. Ich habe es nur kommentiert, damit du weißt, was passiert.
    Mußt es dann anpassen, wenn du es per Button machen willst.

    Edit:
    Na, hast du es hinbekommen? Ich habs dir mal hier im Muster angepaßt. Du kannst so auch mitten im Countdown zurücksetzen, nicht erst bei Null.
    Und du kannst jetzt auch Stunden eingeben, also:
    bis 1 Std. die Minutenzahl, z.B.: 45
    darüber h:min, also z.B.: 1:05

    Spoiler anzeigen
    [autoit]

    #include <guiconstants.au3>
    #include <Date.au3>

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

    Global $arBt[8][2], $arIn[8][3], $arCounter[8][2], $y = 10, $input
    GUICreate('test')
    For $i = 0 To UBound($arBt) -1
    $arBt[$i][0] = GUICtrlCreateButton('set Time', 10, $y, 60, 20)
    $arIn[$i][0] = GUICtrlCreateInput('', 80, $y, 40, 20)
    $arCounter[$i][0] = GUICtrlCreateLabel('', 140, $y+3, 80, 17)
    $arBt[$i][1] = GUICtrlCreateButton('Reset', 240, $y, 60, 20)
    GUICtrlSetState($arBt[$i][1], $GUI_DISABLE)
    $y += 30
    Next
    GUISetState()

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

    Do
    $msg = GUIGetMsg()
    _SetCounter()
    For $i = 0 To UBound($arBt) -1
    If $msg = $arBt[$i][0] Then
    $arCounter[$i][1] = 1
    $input = GUICtrlRead($arIn[$i][0])
    If $input = '' Then ContinueLoop
    If StringInStr($input, ':') Then
    $input = StringSplit($input, ':')
    $input = $input[1]*60 + $input[2]
    EndIf
    $arIn[$i][1] = $input * 60
    $arIn[$i][2] = _NowCalc()
    GUICtrlSetState($arBt[$i][0], $GUI_DISABLE)
    GUICtrlSetState($arBt[$i][1], $GUI_ENABLE)
    ElseIf $msg = $arBt[$i][1] Then
    GUICtrlSetState($arBt[$i][0], $GUI_ENABLE)
    GUICtrlSetState($arBt[$i][1], $GUI_DISABLE)
    GUICtrlSetData($arCounter[$i][0], '')
    GUICtrlSetData($arIn[$i][0], '')
    $arIn[$i][1] = 0
    EndIf
    Next
    Until $msg = $GUI_EVENT_CLOSE

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

    Func _SetCounter()
    Local $sec
    For $i = 0 To UBound($arCounter) -1
    If $arCounter[$i][1] <> 1 Then ContinueLoop
    If $arIn[$i][1] = 0 Then ContinueLoop
    $sec = $arIn[$i][1] - _DateDiff("s", $arIn[$i][2], _NowCalc())
    Select
    Case $sec < 60
    GUICtrlSetData($arCounter[$i][0], StringFormat('%02u', $sec) & ' s')
    Case $sec < 60*60
    GUICtrlSetData($arCounter[$i][0], StringFormat('%02u', Floor($sec/60)) & ':' & _
    StringFormat('%02u', Mod($sec,60)) & ' min')
    Case $sec < 60*60*24
    GUICtrlSetData($arCounter[$i][0],StringFormat('%02u', Floor($sec/3600)) & ':' & _
    StringFormat('%02u', Floor(Mod($sec,3600)/60)) & ':' & _
    StringFormat('%02u', Mod(Mod($sec,3600),60)) & ' h')
    EndSelect
    If $sec = 0 Then
    SoundPlay(@WindowsDir & '\Media\tada.wav')
    $arCounter[$i][1] = 0
    EndIf
    Next
    EndFunc

    [/autoit]
  • ip auslesen

    • BugFix
    • 17. August 2008 um 21:17

    Makro: @IPAddress1

  • Frage...Inputbox Countdown ins Label ...

    • BugFix
    • 17. August 2008 um 21:08
    Spoiler anzeigen
    [autoit]

    If $sec = 0 Then
    SoundPlay(@WindowsDir & '\Media\tada.wav')
    $arCounter[$i][1] = 0
    GUICtrlSetState($arBt[$i], $GUI_ENABLE) ; Button wieder Enablen
    GUICtrlSetData($arCounter[$i][0], '') ; Zeitanzeige Label löschen
    GUICtrlSetData($arIn[$i][0], '') ; eingegebene Zeit löschen
    EndIf

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