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

  • Array in Liste ausgeben ?

    • BugFix
    • 12. Februar 2007 um 17:29

    Hi viper67,

    du hast nicht ganz unrecht, die Arrays (also die mehrdimensionalen), kommen in der Hilfe ein bischen ( naja eher total ;) ) dünn weg.
    Habe deinen Hilferuf erhört und schon mal das Wesentliche zu Mehrdimensionalen Arrays im Wiki hinterlegt. Sollte da noch mehr mit rein, dann sag mal an, wo Probleme sind. -> Wenn man erst mal mit umgehen kann, fehlt einem etwas der Blick auf die Anfangsschwierigkeiten. ;)

  • *.exe auf CD-ROM starten

    • BugFix
    • 12. Februar 2007 um 13:41

    Hi
    ich hatte mal eine Funktion zur Erkennung optischer Laufwerke geschrieben (hier).
    Vielleicht kannst du das verwenden.

    Hier eine Idee von mir:

    Spoiler anzeigen
    [autoit]

    Dim $PathOnCD = "\" ; hier anpassen - muß mit Backslash beginnen
    Dim $Lw, $TruePath

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

    For $i = 1 To 2
    $Lw = _GetCdDriveInfo($i,1)
    If $Lw = "" Then
    MsgBox(16, '', "Kein CD-Laufwerk vorhanden.")
    ExitLoop
    Else
    If FileExists($Lw & $PathOnCD) Then
    $TruePath = $Lw & $PathOnCD
    ExitLoop
    EndIf
    EndIf
    Next

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

    ;==================================================================================================
    ; Function: _GetCdDriveInfo($cd_pos, $cd_info_type)
    ;
    ; Description: Get Info of physical CD/DVD-drives (Drive-Letter, Device-Name, Firmware)
    ;
    ; Parameter(s): $cd_pos
    ; 1= First Drive;
    ; 2= Second Drive;
    ; 3= Info of Both Drives with Seperator " | "
    ; $cd_info_type
    ; 1= Drive-Letter only
    ; 2= Device-Name only
    ; 3= Firmware-Version only
    ; 4= Drive-Letter & " " & Device-Name
    ; 5= Drive-Letter & " " & Device-Name & " " & Firmware-Version
    ;
    ; Return Value: i.e. D:[ HL-DT-ST DVDRAM GSA-4081B][ v.A100] | [E:][ TOSHIBA DVD-ROM SD-M1612][ v.1004]
    ; Sets @ERROR to: 1 - no CD/DVD-Device found
    ; 2 - Second CD/DVD-Device not found
    ; no @ERROR sets if $cd_pos= 3 and Second CD/DVD-Device was'nt found
    ; Return only First Drive Info
    ;
    ; Author: BugFix ([email='bug_fix@web.de'][/email])
    ;==================================================================================================
    #include <String.au3>

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

    Func _GetCdDriveInfo($cd_pos = 1, $cd_info_type = 1)
    $cd1 = ""
    $cd1_name = "no_drive"
    $cd1_fw = ""
    $cd2 = ""
    $cd2_name = "no_drive"
    $cd2_fw = ""
    $p2 = 0

    For $a = 68 To 90
    $drv = Chr($a)
    $reg = RegRead("HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices", "\DosDevices\" & $drv & ":")
    $val = ""
    $name = ""
    For $i = 1 To StringLen($reg) - 2 Step 2
    $tmp = _HexToString(StringMid($reg, $i, 2))
    If $tmp <> "" Then
    $val = $val & $tmp
    EndIf
    Next
    $p1 = StringInStr($val, "#") + 1
    $type = StringMid($val, $p1, 5)
    If $type = "CdRom" Then
    $p2 = StringInStr($val, "__")
    If $p2 > 6 Then
    $name = StringMid($val, $p1 + 5, $p2- ($p1 + 5))
    $name = StringReplace($name, "_", " ")
    If $cd1 = "" Then
    $cd1 = $drv & ":"
    $cd1_name = $name
    Else
    $cd2 = $drv & ":"
    $cd2_name = $name
    EndIf
    $p3 = StringInStr($val, "#", 0, 2)
    For $i = $p3 - 1 To $p2 Step - 1
    If StringMid($val, $i, 1) <> "_" Then
    $pos_fw_end = $i
    ExitLoop
    EndIf
    Next
    For $i = $pos_fw_end To $p2 Step - 1
    If StringMid($val, $i, 1) = "_" Then
    $pos_fw_begin = $i+1
    $fw_len = $pos_fw_end - $pos_fw_begin +1
    ExitLoop
    EndIf
    Next
    $cd_fw = "v." & StringMid($val, $pos_fw_begin, $fw_len)
    If $cd1_fw = "" Then
    $cd1_fw = $cd_fw
    Else
    $cd2_fw = $cd_fw
    EndIf
    EndIf
    EndIf
    $p2 = 0
    Next
    If $cd1_name = "no_drive" And $cd2_name = "no_drive" Then
    SetError(1)
    Return False
    EndIf
    If $cd2_name = "no_drive" And $cd_pos = 2 Then
    SetError(2)
    Return False
    EndIf
    Select
    Case ($cd_pos = 1 Or ($cd_pos = 3 And $cd2_name = "no_drive")) And $cd_info_type = 1
    Return $cd1
    Case ($cd_pos = 1 Or ($cd_pos = 3 And $cd2_name = "no_drive")) And $cd_info_type = 2
    Return $cd1_name
    Case ($cd_pos = 1 Or ($cd_pos = 3 And $cd2_name = "no_drive")) And $cd_info_type = 3
    Return $cd1_fw
    Case ($cd_pos = 1 Or ($cd_pos = 3 And $cd2_name = "no_drive")) And $cd_info_type = 4
    Return $cd1 & " " & $cd1_name
    Case ($cd_pos = 1 Or ($cd_pos = 3 And $cd2_name = "no_drive")) And $cd_info_type = 5
    Return $cd1 & " " & $cd1_name & " " & $cd1_fw
    Case $cd_pos = 2 And $cd_info_type = 1
    Return $cd2
    Case $cd_pos = 2 And $cd_info_type = 2
    Return $cd2_name
    Case $cd_pos = 2 And $cd_info_type = 3
    Return $cd2_fw
    Case $cd_pos = 2 And $cd_info_type = 4
    Return $cd2 & " " & $cd2_name
    Case $cd_pos = 2 And $cd_info_type = 5
    Return $cd2 & " " & $cd2_name & " " & $cd2_fw
    Case $cd_pos = 3 And $cd_info_type = 1
    Return $cd1 & " | " & $cd2
    Case $cd_pos = 3 And $cd_info_type = 2
    Return $cd1_name & " | " & $cd2_name
    Case $cd_pos = 3 And $cd_info_type = 3
    Return $cd1_fw & " | " & $cd2_fw
    Case $cd_pos = 3 And $cd_info_type = 4
    Return $cd1 & " " & $cd1_name & " | " & $cd2 & " " & $cd2_name
    Case $cd_pos = 3 And $cd_info_type = 5
    Return $cd1 & " " & $cd1_name & " " & $cd1_fw & " | " & $cd2 & " " & $cd2_name & " " & $cd2_fw
    EndSelect
    EndFunc ;==>_GetCdDriveInfo

    [/autoit]
  • Konsoleprogramme einbinden

    • BugFix
    • 11. Februar 2007 um 19:47

    Also hier mein Fazit.
    Hätte nicht geglaubt, dass es so etwas gibt. Aber shorten kann definitiv NICHT mit Run(), RunWait(), ShellExecute() oder ShellExecuteWait() geöffnet werden. Selbst wenn ich im selben Verzeichnis bin, wird die Datei über diese Befehle nicht gefunden. (*wunder-mich*)
    Dann hab ich einen Umweg versucht und die Befehle in eine Batchdatei geschrieben und versucht diese über Run zu starten - mit demselben (Miss)Erfolg.
    Auf Consolenebene überhaupt kein Problem.
    Keine Ahnung warum das so ist.

    Tut mir leid, dassich da nicht weiterhelfen kann.

  • Konsoleprogramme einbinden

    • BugFix
    • 11. Februar 2007 um 18:15

    Ja, die Installanleitung geht ja mit meinen Gedanken konform, da als Installationsverzeichnis(se) (bzw. Kopierverzeichnis :) ) die Windowsordner bzw. Systemordner empfohlen werden, also Verzeichnisse auf die ein Path-Befehl gesetzt ist.
    Demzufolge setze einen Pfad auf das "shorten"-Verzeichnis oder wechsle vor Ausführung in diesen Ordner.

    EDIT:
    Ich saug mir mal das Tool und teste selber. Bis später.

  • Beep Komponist

    • BugFix
    • 11. Februar 2007 um 17:15

    Hi Vinschni,

    also grundlegender Fehler:

    Du willst in eine INI-Datei schreiben verwendest aber FileOpen, Filewrite.

    Du brauchst also Klarheit,wie die INI aussehen soll.
    Grundstruktur:

    [section]
    key1=value
    key2=value

    Schau mal in der Hilfe unter IniWrite, IniRead etc. . Dann wird dir sicher alles klarer. Falls nicht frag nochmal nach.

  • Konsoleprogramme einbinden

    • BugFix
    • 11. Februar 2007 um 17:00

    Wird für "shorten" bei der Installation ein Pfad eingerichtet? Wenn nicht, mußt du doch in jedem Fall in das Arbeitsverzeichnis von "shorten" wechseln, bzw. dieses im RunWait -Befehl definieren. Oder liege ich da falsch?

  • Array in Liste ausgeben ?

    • BugFix
    • 11. Februar 2007 um 15:25

    Hi, das funzt schon so:

    Spoiler anzeigen
    [autoit]

    Dim $aRecords[10]
    $aRecords[0] = 9
    For $i = 1 To $aRecords[0]
    $aRecords[$i] = "Item " & $i
    Next

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

    $txt = ""
    For $i = 1 to $aRecords[0]
    $txt &= $aRecords[$i] & @LF
    Next
    MsgBox(0, '', $txt)

    [/autoit]


    Aber ich hatte in meinem Bsp. von der Vorlage kopiert und dort war "$x" als Schleifenvariable. Innerhalb der Schleife habe ich aus Gewohnheit "$i" verwendet. ;)

  • exe dateien verkleinern

    • BugFix
    • 11. Februar 2007 um 13:42

    "Assembler" ist Maschinencode - also die Befehle, die direkt für das Ansprechen der Hardware verwendet werden.
    Alle anderen Programmiersprachen müssen zur Laufzeit in den Assemblercode übersetzt werden, damit die Hardware überhaupt agiert ;)
    Aber ich denke mal, noch gründlicher kann Google dich aufklären. :)

    Edit: Pee war wieder mal schneller :weinen:

  • Array in Liste ausgeben ?

    • BugFix
    • 11. Februar 2007 um 13:12
    Zitat

    Als Ausgabe erfolgte die Anzeige der Zeilen und das so oft wie es die Zeilen gibt.

    Verstehe ich nicht ganz, was du jetzt meinst. Es wird in jedem Schleifendurchlauf der Inhalt des Arrays an der aktuellen Pos. $i zur Variable $txt hinzugefügt und ein Zeilenumbruch angehängt.
    Nach Beenden der Schleife wird der Inhalt von $txt ausgegeben.

    Zitat

    Aber was macht genau der Ubound Befehl mit der - 1 hinten dran =?

    Ubound() gibt die obere Grenze (upper Bound) des Arrays aus. Da Arrays 0-indexiert sind (Element 1 = $ar[0] usw.) erhältst du z.B. für ein Array mit 10 Elementen auch UBound = 10. Um auf das Element zuzugreifen mußt du es aber mit dem Index adressieren und der ist 1 weniger, da bei 0 beginnend. ==> Deshalb: UBound -1

  • exe dateien verkleinern

    • BugFix
    • 11. Februar 2007 um 11:51

    Das Zauberwort: CleanScript von Pee

  • New ListView Flag: $GUI_BKCOLOR_LV_ALTERNATE

    • BugFix
    • 11. Februar 2007 um 11:37

    In der aktuellen Prod. wurde Für ListView das Flag: $GUI_BKCOLOR_LV_ALTERNATE übernommen. Die Erklärung dazu in der Hilfe ist recht mager:

    Zitat

    The special flag $GUI_BKCOLOR_LV_ALTERNATE can be used with Listview control to give alternate background of the ListviewItems lines.
    The odd lines will get the color set by GUICtrlSetBkColor of the Listview control.
    The even lines will get the color set by GUICtrlSetBkColor of the ListviewItem control.

    Speziell der Hinweis auf die ungeraden (odd) und geraden (even) Zeilen ist schon verwirrend. Denn die Adressierung im Listview ist ja 0-Index-basierend. D.h. der mit der geraden Zahl "0" adressierte Eintrag wird hier (da Eintrag "1") als ungerade betrachtet. :(
    Aber wenn man es weiß, ists OK. :)
    Über die Syntax, wie das Flag gesetzt werden soll, steht gar nix da. Auch das englische Forum hilft dort nicht viel weiter.

    Mit etwas Probieren habe ich eine funktionsfähige Variante gefunden - ob dies auch die angedachte Syntax ist weiß ich nicht ;)

    Zur Funktionsweise:

    - Alle ungeradzahligen Einträge (bzw. die mit geradzahligem Index) UND alle Einträge für die KEINE BkColor einzeln definiert wurde erhalten die BkColor des ListView

    - Alle geradzahligen Einträge (bzw. die mit ungeradzahligem Index) erhalten die BkColor des ListViewItem, sofern dies definiert wurde.

    Hier ein Code-Beispiel:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <GuiListView.au3>
    Dim $aqua = 0x00FFFF, $khaki = 0xF0E68C, $yellow = 0xffff00

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

    $Form1 = GUICreate("AForm1", 370, 270, 193, 115)
    $ListView1 = GUICtrlCreateListView("< 0 >|< 1 >|< 2 >", 10, 10, 350, 250)
    GUICtrlSetBkColor(-1, $aqua); gilt für jeden ungeraden Eintrag (1. , 3. , 5. usw.) UND für alle Einträge OHNE eigene BackColor-Definition
    GUICtrlSetBkColor($ListView1, $GUI_BKCOLOR_LV_ALTERNATE)
    $ListView1_0 = GUICtrlCreateListViewItem("Erster|ListView BackColor|odd line", $ListView1) ; BackColor von Listview
    GUICtrlSetBkColor(-1, $yellow) ; wird durch $GUI_BKCOLOR_LV_ALTERNATE ignoriert
    $ListView1_1 = GUICtrlCreateListViewItem("Zweiter|ListViewItem BackColor|even line", $ListView1)
    GUICtrlSetBkColor(-1, $yellow)
    $ListView1_2 = GUICtrlCreateListViewItem("Dritter|ListView BackColor|odd line", $ListView1) ; BackColor von Listview
    $ListView1_3 = GUICtrlCreateListViewItem("Vierter|ListViewItem BackColor|even line", $ListView1)
    GUICtrlSetBkColor(-1, $khaki)
    $ListView1_4 = GUICtrlCreateListViewItem("Fünfter|ListView BackColor|odd line", $ListView1) ; BackColor von Listview
    $ListView1_5 = GUICtrlCreateListViewItem("Sechster|ListView BackColor (kein eig. BkCol. defin.)|even line", $ListView1) ; BackColor von Listview
    _GUICtrlListViewSetColumnWidth ($listview1, 0, 65)
    _GUICtrlListViewSetColumnWidth ($listview1, 1, 220)
    _GUICtrlListViewSetColumnWidth ($listview1, 2, 61)
    GUISetState(@SW_SHOW)

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

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

    [/autoit]

    EDIT:
    Der eigentliche Sinn liegt wohl darin, dass für die ungeraden Einträge die BkColor des ListView erzwungen wird. Das ist auch praktisch, so versehe ich einfach jeden Eintrag mit einer alternativen BkColor - aber nur die geraden sind davon betroffen und ich erreiche eine abwechselnde Colorierung.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <GuiListView.au3>
    Dim $aqua = 0x00FFFF, $khaki = 0xF0E68C, $yellow = 0xffff00
    Dim $arLvItem[8]
    $Form1 = GUICreate("AForm1", 370, 270, 193, 115)
    $ListView1 = GUICtrlCreateListView("< 0 >|< 1 >|< 2 >", 10, 10, 350, 250)
    GUICtrlSetBkColor(-1, $aqua); gilt für jeden ungeraden Eintrag (1. , 3. , 5. usw.) UND für alle Einträge OHNE eigene BackColor-Definition
    GUICtrlSetBkColor($ListView1, $GUI_BKCOLOR_LV_ALTERNATE)
    For $i = 0 To UBound($arLvItem) -1
    $arLvItem[$i] = GUICtrlCreateListViewItem("Eintrag "& $i &"|"& $i+1 &"|"& $i+2, $ListView1)
    GUICtrlSetBkColor(-1, $yellow)
    Next
    _GUICtrlListViewSetColumnWidth ($Listview1, 0, 65)
    _GUICtrlListViewSetColumnWidth ($Listview1, 1, 220)
    _GUICtrlListViewSetColumnWidth ($Listview1, 2, 61)
    GUISetState(@SW_SHOW)

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

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

    [/autoit]
  • GUI -> mehrere Dateien und/oder Ordnerinhalt importieren

    • BugFix
    • 10. Februar 2007 um 23:41

    Hilfe für den Ansatz:

    - GUI mit ListeView (Style Multiselect!)
    - Ordner mit FileSelectFolder aussuchen
    - alle Dateien des gewünschten Typs auslesen und in die Liste eintragen
    - gewünschte Dateien markieren
    - selektierte Files konvertieren

  • Auslesen eines Textfeldes

    • BugFix
    • 10. Februar 2007 um 22:57

    Hier ein Beispiel:

    [autoit]


    Dim $text = "Systemeigenschaften"
    Dim $ClassNameNN = "Button1"

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

    Send("{LWINDOWN}{PAUSE}{LWINUP}")
    WinWaitActive($text)
    ControlClick($text,"",$ClassNameNN)

    [/autoit]
  • Hilfetext in eigenen Funktionen

    • BugFix
    • 10. Februar 2007 um 16:26
    Zitat

    ( This file is located in Scite Directory \ api \ au3.user.calltips.api for any reason to backup. )


    In dieser Datei fügst du die entsprechenden Zeilen ein.
    Z.B. so:
    _DoSQL("SQL-Befehl", Datenbank-Pfad)Führt SQL-Befehl in DB aus. Gibt Ergebnis zurück.(#Include <UDFs.au3>)

  • Hilfetext in eigenen Funktionen

    • BugFix
    • 10. Februar 2007 um 14:00

    Du meinst, eine Einblendung der Parameter, wie bei den Standardfunktionen während des Editierens?

  • GUISetOnEvent & Func mit Parametern

    • BugFix
    • 9. Februar 2007 um 21:23

    snoozer

    Zitat

    geht denk ich mal auf jeden fall warum ja kein plan^^ ist halt so^^ wenn nicht dann müssen die experten ran^^

    Dann versuch mal zu starten ;)
    Kann nicht gehen, da falsche Definition: GUICtrlSetOnEvent(-1, "_Click(1, 2)")

  • GUISetOnEvent & Func mit Parametern

    • BugFix
    • 9. Februar 2007 um 21:11

    Das geht so nicht.
    GUICtrlSetOnEvent($Button1, "_Click") definiert, das bei Click des Buttons die Funktion "_Click()" aufgerufen wird.
    Parameter kannst du nur in der Funktion selber festlegen.

    Ist zwar etwas umständlich, aber so gehts:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

    Opt("GUIOnEventMode", 1)
    $mainwindow = GUICreate("Func mit Param. - Test", 200, 200)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    $Button1 = GUICtrlCreateButton("1 + 2", 5, 50, 60)
    GUICtrlSetOnEvent($Button1, "_Click")
    $Button2 = GUICtrlCreateButton("5 + 8", 5, 100, 60)
    GUICtrlSetOnEvent($Button2, "_Click2")
    GUISetState(@SW_SHOW)

    While 1
    Sleep(1000)
    WEnd

    Func _Click()
    _msg(1, 2)
    EndFunc

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

    Func _Click2()
    _msg(5, 8)
    EndFunc

    Func _msg($v1, $v2)
    MsgBox(0, "", $v1 + $v2)
    EndFunc

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

    Func _Exit()
    Exit
    EndFunc

    [/autoit]
  • Array in Liste ausgeben ?

    • BugFix
    • 9. Februar 2007 um 20:09

    Ausgabe in Liste:

    [autoit]

    For $x = 1 to $aRecords[0]
    GUICtrlSetData($Liste, $aRecords[$i])
    Next

    [/autoit]


    oder über MsgBox:

    [autoit]

    $txt = ""
    For $x = 1 to $aRecords[0]
    $txt &= $aRecords[$i] & @LF
    Next
    MsgBox(0, '', $txt)

    [/autoit]
  • Geldbetrag stückeln

    • BugFix
    • 9. Februar 2007 um 10:26

    Hallo, hatte gar nicht soviel Resonanz erwartet :)
    Schön, wenn es euch auch gefällt.
    Der Picturepath war natürlich rein willkürlich auf mein System zugeschnitten - aber deshalb habe ich ihn ja als Variable erstellt, mit einem Handgriff von jedem zu ändern ;)
    Mir ist noch eine Idee zur Verbesserung eingefallen, werdet ihr dann als Edit im ersten Post finden.

    Edit:

    Zitat

    P.S: Hattest Du keine Probleme das Geld in den PC zu bekommen? Im Photoshop CS kommt doch tatsächlich eine Warnmeldung (Verboten!) wenn man Geldscheine bearbeiten möchte.


    Photoshop *grr* *schüttel* - Ich weiß schon, warum ich Gimp benutze. :rofl:

  • Geldbetrag stückeln

    • BugFix
    • 9. Februar 2007 um 02:25

    Hi,
    sicher wird niemand das Proggi brauchen können ;) aber ich zeigs euch trotzdem mal.
    Fragestellung war: Wie kann ich einen beliebigen Geldbetrag auf die minimale Anzahl Banknoten und Münzen verteilen.

    Ich denke das Ergebnis sieht ganz hübsch aus :)

    Zum Testen braucht ihr die angehängte Datei "Euro.zip", wegen der Bildchen ;)

    Spoiler anzeigen
    [autoit]


    #include <GUIConstants.au3>
    Dim $backcolor = 0x4A579B, $fcolor = 0xFFD700
    Dim $picpath = "D:\Eigene Bilder\Euro\"
    Dim $arVal[15], $arLabel[15], $arCheckBtn[15][2], $arCheck[15]
    For $i = 0 To 14
    $arCheckBtn[$i][1] = 1
    Next
    $arVal[0] = 500
    $arVal[1] = 200
    $arVal[2] = 100
    $arVal[3] = 50
    $arVal[4] = 20
    $arVal[5] = 10
    $arVal[6] = 5
    $arVal[7] = 2
    $arVal[8] = 1
    $arVal[9] = 0.5
    $arVal[10] = 0.2
    $arVal[11] = 0.1
    $arVal[12] = 0.05
    $arVal[13] = 0.02
    $arVal[14] = 0.01

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

    $Form1 = GUICreate("Geldbetrag stückeln", 500, 504, -1, -1)
    GUISetBkColor($backcolor)
    GUICtrlCreatePic($picpath & "500eur.jpg", 25, 32, 100, 51, BitOR($SS_NOTIFY,$WS_GROUP))
    GUICtrlCreatePic($picpath & "200eur.jpg", 140, 33, 100, 54, BitOR($SS_NOTIFY,$WS_GROUP))
    GUICtrlCreatePic($picpath & "100eur.jpg", 253, 32, 100, 56, BitOR($SS_NOTIFY,$WS_GROUP))
    GUICtrlCreatePic($picpath & "50eur.jpg", 370, 31, 100, 55, BitOR($SS_NOTIFY,$WS_GROUP))
    GUICtrlCreatePic($picpath & "20eur.jpg", 25, 118, 100, 54, BitOR($SS_NOTIFY,$WS_GROUP))
    GUICtrlCreatePic($picpath & "10eur.jpg", 189, 121, 100, 53, BitOR($SS_NOTIFY,$WS_GROUP))
    GUICtrlCreatePic($picpath & "5eur.jpg", 371, 121, 100, 53, BitOR($SS_NOTIFY,$WS_GROUP))
    GUICtrlCreatePic($picpath & "2eur.jpg", 25, 215, 75, 75, BitOR($SS_NOTIFY,$WS_GROUP))
    GUICtrlCreatePic($picpath & "1eur.jpg", 150, 215, 75, 75, BitOR($SS_NOTIFY,$WS_GROUP))
    GUICtrlCreatePic($picpath & "50ct.jpg", 275, 215, 75, 75, BitOR($SS_NOTIFY,$WS_GROUP))
    GUICtrlCreatePic($picpath & "20ct.jpg", 400, 215, 75, 75, BitOR($SS_NOTIFY,$WS_GROUP))
    GUICtrlCreatePic($picpath & "10ct.jpg", 25, 320, 75, 75, BitOR($SS_NOTIFY,$WS_GROUP))
    GUICtrlCreatePic($picpath & "5ct.jpg", 150, 320, 75, 75, BitOR($SS_NOTIFY,$WS_GROUP))
    GUICtrlCreatePic($picpath & "2ct.jpg", 275, 320, 75, 75, BitOR($SS_NOTIFY,$WS_GROUP))
    GUICtrlCreatePic($picpath & "1ct.jpg", 400, 320, 75, 75, BitOR($SS_NOTIFY,$WS_GROUP))
    $arLabel[0] = GUICtrlCreateLabel("", 52, 11, 45, 17, $SS_CENTER)
    GUICtrlSetColor(-1, $fcolor)
    GUICtrlSetFont(-1, 10, 800)
    $arCheckBtn[0][0] = GUICtrlCreateButton("" ,25, 11, 12, 12, $BS_ICON)
    $arCheckBtn[1][0] = GUICtrlCreateButton("" ,140, 11, 12, 12, $BS_ICON)
    $arCheckBtn[2][0] = GUICtrlCreateButton("" ,253, 11, 12, 12, $BS_ICON)
    $arCheckBtn[3][0] = GUICtrlCreateButton("" ,370, 11, 12, 12, $BS_ICON)
    $arCheckBtn[4][0] = GUICtrlCreateButton("" ,25, 96, 12, 12, $BS_ICON)
    $arCheckBtn[5][0] = GUICtrlCreateButton("" ,189, 96, 12, 12, $BS_ICON)
    $arCheckBtn[6][0] = GUICtrlCreateButton("" ,371, 96, 12, 12, $BS_ICON)
    $arCheckBtn[7][0] = GUICtrlCreateButton("" ,25, 190, 12, 12, $BS_ICON)
    $arCheckBtn[8][0] = GUICtrlCreateButton("" ,150, 190,12,12, $BS_ICON)
    $arCheckBtn[9][0] = GUICtrlCreateButton("" ,275, 190,12,12, $BS_ICON)
    $arCheckBtn[10][0] = GUICtrlCreateButton("" ,400, 190,12,12, $BS_ICON)
    $arCheckBtn[11][0] = GUICtrlCreateButton("" ,25, 297,12,12, $BS_ICON)
    $arCheckBtn[12][0] = GUICtrlCreateButton("" ,150, 297,12,12, $BS_ICON)
    $arCheckBtn[13][0] = GUICtrlCreateButton("" ,275, 297,12,12, $BS_ICON)
    $arCheckBtn[14][0] = GUICtrlCreateButton("" ,400, 297,12,12, $BS_ICON)
    For $i = 0 To 14
    GUICtrlSetImage($arCheckBtn[$i][0], $picpath & "check12x12.ico")
    Next
    GUICtrlSetState(-1, $GUI_CHECKED)
    $arLabel[1] = GUICtrlCreateLabel("", 165, 11, 45, 17, $SS_CENTER)
    GUICtrlSetColor(-1, $fcolor)
    GUICtrlSetFont(-1, 10, 800)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $arLabel[2] = GUICtrlCreateLabel("", 279, 11, 45, 17, $SS_CENTER)
    GUICtrlSetColor(-1, $fcolor)
    GUICtrlSetFont(-1, 10, 800)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $arLabel[3] = GUICtrlCreateLabel("", 400, 11, 45, 17, $SS_CENTER)
    GUICtrlSetColor(-1, $fcolor)
    GUICtrlSetFont(-1, 10, 800)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $arLabel[4] = GUICtrlCreateLabel("", 52, 96, 45, 17, $SS_CENTER)
    GUICtrlSetColor(-1, $fcolor)
    GUICtrlSetFont(-1, 10, 800)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $arLabel[5] = GUICtrlCreateLabel("", 214, 96, 45, 17, $SS_CENTER)
    GUICtrlSetColor(-1, $fcolor)
    GUICtrlSetFont(-1, 10, 800)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $arLabel[6] = GUICtrlCreateLabel("", 400, 96, 45, 17, $SS_CENTER)
    GUICtrlSetColor(-1, $fcolor)
    GUICtrlSetFont(-1, 10, 800)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $arLabel[7] = GUICtrlCreateLabel("", 41, 190, 43, 17, $SS_CENTER)
    GUICtrlSetColor(-1, $fcolor)
    GUICtrlSetFont(-1, 10, 800)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $arLabel[8] = GUICtrlCreateLabel("", 166, 190, 43, 17, $SS_CENTER)
    GUICtrlSetColor(-1, $fcolor)
    GUICtrlSetFont(-1, 10, 800)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $arLabel[9] = GUICtrlCreateLabel("", 288, 190, 49, 17, $SS_CENTER)
    GUICtrlSetColor(-1, $fcolor)
    GUICtrlSetFont(-1, 10, 800)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $arLabel[10] = GUICtrlCreateLabel("", 412, 190, 49, 17, $SS_CENTER)
    GUICtrlSetColor(-1, $fcolor)
    GUICtrlSetFont(-1, 10, 800)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $arLabel[11] = GUICtrlCreateLabel("", 41, 297, 49, 17, $SS_CENTER)
    GUICtrlSetColor(-1, $fcolor)
    GUICtrlSetFont(-1, 10, 800)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $arLabel[12] = GUICtrlCreateLabel("", 166, 297, 49, 17, $SS_CENTER)
    GUICtrlSetColor(-1, $fcolor)
    GUICtrlSetFont(-1, 10, 800)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $arLabel[13] = GUICtrlCreateLabel("", 288, 297, 49, 17, $SS_CENTER)
    GUICtrlSetColor(-1, $fcolor)
    GUICtrlSetFont(-1, 10, 800)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $arLabel[14] = GUICtrlCreateLabel("", 412, 297, 49, 17, $SS_CENTER)
    GUICtrlSetColor(-1, $fcolor)
    GUICtrlSetFont(-1, 10, 800)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $Group1 = GUICtrlCreateGroup("Betrag", 24, 420, 453, 59)
    GUICtrlSetFont(-1, 10, 500)
    GUICtrlSetColor(-1, $fcolor)
    $Input1 = GUICtrlCreateInput("", 64, 442, 141, 21, BitOR($ES_RIGHT,$ES_AUTOHSCROLL))
    GUICtrlSetColor(-1, $backcolor)
    GUICtrlSetBkColor(-1, $fcolor)
    GUICtrlSetFont(-1, 10, 800)
    GUICtrlSetTip(-1, "Währung ganzzahlig oder mit maximal" & @LF & "2 Nachkommastellen eingeben." & @LF & "(Komma, nicht Dezimalpunkt verwenden.)")
    $ret = _GUICtrlCreateColorButton("Stückelung", 316, 442, 125, 21, $backcolor, $fcolor)
    $Button1 = $ret[0]
    $Label16 = GUICtrlCreateLabel("EUR", 210, 445, 40, 17)
    GUICtrlSetColor(-1, $fcolor)
    GUICtrlSetFont(-1, 10, 500)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUISetState(@SW_SHOW)
    GUICtrlSetState($Input1, $GUI_FOCUS)
    ToolTip("Nicht verfügbare Werte können über die" & @LF & "jeweiligen Button abgewählt werden.", @DesktopWidth/2 -250, @DesktopHeight/2 -252)
    Sleep(3500)
    ToolTip("")

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

    Do
    $msg = GUIGetMsg()
    For $i = 0 To 14
    If $msg = $arCheckBtn[$i][0] Then
    If $arCheckBtn[$i][1] = 0 Then
    GUICtrlSetImage($arCheckBtn[$i][0], $picpath & "check12x12.ico")
    $arCheckBtn[$i][1] = 1
    ElseIf $arCheckBtn[$i][1] = 1 Then
    GUICtrlSetImage($arCheckBtn[$i][0], $picpath & "uncheck12x12.ico")
    $arCheckBtn[$i][1] = 0
    EndIf
    GUICtrlSetState($Input1, $GUI_FOCUS)
    EndIf
    Next
    If $msg = $Button1 Then
    GUICtrlSetStyle($Button1, $SS_ETCHEDFRAME)
    Sleep(150)
    GUICtrlSetStyle($Button1, $SS_NOTIFY + $SS_GRAYRECT)
    _Berechnung()
    EndIf
    Until $msg = $GUI_EVENT_CLOSE

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

    Func _Berechnung()
    For $i = 0 To 14
    GUICtrlSetData($arLabel[$i], "")
    Next
    $div = StringReplace(GUICtrlRead($Input1), ",", ".")
    If _StringIsMoney($div) = 1 Then
    If $div > 0 Then
    For $i = 0 To 14
    If ($div >= $arVal[$i] And $arCheckBtn[$i][1] = 1) Then
    $G = Int($div / $arVal[$i])
    If $G > 0 Then GUICtrlSetData($arLabel[$i], $G)
    $R = Round($div - ($arVal[$i] * $G), 2)
    If $R = 0 Then ExitLoop
    $div = $R
    EndIf
    Next
    If $R > 0 Then GUICtrlSetData($Input1, "Rest " & $div)
    EndIf
    Else
    MsgBox(16, 'Achtung!', "Eingaben bitte ganzzahlig oder max. 2 Nachkommastellen!")
    EndIf
    GUICtrlSetState($Input1, $GUI_FOCUS)
    EndFunc

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

    Func _StringIsMoney($checkString)
    Dim $len = StringLen($checkString)
    If StringInStr($checkString, ".") Then
    $val = StringSplit($checkString, ".")
    If $val[0] > 2 Then Return 0
    If ($len - StringInStr($checkString, ".")) > 2 Then Return 0
    EndIf
    For $i = 1 To $len
    $tmp = StringMid($checkString, $i, 1)
    If Not (StringIsInt($tmp) Or $tmp = ".") Then
    Return 0
    EndIf
    Next
    Return 1
    EndFunc

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

    ;=============================================================================
    ;
    ; Function Name: _GUICtrlCreateColorButton()
    ;
    ; Description: Creates a colored Button
    ;
    ; Syntax: _GUICtrlCreateColorButton($text, $left, $top, $width, $height,$bkcolor[,$fontcolor])
    ;
    ; Parameter(s); $text = The text of the control
    ; $left = The left side of the control
    ; $top = The top of the control
    ; $width = The width of the control
    ; $height = The height of the control
    ; $bkcolor = Backgroundcolor of the control
    ; $fontcolor = [optional] Fontcolor of the control
    ;
    ; Return Value(s): array[1] = used to change colors
    ; array[0] = notifies GUIGetMsg if user clicks
    ;
    ; Author: rakudave <[email='rakudave@gmx.net'][/email]>
    ;=============================================================================
    Func _GUICtrlCreateColorButton($text, $left, $top, $width, $height, $bkcolor, $fontcolor = -1)
    Local $colbut[2]
    If $fontcolor == -1 Then $fontcolor = 0x000000
    $colbut[0] = GUICtrlCreateLabel("", $left, $top, $width, $height, $SS_BLACKRECT)
    GUICtrlCreateLabel("", $left, $top, $width - 1, $height - 1, $SS_WHITERECT)
    GUICtrlCreateLabel("", $left + 1, $top + 1, $width - 2, $height - 2, $SS_GRAYRECT)
    $colbut[1] = GUICtrlCreateLabel($text, $left + 1, $top + 1, $width - 3, $height - 3, $SS_NOTIFY & $SS_CENTER)
    GUICtrlSetBkColor(-1, $bkcolor)
    GUICtrlSetColor(-1, $fontcolor)
    GUICtrlSetFont(-1, 10, 500)
    Return $colbut
    EndFunc ;==>_GUICtrlCreateColorButton

    [/autoit]

    EDIT:

    - ein Bugfix (Danke snoozer für den Hinweis), Fehler in der Restbetragsberechnung.
    Bsp.:
    Basisbetrag = 20,54 lieferte 1x 20 EUR; 1x 50 ct; 1x 2 ct; 1x 1ct !! (Inflation ;) )
    Bei Ausgabe der Zwischenergebnisse ( $R = Mod($div, $arVal[$i]) ) war $R = 0,5399999 !!
    Auch eine Umstellung auf: $R =$div - ($arVal[$i] * $G) führte zum identischen Fehler.
    Naja, mit Round() gehts jetzt :)

    - Neu dazugekommen: die einzelnen Geldwerte können bei Bedarf abgewählt werden, um nur in bestimmte Geldwerte zu wechseln.
    Dazu bitte nochmal die "Euro.zip" laden, es sind Icons hinzugekommen.

    Dateien

    MoneySplit.au3 9,84 kB – 292 Downloads Euro.zip 107,36 kB – 151 Downloads

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™