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

  • Fehler in der deutschen Hilfe bitte hier melden (Hilfedatei 3.3.8.1 2012.12.28)

    • BugFix
    • 28. Dezember 2012 um 21:37
    Zitat von PainTain

    Doch, alle anderen Beispiele haben Syntax-Highlighting, dieses nicht!
    Genau das wollt ich melden. X(


    Na dann hättest du das gleich so sagen sollen, jetzt ist es verständlich. ;)

  • Fehler in der deutschen Hilfe bitte hier melden (Hilfedatei 3.3.8.1 2012.12.28)

    • BugFix
    • 28. Dezember 2012 um 21:19
    Zitat von PainTain

    Ich hab einen Formatierungsfehler bei "@OSLang-Sprachcodes" gefunden:


    ?? Würdest du bitte den vermeintlichen Fehler posten. Das Abbild zeigt keinen Fehler.

  • DateEx.au3 ( _DateGetFormatted, _DateToDayNameLocale )

    • BugFix
    • 28. Dezember 2012 um 12:30

    Hi,
    da ich bei Datenerfassung so wenig, wie möglich Aufwand haben will, möchte ich für Datumswerte auch die jeweils kürzeste Form der Eingabe ermöglichen. Die Umwandlung in das Standard-Datumsformat D10 (TT.MM.JJJJ) soll dann automatisch erfolgen. Beim Schreiben der Funktion fiel mir dann ein, dass manchmal die Ausgabe des Datums in den verschieden Kurz- und Langformen wünschenswert ist.
    Somit habe ich das alles in dieser Funktion vereint. Im Gegensatz zu Datumsfunktion in z.B. Office gibt es hier für die Jahrhunderterkennung keinen fixen Wert. Jeder zweistellige Jahreswert, der größer als der Jetztwert ist wird als 19xx betrachtet. Somit ist ein zweistellig eingegebenes Geburtsjahr von Personen mit einem Alter bis zu 99 Jahren auch immer korrekt. (Den Jahrhundert-Parameter habe ich jetzt mal nicht flexibel gemacht. Die Funktion ist in der Form über 80 Jahre gültig - was danach kommt interessiert mich nicht :D)
    Das Datum wird immer auf Gültigkeit geprüft.

    Edit 29.12.2012
    Habe das nochmal überarbeitet (mit "-1" für Datum wird das Heute-Datum verwendet (Standard); auch Eingabe des englischen Datumformats; Ausgabevarianten erweitert; Prüfung auf Datums-Gültigkeit erfolgt immer; Include der Date.au3 nicht mehr erforderlich).

    Eingabemöglichkeiten sind:

    • TTMMJJJJ
    • TTMMJJ
    • (T)T.(M)M.(JJ)JJ
    • YYYY/(M)M/(D)D


    Ausgabevarianten sind:

    • TT.MM.JJJJ ==> 29.12.2012 (Standard)
    • ttt, TT.MM.JJJJ ==> Sa, 29.12.2012
    • ttt, TT. mmm JJJJ ==> Sa, 29. Dez 2012
    • ttt, TT. mmmm JJJJ ==> Sa, 29. Dezember 2012
    • tttt, TT.MM.JJJJ ==> Samstag, 29.12.2012
    • tttt, TT. mmm JJJJ ==> Samstag, 29. Dez 2012
    • tttt, TT. mmmm JJJJ ==> Samstag, 29. Dezember 2012
      Array mit allen Formen [29,12,2012,Sa,Samstag,Dez,Dezember]
    _DateGetFormatted
    [autoit]


    ConsoleWrite(_DateGetFormatted() & @CRLF)
    ConsoleWrite(_DateGetFormatted(-1, 1) & @CRLF)
    ConsoleWrite(_DateGetFormatted('120510', 2) & @CRLF)
    ConsoleWrite(_DateGetFormatted('1.3.12', 3) & @CRLF)
    ConsoleWrite(_DateGetFormatted('18051920', 4) & @CRLF)
    ConsoleWrite(_DateGetFormatted('2012/3/31', 5) & @CRLF)
    ConsoleWrite(_DateGetFormatted('2012/06/05', 6) & @CRLF)

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

    #cs - Output
    29.12.2012
    Sa, 29.12.2012
    Mi, 12. Mai 2010
    Do, 01. März 2012
    Dienstag, 18.05.1920
    Samstag, 31. Mrz 2012
    Dienstag, 05. Juni 2012
    #ce

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

    ;===============================================================================
    ; Function Name....: _DateGetFormatted
    ; Description......: Gibt aus verschiedenen Eingabevarianten das Datum in
    ; .................: wählbaren Formaten zurück, Datum wird auf Gültigkeit geprüft.
    ; .................: Bei zweistelligem Jahr wird bei > akt. Jahr 19xx verwendet.
    ; Parameter(s).....: $_sDate Datums-String, folgende Eingaben sind möglich:
    ; .................: TTMMJJJJ
    ; .................: TTMMJJ
    ; .................: (T)T.(M)M.(JJ)JJ
    ; .................: YYYY/(M)M/(D)D
    ; .................: -1 =Heute (Standard)
    ; .................: $_iType Rückgabetyp, 0 = TT.MM.JJJJ ==> 29.12.2012 (Standard)
    ; .................: 1 = ttt, TT.MM.JJJJ ==> Sa, 29.12.2012
    ; .................: 2 = ttt, TT. mmm JJJJ ==> Sa, 29. Dez 2012
    ; .................: 3 = ttt, TT. mmmm JJJJ ==> Sa, 29. Dezember 2012
    ; .................: 4 = tttt, TT.MM.JJJJ ==> Samstag, 29.12.2012
    ; .................: 5 = tttt, TT. mmm JJJJ ==> Samstag, 29. Dez 2012
    ; .................: 6 = tttt, TT. mmmm JJJJ ==> Samstag, 29. Dezember 2012
    ; .................: 7 = Array mit allen Formen [29,12,2012,Sa,Samstag,Dez,Dezember]
    ; Return Value(s)..: Erfolg Datumsstring im gewählten Format od. Array mit allen mgl. Werten
    ; .................: Fehler Leerstring error = 1 Datumsstring fehlerhaft
    ; .................: error = 2 Datum ist ungültig
    ; Author(s)........: BugFix ( [email='bugfix@autoit.de'][/email] )
    ;===============================================================================
    Func _DateGetFormatted($_sDate=-1, $_iType=0)
    Local $sCentury = '20', $sRetDate, $aDate
    If $_sDate = -1 Then
    $sRetDate = @MDAY & '.' & @MON & '.' & @YEAR
    Else
    If StringInStr($_sDate, '.') Then
    $aDate = StringSplit($_sDate, '.')
    If $aDate[0] <> 3 Then Return SetError(1,0,'')
    $_sDate = StringRight('0' & $aDate[1], 2) & StringRight('0' & $aDate[2], 2) & $aDate[3]
    EndIf
    If StringInStr($_sDate, '/') Then
    $aDate = StringSplit($_sDate, '/')
    If $aDate[0] <> 3 Then Return SetError(1,0,'')
    $_sDate = StringRight('0' & $aDate[3], 2) & StringRight('0' & $aDate[2], 2) & $aDate[3]
    EndIf
    Switch StringLen($_sDate)
    Case 6
    If StringRight($_sDate, 2) > StringRight(@YEAR, 2) Then $sCentury = '19'
    $sRetDate = StringRegExpReplace($_sDate, '(\d{2})(\d{2})(\d{2})', '$1.$2.' & $sCentury & '$3')
    Case 8
    $sRetDate = StringRegExpReplace($_sDate, '(\d{2})(\d{2})(\d{4})', '$1.$2.$3')
    Case Else
    Return SetError(1,0,'')
    EndSwitch
    EndIf
    $aDate = StringRegExp($sRetDate, '(\d{2})\.(\d{2})\.(\d{4})', 3)
    If @error Then Return SetError(1,0,'')
    If $_iType > 7 Then $_iType = 0
    Local $tSYSTEMTIME = DllStructCreate("struct; word Year;word Month;word Dow;word Day;word Hour;word Minute;word Second;word MSeconds; endstruct")
    DllStructSetData($tSYSTEMTIME, 'Year', StringRight($sRetDate, 4))
    DllStructSetData($tSYSTEMTIME, 'Month', StringMid($sRetDate, 4, 2))
    DllStructSetData($tSYSTEMTIME, 'Day', StringLeft($sRetDate, 2))
    Local $sFormat, $tFormat = DllStructCreate('wchar[64];'), $tDateStr = DllStructCreate('wchar[64];')
    Switch $_iType
    Case 0 ; == nur Datum, z.B. "28.12.2012"
    $sFormat = "dd'.'MM'.'yyyy"
    Case 1 ; == Tag als Kürzel, z.B. "Fr, 28.12.2012"
    $sFormat = "ddd',' dd'.'MM'.'yyyy"
    Case 2 ; == Tag als Kürzel u. Monat als Kürzel, z.B. "Fr, 28. Dez 2012"
    $sFormat = "ddd',' dd'.' MMM yyyy"
    Case 3 ; == Tag als Kürzel u. Monat voll, z.B. "Fr, 28. Dezember 2012"
    $sFormat = "ddd',' dd'.' MMMM yyyy"
    Case 4 ; == Tag voll, z.B. "Freitag, 28.12.2012"
    $sFormat = "dddd',' dd'.'MM'.'yyyy"
    Case 5 ; == Tag voll u. Monat voll, z.B. "Freitag, 28. Dezember 2012"
    $sFormat = "dddd',' dd'.' MMM yyyy"
    Case 6 ; == Tag voll u. Monat als Kürzel, z.B. "Freitag, 28. Dez 2012"
    $sFormat = "dddd',' dd'.' MMMM yyyy"
    Case 7 ; == alle Kurz- und Langformen zur Rückgabe als Array
    $sFormat = "dd','MM','yyyy','ddd','dddd','MMM','MMMM"
    EndSwitch
    DllStructSetData($tFormat, 1, $sFormat)
    DllCall("kernel32", "long", "GetDateFormatW", "long", 0, "long", 0, _
    "ptr", DllStructGetPtr($tSYSTEMTIME), "ptr", DllStructGetPtr($tFormat), "ptr", DllStructGetPtr($tDateStr), "long", 64)
    Local $sRet = DllStructGetData($tDateStr, 1)
    If $sRet = '' Then Return SetError(2,0,'')
    If $_iType = 7 Then Return StringSplit($sRet, ',', 2)
    Return DllStructGetData($tDateStr, 1)
    EndFunc ;==>_DateGetFormatted

    [/autoit]

    ... und eine weitere Funktion hinzugefügt:
    _DateToDayNameLocale()
    Gibt zu einem Datum den Wochentag (Lang-/Kurzform) gemäß den lokalen Einstellungen (Ländereinstellung) zurück. D.h. der Wochentag wird immer gemäß den Einstellungen des Nutzer-PC angezeigt in der entsprechenden Landessprache.
    Eingabe des Datums als Einzelparameter (Jahr, Monat, Tag) + ein Parameter für den Typ (Lang-/Kurzform) oder als Datumsstring der Form: "(T)T.(M)M.(JJ)JJ", "YYYY/(M)M/(D)D"
    Wird das Datum als String übergeben, ist der zweite Parameter für den Typ zuständig.
    Standardmäßig ist der Parameter für Jahr/Datumsstring mit "-1" vorbelegt für das aktuelle Datum.

    _DateToDayNameLocale
    [autoit]


    ConsoleWrite(_DateToDayNameLocale() & @CRLF) ; == Wochentag Heute-lang
    ConsoleWrite(_DateToDayNameLocale(-1, 0) & @CRLF) ; == Wochentag Heute-kurz
    ; == Datum als String
    ConsoleWrite(_DateToDayNameLocale('29.12.12') & @CRLF) ; == Wochentag Datum deutsch TT.MM.JJ -lang
    ConsoleWrite(_DateToDayNameLocale('2.2.2012') & @CRLF) ; == Wochentag Datum deutsch T.M.JJJJ -lang
    ConsoleWrite(_DateToDayNameLocale('2012/12/29') & @CRLF) ; == Wochentag Datum englisch YYYY/MM/DD -lang
    ConsoleWrite(_DateToDayNameLocale('29.12.12', 0) & @CRLF) ; == Wochentag Datum deutsch TT.MM.JJ -kurz
    ConsoleWrite(_DateToDayNameLocale('1.3.09', 0) & @CRLF) ; == Wochentag Datum deutsch T.M.JJ -kurz
    ConsoleWrite(_DateToDayNameLocale('2012/2/9', 0) & @CRLF) ; == Wochentag Datum englisch YYYY/M/D -kurz
    ; == Datum als Einzelwerte
    ConsoleWrite(_DateToDayNameLocale(2012, 11, 30, 0) & @CRLF) ; == Wochentag -kurz
    ConsoleWrite(_DateToDayNameLocale(2012, 12, 29) & @CRLF) ; == Wochentag -lang
    ; == Test fehlerhaftes Datum
    $ret = _DateToDayNameLocale(2012, 11, 31, 0)
    ConsoleWrite('>' & $ret & '< @error: ' & @error & @CRLF)

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

    #cs - Output
    Samstag
    Sa
    Samstag
    Donnerstag
    Samstag
    Sa
    So
    Do
    Fr
    Samstag
    >< @error: 2
    #ce

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

    ;===============================================================================
    ; Function Name....: _DateToDayNameLocale
    ; Description......: Gibt zu einem Datum den Wochentag (Lang-/Kurzform) gemäß den lokalen
    ; .................: Einstellungen (Ländereinstellung) zurück
    ; Parameter(s).....: $_vDateYear Jahr oder String mit Datum der Formen:
    ; .................: "(T)T.(M)M.(JJ)JJ", "YYYY/(M)M/(D)D"
    ; .................: Standard= -1 aktuelles Tagesdatum
    ; .................: $_vLongMonth Monat oder wenn 1.Param=Datumsstring: Lang-/Kurzform (1/0)
    ; .................: $_iDay Tag (nur für Einzelwertübergabe, sonst 0)
    ; .................: $_iLong Lang-/Kurzform (1/0) des Tagesnamens, Standard=1
    ; Return Value(s)..: Erfolg Name Wochentag (lang od. kurz) nach lokalen Einstellungen
    ; .................: Fehler Leerstring set @error = 1 Datumsstring fehlerhaft
    ; .................: = 2 Datum ungültig
    ; Author(s)........: BugFix ( [email='bugfix@autoit.de'][/email] )
    ;===============================================================================
    Func _DateToDayNameLocale($_vDateYear=-1, $_vLongMonth=1, $_iDay=0, $_iLong=1)
    Local $iDay = @MDAY, $iMon = @MON, $iYear = @YEAR, $aDate, $tmp
    If $_iDay <> 0 Then
    $iDay = $_iDay
    $iMon = $_vLongMonth
    $iYear = $_vDateYear
    Else
    $_iLong = $_vLongMonth
    If $_vDateYear <> -1 Then
    If StringInStr($_vDateYear, '.') Then
    $aDate = StringRegExp($_vDateYear, '(\d{1,2})\.(\d{1,2})\.(\d{2,4})', 3)
    If @error Then Return SetError(1,0,'')
    If StringLen($aDate[2]) = 2 And $aDate[2] > StringRight(@YEAR, 2) Then
    $aDate[2] = '19' & $aDate[2]
    Else
    $aDate[2] = '20' & $aDate[2]
    EndIf
    $iDay = $aDate[0]
    $iMon = $aDate[1]
    $iYear = $aDate[2]
    EndIf
    If StringInStr($_vDateYear, '/') Then
    $aDate = StringRegExp($_vDateYear, '(\d{4})/(\d{1,2})/(\d{1,2})', 3)
    If @error Then Return SetError(1,0,'')
    $iDay = $aDate[2]
    $iMon = $aDate[1]
    $iYear = $aDate[0]
    EndIf
    EndIf
    EndIf
    If $_iLong <> 0 Then $_iLong = 1
    Local $tSYSTEMTIME = DllStructCreate("struct; word Year;word Month;word Dow;word Day;word Hour;word Minute;word Second;word MSeconds; endstruct")
    DllStructSetData($tSYSTEMTIME, 'Year', $iYear)
    DllStructSetData($tSYSTEMTIME, 'Month', $iMon)
    DllStructSetData($tSYSTEMTIME, 'Day', $iDay)
    Local $tFormat = DllStructCreate('wchar[64];'), $tDateStr = DllStructCreate('wchar[64];')
    DllStructSetData($tFormat, 1, "ddd','dddd")
    Local $ret = DllCall("kernel32", "long", "GetDateFormatW", "long", 0, "long", 0, _
    "ptr", DllStructGetPtr($tSYSTEMTIME), "ptr", DllStructGetPtr($tFormat), "ptr", DllStructGetPtr($tDateStr), "long", 64)
    Local $sDayName = DllStructGetData($tDateStr, 1)
    If $sDayName = '' Then Return SetError(2,0,'')
    Local $aDayName = StringSplit($sDayName, ',', 2)
    Return $aDayName[$_iLong]
    EndFunc ;==>_DateToDayNameLocale

    [/autoit]


    Um nur den deutschen Wochentag auszugeben, reicht natürlich auch diese Variante

    Spoiler anzeigen
    [autoit]

    #include <Date.au3>
    Func _DateToDayName($_iYear, $_iMonth, $_iDay)
    Local $aDayName[8] = [7,'Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag','Sonntag']
    Local $iDayName = _DateToDayOfWeekISO($_iYear, $_iMonth, $_iDay)
    If @error Then Return SetError(1,0,'')
    Return $aDayName[$iDayName]
    EndFunc

    [/autoit]

    Dateien

    DateEx.au3 8,43 kB – 426 Downloads
  • Projekt: The Empire!

    • BugFix
    • 27. Dezember 2012 um 21:33

    - letzter Post hier vor > 3 Jahren
    - letzte Aktivität des TE hier im Forum vor 10 Monaten

    Das sollte deine Frage beantworten... :whistling:

  • Steam Client ohne GUI im Chatmodus

    • BugFix
    • 27. Dezember 2012 um 17:16

    Anhand der AGB ergibt sich eine eindeutige Rechtslage: Das Vorhaben ist illegal!

    [CLOSED]

  • Kreativitätswettbewerb: Gestaltung Header Forum

    • BugFix
    • 25. Dezember 2012 um 22:27

    Da ich weiß, dass sich viele grafisch talentierte User unter uns befinden kam mir die Idee einen Wettbewerb zur Gestaltung unserer Foren-Header-Grafik ins Leben zu rufen.
    Die Idee dahinter ist, dass man z.B. diese Grafiken für individuelle Styles nutzen kann. Eventuell ist ja auch etwas so gut, dass wir alle es unbedingt als das zentrale Image haben möchten. ;)

    Folgende Dinge sind zu berücksichtigen:

    - Das Image hat eine Größe von 1000x300 px (BxH)
    - Als Websitenhintergrundgrafik wird diese mehrfach nebeneinander eingebunden (je nach Displaygröße). Die linke und rechte Seite sollte somit eine ähnliche Farbgestaltung aufweisen für einen sauberen Übergang.
    - Die Grafik muss in Ebenen erstellt werden. Eine Ebene für die frei wählbare Farbe und dann Ebene(n) mit den Mustern.
    - Einzustellen ist dann die Rohdatei (z.B. bei Paint.NET die *.pdn) und das fertige Ergebnis. Zum besseren Vergleich schlage ich als Hintergrundfarbe für das Muster vor: 0x374D65

    Als Tipp:
    Die Farbverläufe gestalten mit
    • HSV: 0,0,100
    • Transparenz: 8

    Damit kann man recht gut die verschiedensten Farben als Hintergrund wählen. Ein Bsp. findet ihr in diesem Thread

    Auf dem Header-Image liegt noch das Logo: "autoit_logo_gtaspider.png" (468x60 px). Wer da etwas für sich selbst gestalten will und es ansprechend findet, kann es ja unter derselben Maßgabe wie den Header hier zusätzlich zeigen. Aber gegen das Logo von GtaSpider anzustinken sollte schwerfallen. :D

    Also nochmal zusammengefasst:
    Einen Sieger wird es hier nicht unbedingt geben. Ich hoffe dagegen auf viele tolle Grafiken, von denen jeder nach seinem Geschmack sein Lieblingsforum individualisieren kann. :thumbup:

  • Forenheader - zum Selbstgestalten

    • BugFix
    • 25. Dezember 2012 um 21:46

    Hi,

    ich habe mal mit Paint.NET ein Basismodell für das Foren-Header-Image erstellt (Forum_header.pdn). Eine Ebene enthält die Hintergrundfarbe zur freien Wahl, die anderen Ebenen sind mit elliptischen Auswahlen und Farbverlauf ( HSV: 0,0,100 - Transparenz: 8 ) dezent eingegraut.
    Im weiteren findet ihr als Anhang ein Muster im aktuellen Farbstyle.

    Dateien

    header.jpg 45,51 kB – 0 Downloads
  • Funktion in Funktion definieren

    • BugFix
    • 25. Dezember 2012 um 20:04

    Hi,
    Funktionen lassen sich in AutoIt nicht innerhalb von Funktionen definieren. In einigen Fällen, wäre sowas aber ganz brauchbar um z.B. mehrfach in einer Funktion eine seperate Routine auszuführen. Natürlich ließe sich das mit einer externen Funktion lösen, aber wenn diese Routine nur innerhalb der einen Funktion benötigt wird, ist es auch von der Übersichtlichkeit u.U. "schöner" alles beieinander zu haben ;).
    Um nun eine Funktion innerhalb einer Funktion defakto doch zu ermöglich kann man den Rekursiven Funktionsaufruf dazu "mißbrauchen" :D.

    Und so läßt sich das umsetzen:

    [autoit]

    MsgBox(0, 'Func-In-Func', _FuncInFunc(2, 3))

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

    Func _FuncInFunc($_p1, $_p2, $_fSub=False)
    Local $iReturn
    If $_fSub Then
    ; == hier die Funktion innerhalb der Funktion definieren, nur wirksam, wenn mit Parameter $_fSub=True aufgerufen
    $iReturn = $_p1^$_p2
    Else
    ; == hier die Standard-Funktion, die die Sub-Funktion aufruft
    $iReturn = ($_p1 + $_p2) * _FuncInFunc($_p1, $_p2, True) ; == (2+3) * 2^3 = 40
    ; == irgendwelche weitere Operationen
    ;..
    ;..
    ; == und nun nochmal die Sub-Funktion
    $iReturn += _FuncInFunc(5, 2, True) ; == 40 + 5^2 = 40 +25 = 65
    EndIf
    Return $iReturn
    EndFunc

    [/autoit]


    Vielleicht mal zum Vergleich die Variante mit getrennter Deklaration, wie allgemein üblich:

    [autoit]

    MsgBox(0, 'Aufruf separat', _Main(2, 3))

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

    Func _Main($_p1, $_p2)
    Local $iReturn = ($_p1 + $_p2) * _Sub($_p1, $_p2) ; == (2+3) * 2^3 = 40
    ; == irgendwelche weitere Operationen
    ;..
    ;..
    ; == und nun nochmal die Sub-Funktion
    $iReturn += _Sub(5, 2) ; == 40 + 5^2 = 40 +25 = 65
    Return $iReturn
    EndFunc

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

    Func _Sub($_p1, $_p2)
    Return $_p1^$_p2
    EndFunc

    [/autoit]
  • Was am meisten Verwendet wird

    • BugFix
    • 25. Dezember 2012 um 16:40
    Zitat von Skilkor

    Aber, wie würdest du es BugFix in autoit versuchen zu realisieren?


    Verstehe jetzt die Frage nicht. Mein beschriebener Lösungsweg ist der, den ich in AutoIt verwende.

  • Was am meisten Verwendet wird

    • BugFix
    • 25. Dezember 2012 um 16:22

    Im Allgemeinen löse ich mehrsprachige Programmierung anders.
    In Sprachdateien (language.german, language.english, language.france etc.) werden alle Ctrls aufgeführt mit Zuweisung der Entsprechung in der jeweiligen Sprache. ( z.B. "$cOpen=Öffnen", in der englischen Version dann: "$cOpen=Open" )
    Das ermöglicht auch die problemlose Erweiterung durch einfaches Hinzufügen einer neuen Sprachdatei. Für eine ausreichende Dimensionierung bei unterschiedlichen Begrifflängen in den Sprachen muss man natürlich sorgen.
    Dann werden die Begriffe in ein einziges Array eingelesen ( $aLang[Anz. Ctrls][Anzahl Sprachen] ) und je nach Sprachwahl on-the-fly den Ctrls zugewiesen.

  • Frohe Weihnachten!

    • BugFix
    • 24. Dezember 2012 um 15:21

    Ich verweise einfach mal auf einen Post von vor 6 Jahren. ;)

  • Array im Array

    • BugFix
    • 24. Dezember 2012 um 14:04

    Kannst auch das dazu nutzen.

  • PC geht immer aus

    • BugFix
    • 23. Dezember 2012 um 17:02

    Möglichkeiten mit hoher Wahrscheinlichkeit:
    - Netzteilproblem (Lüfter defekt; zu gering dimensioniert)
    - CPU-Kühlung zu gering

  • QR-Code Dll - Übergabe Errorlevel-Parameter, Aufruf: DestroyBuffer() ?

    • BugFix
    • 23. Dezember 2012 um 14:50

    Danke Andy.
    Ich vermute, noch wichtiger ist dieser Absatz:

    Zitat

    c) Data Conversion Efficiency
    QR Code has four types of conversion mode - numerical characters, alphanumerical/signs, binary, and Kanji characters
    - for encoding the data. Each mode has had considerations to improve its conversion efficiency. The number of cells
    required for each character in each mode is listed in Table 1.

    Ich interpretiere das so, da es 4 Umwandlungs-Modi gibt, wird immer der Modi angewandt der das niedrigste Niveau hat. Denn Alnum enthält Num, Binary enthält wiederum auch Alnum und Kanji kann alles sein. Dementsprechend steigt der Platzbedarf an.
    Also als Bsp.
    - nur Ziffern: jedes Zeichen 3,3 Cells
    - taucht ein Buchstabe mit auf: für jedes Zeichen (auch die bereits vorhandenen Ziffern): 5,5 Cells
    - usw. mit Binary ( 8 ) und Kanji ( 13 )

    OK, dann habe ich ja eine reale Grundlage den Platzbedarf zu bestimmen.

    Edit: Habe grade festgestellt, dass ich mir viel zu viel Gedanken mache. :D
    In der QR-Definition sind alphanumerische Zeichen ausschließlich Großbuchstaben, Ziffern und einige Sonderzeichen. Somit sind zwangsläufig alle Eingaben als Binary zu betrachten, da nur dort auch Kleinbuchstaben und die restlichen Satz- und Sonderzeichen berücksichtigt werden.

  • QR-Code Dll - Übergabe Errorlevel-Parameter, Aufruf: DestroyBuffer() ?

    • BugFix
    • 23. Dezember 2012 um 14:29

    James, das ist bekannt - aber damit ist es nicht möglich die Anzahl der verwenbaren Zeichen während der Eingabe zu bestimmen. Diese Angaben beziehen sich auf nur numerisch oder nur alnum oder nur byte. Der Speicherbedarf variiert dadurch und ich kann keinen Zähler setzen, der es mir erlaubt zu sagen: He, hier ist Schluß - mehr kann nicht verwertet werden. Sicher weiß ich das erst, wenn die Funktion ggf. crasht. :whistling:

  • QR-Code Dll - Übergabe Errorlevel-Parameter, Aufruf: DestroyBuffer() ?

    • BugFix
    • 23. Dezember 2012 um 13:42

    Danke für eure Bemühungen.
    Leider ist die Dokumentation dazu nicht konkret genug. Die 64Bit-Variante ermöglicht also einen Parameter für ErrorCorrectionLevel, die 32Bit-Variante hingegen nicht. Das finde ich ziemlich schräg. :wacko:
    Naja, muß ich halt mit leben dass dieser Parameter dann wegfällt. Denn ich werde keine Tools erstellen, die unter 32Bit nicht laufen.

    Was bei QR-Code auch etwas verwirrend ist, ist die Tatsache, dass man nicht vorhersagen kann, wieviel Zeichen ich bei einem bestimmten ErrorLevel tatsächlich verwenden kann (wie ich es bisher in meiner Variante gelöst habe).
    Im niedrigsten Level sind 2953 Byte möglich - Das wiederum können typabhängig durchaus über 4.000 Zeichen sein. Aber ich habe nirgends eine konkrete Angabe gefunden, in welcher Konstellation, welche Zeichen in welcher Anzahl verwendet werden können. Und ich habe keine Lust 200$ für die Norm auszugeben. :whistling:
    Ich setze jetzt einfach 1Byte = 1Zeichen, als Maximum also 2953 Zeichen. Das ist zwar nicht korrekt - aber zumindest ist es in dieser Anzahl egal, welcher Zeichentyp verwendet wird. Diese Anzahl ist auf jeden Fall möglich.

  • AutoItObject - OOP für AutoIt

    • BugFix
    • 22. Dezember 2012 um 22:58

    Einfach mal das Nachbar-Forum besuchen ;) http://www.autoitscript.com/forum/topic/11…df/#entry775262

  • QR-Code Dll - Übergabe Errorlevel-Parameter, Aufruf: DestroyBuffer() ?

    • BugFix
    • 22. Dezember 2012 um 21:25

    Hi,
    für den QR-Code Creator nutze ich die quricol32.dll. Jedoch finde ich keinen Weg den Parameter für den ErrorCorretion-Level zu übergeben, somit wird immer mit dem Default-Wert 0 gearbeitet.
    Ebenso unklar ist, wie die Funktion DestroyBuffer() aufgerufen werden soll. Ich interpretiere die Funktion so, dass dazu als Parameter ein Buffer übergeben werden soll, jedoch liefern die vorab zum encodieren genutzten Funktionen keinen Rückgabewert. Ein Aufruf der Funktion ohne Parameter führt zum Crash von AutoIt. :huh:

    [autoit]


    Global $iMargin = 4, $iPixelSize = 2
    DllCall("quricol32.dll", "none", "GenerateBMPW", "str", $sPath & $_sImageName & ".bmp", "str", $_sText, "int", $iMargin, "int", $iPixelSize) ; == funktioniert

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

    ; == TErrorCorretion
    Global Const $QR_ECLEVEL_L = 0 ; == up to 7% damage
    Global Const $QR_ECLEVEL_M = 1 ; == up to 15% damage
    Global Const $QR_ECLEVEL_Q = 2 ; == up to 25% damage
    Global Const $QR_ECLEVEL_H = 3 ; == up to 30% damage
    DllCall("quricol32.dll", "none", "GenerateBMPW", "str", $sPath & $_sImageName & ".bmp", "str", $_sText, "int", $iMargin, "int", $iPixelSize, "int", $QR_ECLEVEL_Q) ; == funktioniert nicht

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

    DllCall("quricol32.dll", "none", "DestroyBuffer") ; <== CRASH!!!

    [/autoit]

    Da mir C++ recht fremd ist, kann ja vielleicht ein in dieser Richtung Beschlagener mit dem Code was anfangen:

    quricol.h
    C
    #pragma once
    
    
    #include "qrencode.h"
    
    
    #ifdef __cplusplus
    extern "C" {
    #endif
    
    
    void WINAPI GeneratePNGW(LPWSTR fileName, LPWSTR text, int margin, int size, QRecLevel level);
    void WINAPI GeneratePNGA(LPSTR fileName, LPSTR text, int margin, int size, QRecLevel level);
    #ifdef UNICODE
    #define GeneratePNG  GeneratePNGW
    #else
    #define GeneratePNG  GeneratePNGA
    #endif // !UNICODE
    
    
    HBITMAP WINAPI GetHBitmapW(LPWSTR text, int margin, int size, QRecLevel level);
    HBITMAP WINAPI GetHBitmapA(LPSTR text, int margin, int size, QRecLevel level);
    #ifdef UNICODE
    #define GetHBitmap  GetHBitmapW
    #else
    #define GetHBitmap  GetHBitmapA
    #endif // !UNICODE
    
    
    void WINAPI GenerateBMPW(LPWSTR fileName, LPWSTR text, int margin, int size, QRecLevel level);
    void WINAPI GenerateBMPA(LPSTR fileName, LPSTR text, int margin, int size, QRecLevel level);
    #ifdef UNICODE
    #define GenerateBMP  GenerateBMPW
    #else
    #define GenerateBMP  GenerateBMPA
    #endif // !UNICODE
    
    
    void WINAPI GetPNGW(LPWSTR text, int margin, int size, QRecLevel level, LPINT bufSize, __deref_opt_out void **ppvBits);
    void WINAPI GetPNGA(LPSTR text, int margin, int size, QRecLevel level, LPINT bufSize, __deref_opt_out void **ppvBits);
    #ifdef UNICODE
    #define GetPNG  GetPNGW
    #else
    #define GetPNG  GetPNGA
    #endif // !UNICODE
    
    
    void WINAPI DestroyBuffer(void* buffer);
    
    
    #ifdef __cplusplus
    }
    #endif
    Alles anzeigen


    Die kompletten Source-Dateien inkl. der 32Bit-Dll habe ich angehängt.


    Edit 25.12.2012:
    Wie aus der Doku nicht hervorgeht, ist der ErrorCorrectionLevel-Parameter ausschließlich in der 64-Bit Variante der Dll verfügbar. Damit ist der Parameter dann ja total überflüssig. Tools zu erstellen, die nicht auf 32-Bit Maschinen laufen würde ich ziemlich schräg finden.

    Dateien

    src.zip 159,71 kB – 329 Downloads
  • Youtube video downloaden

    • BugFix
    • 22. Dezember 2012 um 18:47

    http://www.youtube.com/t/terms

    Zitat von Nutzungsbedingungen:


    C
    Sie erklären sich damit einverstanden, auf Nutzerübermittlungen (wie unten definiert) oder andere auf der Webseite verfügbar gemachte Inhalte (einschließlich YouTube-Inhalte wie unten definiert) nicht über irgendwelche andere Technologien oder Mittel als die Video-Wiedergabeseiten der Webseite selbst, den YouTube-Player oder solche anderen Mittel zuzugreifen, die YouTube ausdrücklich für diesen Zweck bestimmt;
    ...
    ...
    K
    Sie erklären sich damit einverstanden, Zugriff auf Nutzervideos nur in der Form des Streamings und zu keinen anderen Zwecken als der rein persönlichen, nicht-kommerziellen Nutzung, und nur in dem Rahmen zu nehmen, der durch die normale Funktionalität der Dienste vorgegeben und erlaubt ist. „Streaming“ bezeichnet eine gleichzeitige digitale Übertragung des Materials über das Internet durch YouTube auf ein nutzerbetriebenes internetfähiges Endgerät in einer Weise, bei der die Daten für eine Echtzeitansicht bestimmt sind, nicht aber für einen (permanenten oder vorübergehenden) Download, ein Kopieren, ein Speichern oder einen Weitervertrieb durch den Nutzer.

    Alles anzeigen

    Verstoß gegen die Bedingungen des Seitenbetreibers und somit auch gegen unsere Forenregeln!

  • QR-Code Creator

    • BugFix
    • 21. Dezember 2012 um 19:07

    Wie es aussieht, fehlte eine Wrapper-Anweisung, ergänzt. s. Post #1

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™