Beiträge von BugFix
-
-
-
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]
[/autoit] [autoit][/autoit] [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)#cs - Output
[/autoit] [autoit][/autoit] [autoit]
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]
; 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... 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]
[/autoit] [autoit][/autoit] [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)#cs - Output
[/autoit] [autoit][/autoit] [autoit]
Samstag
Sa
Samstag
Donnerstag
Samstag
Sa
So
Do
Fr
Samstag
>< @error: 2
#ce;===============================================================================
[/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
Um nur den deutschen Wochentag auszugeben, reicht natürlich auch diese VarianteSpoiler anzeigen
[autoit]#include <Date.au3>
[/autoit]
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 -
- letzter Post hier vor > 3 Jahren
- letzte Aktivität des TE hier im Forum vor 10 MonatenDas sollte deine Frage beantworten...

-
Anhand der AGB ergibt sich eine eindeutige Rechtslage: Das Vorhaben ist illegal!
[CLOSED]
-
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: 0x374D65Als Tipp:
Die Farbverläufe gestalten mit
• HSV: 0,0,100
• Transparenz: 8Damit 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.

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.
-
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. -
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)
[/autoit]
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:MsgBox(0, 'Aufruf separat', _Main(2, 3))
[/autoit][autoit][/autoit][autoit]Func _Main($_p1, $_p2)
[/autoit][autoit][/autoit][autoit]
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
EndFuncFunc _Sub($_p1, $_p2)
[/autoit]
Return $_p1^$_p2
EndFunc -
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. -
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. -
Ich verweise einfach mal auf einen Post von vor 6 Jahren.

-
Kannst auch das dazu nutzen.
-
Möglichkeiten mit hoher Wahrscheinlichkeit:
- Netzteilproblem (Lüfter defekt; zu gering dimensioniert)
- CPU-Kühlung zu gering -
Danke Andy.
Ich vermute, noch wichtiger ist dieser Absatz:Zitatc) 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.

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. -
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.

-
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.
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. -
Einfach mal das Nachbar-Forum besuchen
http://www.autoitscript.com/forum/topic/11…df/#entry775262 -
Hi,
[autoit]
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.
[/autoit][autoit][/autoit][autoit]
Global $iMargin = 4, $iPixelSize = 2
DllCall("quricol32.dll", "none", "GenerateBMPW", "str", $sPath & $_sImageName & ".bmp", "str", $_sText, "int", $iMargin, "int", $iPixelSize) ; == funktioniert; == TErrorCorretion
[/autoit][autoit][/autoit][autoit]
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 nichtDllCall("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
Alles anzeigen#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
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. -
http://www.youtube.com/t/terms
Zitat von Nutzungsbedingungen:Alles anzeigen
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.Verstoß gegen die Bedingungen des Seitenbetreibers und somit auch gegen unsere Forenregeln!
-
Wie es aussieht, fehlte eine Wrapper-Anweisung, ergänzt. s. Post #1