ZitatAlso, bisher sind Static-Variablen in AutoIt eingebaut
man dankt...
ZitatAlso, bisher sind Static-Variablen in AutoIt eingebaut
man dankt...
Hi,
[autoit]Local Static $vStatic
[/autoit]Habe den Thread im engl. Forum bzgl. der statischen Variablen nicht mehr weiter verfolgt, aber soweit ich mich erinnere, sind lt. den Dev´s statische Variablen in AuoIt auch in Zukunft nicht vorgesehen. Kann man nun statische Variablen nutzen ohne die OO-Funktionen einzusetzen (Einbindung der "AutoitObject.au3" vorausgesetzt) ?
Hallo!
Das ist wieder mal ein wunderschönes Beispiel für "Usability" in einer GUI, wie sie NICHT sein sollte.
Wieso gehst du nicht hin und machst eine "Standard"-Größenabfrage, wie sie für Schriften üblich ist?
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$Form1 = GUICreate("Auswahl")
$Combo1 = GUICtrlCreateCombo("Schriftgröße ", 40, 32, 90, 25)
GUICtrlSetData(-1, "7 Punkt|6 Punkt|5 Punkt|4 Punkt|3 Punkt|2 Punkt|1 Punkt", "")
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
case $Combo1
$a=stringleft(guictrlread($combo1),1)
Msgbox(0,"Schriftgröße",$a,1)
EndSwitch
[/autoit] [autoit][/autoit] [autoit]WEnd
[/autoit] [autoit][/autoit] [autoit][/autoit]...wo wir schon dabei sind, OpenOffice speichert u.a. auch im Excel-Format.
Tabellenbearbeitung incl AutoIt-Beispiel
Hab auch was, allerdings eher für Calc....
Es sollte aber anhand dessen kein Thema sein, auch für Write Funktionen zu erstellen
ZitatHatte mal irrlicht überblickt, aber da scheinen ja kaum funktionen in autoit zu gehen
Also das was ich in Irrlicht "überblickt" habe (die Demos an sich sind absolut beeindruckend) funktioniert das schonmal ziemlich gut, also ist die "Umgebung" incl aller 3D-Effekte ist nur noch eine Fleißsache oder einfaches copy/paste.
Wahrscheinlich bist du dir nicht im klaren darüber, daß auch relativ "einfache" MMORPGs mehrere hunderte bis tausende Mannjahre Entwicklung (Grafik & Engines, Story, Texturen usw) beinhalten. Ohne fertige Funktionen, wie sie z.B. Irrlicht bereitstellen, brauchst du garnicht anzufangen, selbst mit 4-5 Leuten siehst du brauchbare Ergebnisse frühestens erst in einigen Monaten.
Allerdings gibt es doch fix-und fertige Programme, die genau auf deine Anforderungen passen, incl Entwicklungsumgebung und allem drum und dran.
Als Stichwort werfe ich mal "yofrankie" in dem Raum, damit solltest du fündig werden....
Einen glücklichen Herzwunsch auch von mir! ![]()
Update der Funktionen, Kleinigkeiten geändert, einige Funktionen hinzugefügt. Demo automatisch ablaufend.
Kurze Anfrage:
Sollte man das schon "UDF"-mäßig ausbauen (entsprechende Header und das ganze Fehlerabfang-Brimborium ?)
Ich würde dann auch die Funktionen noch so ändern, daß die globalen Variablen vermieden werden usw. ggf noch gewünschte Funktionen einbauen.
Hi,
bei Scite lässt sich etwas ähnliches feststellen:
Mauscursor über einen Dateireiter fahren, im Tooltip erscheint der komplette Pfad. Maus nicht bewegen, nach 5 sec verschwindet der Tooltip und erscheint nur wieder, wenn zwischenzeitlich ein anderer Tooltip aufgerufen wurde.
sry, hatte den falschen Link angegeben, die korrigierte Version bearbeitet auch mehrdimensionale Arrays.
Beruht aber auf dem "natürlichen Vergleich", die Implementierung in eine einfache Sortierfunktion sollte aber nicht das Problem sein....
schau mal, ob http://www.autoitscript.com/forum/index.php?showtopic=83626&st=0&p=598311&#entry598311 dir weiterhilft
/EDIT/ Link korrigiert
Hi,
das handle zur Bitmap bringt dir nichts, du willst doch die Bilddaten übertragen.
Allerdings hast du ein Problem, und das ist die Datenübertragungsrate deines Netzwerks. Die Übertragung von unkomprimierten Bitmaps (das ist das windowsinterne Format) dauert wesentlich länger als die Speicherung und Übertragung des Screens im (kleineren) JPG-Format!
Die Größe und Qualität der JPG-Datei kannst beeinflussen mittels
_ScreenCapture_SetJPGQuality ()
[/autoit] ZitatALso wenn etwas nicht geklappt hat (egal was ) darf es nicht ignoriert weren.
Probleme löst man nicht, Probleme beseitigt man! Ab ins Nul-Device damit^^
Spass beiseite, alle internen AutoIt-Funktionen geben in
[autoit]@error
[/autoit]den Status des erfolgreichen Funktionsaufrufs zurück.In der Regel sollte nach jeder Funktion dieser Status abgefragt werden. In deinen eigenen erstellten Funktionen kannst (solltest) du das natürlich auch verwenden!
[autoit]fileread("grmblfx.dat",0)
if @error then msgbox(0,"Fehler","Datei konnte nicht geöffnet werden!")
Hallo,
schau mal nach diesen Funktionen: (einfach draufklicken um die Hilfe angezeigt zu bekommen)
EnvGet()
EnvSet()
EnvUpdate()
Zitatich finds ganz schön dreist.
Du kennst die Sache mit den Krähen und den Augen? ![]()
ZitatSei´s drum - Back to Topic: Können wir uns darauf einigen das wir als allgemeine Empfehlung zur reinen Überprüfung von Teilstrings StringInStr vorschlagen?
Abber sischäääärrr!
Hi,
habe einen Vergleich von AutoIt-Funktionen und auch externen dll´s gemacht.
Die Boyer-Moore.dll (freundlicherweise von einem hiesigen Forenmitglied Namens AspirinJunkie
in C erstellt) und die Funktion Findbytes() aus der prospeed.dll sind auch am Start.
$post = "Die Vögel singen im Wald abcdefghijklmnopqrstuvwxyz"
$Pattern = $post
$pre = ""
$string = ""
$hDll = DllOpen("Boyer-Moore.dll")
$S_DLL = DllOpen("prospeed.dll")
ConsoleWrite(" Stringlänge Suchzeit Boyer-Moore StringInstr FindBytes StringRegExp Stringreplace" & @CRLF)
For $i = 1 To 18
For $s = 1 To 100
$string &= Chr(Random(35, 127, 1))
Next
$string = StringReplace($string, $post, "") ; $post löschen
$string &= $string & $post ;string aufpumpen und den $post und ans ende bringen
$t = TimerInit()
$a1 = BoyerMoore($string, $Pattern, $hDll) ;Boyer-Moore by AspirinJunkie
$m1 = TimerDiff($t)
$t = TimerInit()
$a2 = StringInStr($string, $Pattern)
$m2 = TimerDiff($t)
$t = TimerInit()
$a3 = _findbytes($string, $Pattern, 0) ;Assemblercode by Frank Abbing
$m3 = TimerDiff($t)
$t = TimerInit()
$a = StringRegExp($string, $Pattern)
$m4 = TimerDiff($t)
$t = TimerInit()
StringReplace($string, $Pattern, "", 1, 2)
if @extended then $x=true
$m5 = TimerDiff($t)
ConsoleWrite(StringFormat(" %10.10s ", StringLen($string)) & _
StringFormat(" %5.10s ", $m1) & _
StringFormat(" %5.10s ", $m2) & _
StringFormat(" %5.10s ", $m3) & _
StringFormat(" %5.10s ", $m4) & _
StringFormat(" %5.10s ", $m5) & @CRLF)
Next
Func BoyerMoore(ByRef $sString, ByRef $sPattern, $hDll = 0)
Local $aRet = DllCall($hDll, "str", "boyerMoore", "str", $sPattern, "str", $sString)
If @error Then Return SetError(2, @error, '')
Return $aRet[0]
EndFunc ;==>BoyerMoore
Func _findbytes($string_1, $string_2, $count)
$struct_1 = DllStructCreate("ubyte[" & StringLen($string_1) & "]")
$struct_2 = DllStructCreate("ubyte[" & StringLen($string_2) & "]")
DllStructSetData($struct_1, 1, $string_1)
DllStructSetData($struct_2, 1, $string_2)
$pos = FindBytes(DllStructGetPtr($struct_1), $count, DllStructGetSize($struct_1), DllStructGetPtr($struct_2), DllStructGetSize($struct_2)) + 1
;MsgBox(262144,'Debug line ~' & @ScriptLineNumber,'Selection:' & @lf & '$pos' & @lf & @lf & 'Return:' & @lf & $pos) ;### Debug MSGBOX
$struct_1 = 0
$struct_2 = 0
If $pos = -1 Or $pos = StringLen($string_1) + 1 Then Return 0
Return $pos
EndFunc ;==>_findbytes
Func FindBytes($B,$O,$A,$S,$L) ;auszug aus der prospeed.au3
$S_FindBytes = DllCall($S_DLL, "long", "FindBytes", _
"long", $B, _
"long", $O, _
"long", $A, _
"long", $S, _
"long", $L)
Return $S_FindBytes[0]
EndFunc
die beiden benötigten dll´s
das ganze sieht dann so aus:
Stringlänge Suchzeit Boyer-Moore StringInstr FindBytes StringRegExp Stringreplace
251 0.11258414 0.02374603 0.11900953 0.04413968 0.00949841
651 0.07682540 0.05028572 0.08995556 0.02877460 0.01229206
1451 0.08213334 0.11006985 0.08436826 0.04469841 0.01760000
3051 0.10308572 0.22991748 0.09274921 0.07850159 0.02877460
6251 0.13605081 0.47017148 0.12375874 0.14554922 0.07514921
12651 0.22796193 0.95682551 0.17292700 0.28914289 0.12599366
25451 0.41346036 1.92007643 0.32126988 0.58359372 0.27713019
51051 0.82720010 3.90217192 0.58247626 1.14735252 0.52408895
102251 1.64043195 6.92713738 1.19428586 2.37041299 1.09818426
204651 2.95205116 16.5526624 2.24162568 4.56594343 2.34666696
409451 6.11781664 28.3343274 4.53102279 9.34196944 4.43492119
819051 12.3063126 59.2664710 8.59997569 18.5048658 8.95532812
1638251 24.1173109 116.817081 17.9654118 37.4114587 18.3084721
3276651 50.3566794 227.962492 35.8495283 73.9750443 37.9525889
6553451 103.278209 499.063428 74.6891015 145.018431 72.9321743
13107051 205.247594 912.923569 146.207967 292.947846 158.535512
26214251 384.400531 1813.14245 264.051436 566.840478 286.017915
52428651 766.900541 3617.06166 535.991306 1134.43077 577.359971
Alles anzeigen
Was man sehr deutlich sieht ist die vernachlässigbar minimale Abweichung der unterschiedlichen Verfahren bei "kleinen" Strings. Ich verwende sehr gerne StringInstr() und überhaupt die AutoIt-Stringbefehle, bin nicht so der RegExp-Fuzzi^^
Aber bei der Suche in vielen (sehr) großen Dateien ist es ein Unterschied, ob man 10 Minuten auf ein Ergebnis wartet oder nur 1.5 Minuten. Übrigens ist das "alte" DOS-Programm FIND.EXE nur sehr schwer zu toppen (i love it^^)
AspirinJunkie
Btw, deine dll bzw der Algorithmus an sich profitiert von der Länge des Suchstrings, je länger der Suchstring, desto schneller.Ein Bekannter von mir sucht große Muster in sehr großen Dateien, ich soll dir bestellen, deine dll sei absolute Spitze und wenn du mal zufällig in Rheinhessen auf einem Weinfest einschlagen solltest sag vorher Bescheid, dann brauchst du dir über die Getränkeversorgung keine Gedanken mehr machen :o)
In Anlehnung an Beerware haben wir bei uns die SpätleseWare eingeführt, ein sehr gefälliges Lizenzmodell....:)
/EDIt/ natürlich sieht es anders aus, wenn casesensitiv gesucht wird! Dann ist stringinstr() nicht zu schlagen....
[autoit]StringInStr($string, $Pattern,1) ;Groß- und Kleinschreibung wird berücksichtigt!
[/autoit]Das scheint eine Windows-Einstellung zu sein, dieses "Problem" ist mir schon einige Male bei anderen Anwendungen (XP, nicht nur AutoIt) aufgefallen. Habe allerdings auch noch nicht nach Abhilfe gesucht...
ZitatStringReplace könnte interessant werden, wenn man zusätzlich die genau Anzahl der ! im String benötigt
erstens das und weil es auch die wesentlich schnellere Variante ist.( bei großen Strings bis zu 7x schneller)
Zitatund vor allem weil StringInStr beim ersten Vorkommen die Suche abbricht
aber nur, wenn man das auch vorschreibt ![]()
stringinstr($string,"!",0,1)
[/autoit]