...und noch eine Möglichkeit...http://www.autoit.de/index.php?page=Thread&postID=110480#post110480
Beiträge von Andy
-
-
Hi
schau mal HIER, vor allem die Antwort von GtaSpider.
ciao
Andy -
@simon,
[autoit]
das mußt du jetzt mal genauer erklären, denn was eine MessageBox mit einer Umgebungs/Systemvariablen zu tun hat wusste ich bisher nicht...consolewrite(@desktopdir)
[/autoit]Was muss ich hier "ganz einfach" einstellen, damit man das richtige Verzeichnis angeuzeigt bekommt?
FireFlyer
Ich würde auch deine Methode bevorzugen
-
Zitat
Was macht denn dieser Thread hier im Poweruser-Forum?
OmG, war mir garnicht aufgefallen! Da verschwinde ich mal lieber schnell von der Bildfläche, bevor mir nochZitatunqualifizierten Antworten
entfleuchen....

-
so?
Spoiler anzeigen
[autoit]#include <GuiEdit.au3>
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
#include <GUIConstantsEx.au3>
#include <GuiTab.au3>#Region ### START Koda GUI section ### Form=
[/autoit] [autoit][/autoit] [autoit]
$Form1 = GUICreate("Form1", 928, 617, -1, -1)
$Button1 = GUICtrlCreateButton("Tabs auswählen", 8, 73, 105, 17, 0)
$Button2 = GUICtrlCreateButton("TXT Anzeigen", 8, 92, 105, 17, 0)
$Button3 = GUICtrlCreateButton("E-Mail Daten", 8, 111, 105, 17, 0)
$Button4 = GUICtrlCreateButton("Button4", 8, 131, 105, 17, 0)
$Button5 = GUICtrlCreateButton("Button5", 8, 151, 105, 17, 0)
$Button6 = GUICtrlCreateButton("Button6", 8, 170, 105, 17, 0)
$Tab1 = GUICtrlCreateTab(120, 48, 801, 561)
GUICtrlSetResizing(-1, $GUI_DOCKWIDTH+$GUI_DOCKHEIGHT)
$TabSheet1 = GUICtrlCreateTabItem("TabSheet1")
$TabSheet2 = GUICtrlCreateTabItem("TabSheet2")
$TabSheet3 = GUICtrlCreateTabItem("TabSheet3")
$TabSheet4 = GUICtrlCreateTabItem("TabSheet4")
$TabSheet5 = GUICtrlCreateTabItem("TabSheet5")
$TabSheet6 = GUICtrlCreateTabItem("TabSheet6")
GUICtrlCreateTabItem("")
GUICtrlSetState(-1, $GUI_DISABLE)
$Radio1 = GUICtrlCreateRadio("Aktuelles Tab auf Top setzen", 760, 51, 161, 17)
$Label1 = GUICtrlCreateLabel("MENÜ", 32, 48, 60, 21)
GUICtrlSetFont(-1, 14, 800, 0, "Arial")
GUICtrlSetColor(-1, 0x0000FF)
$Group1 = GUICtrlCreateGroup("TXT Informationen", 120, 48, 801, 561)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
GUICtrlSetColor(-1, 0xFF0000)$Label2 = GUICtrlCreateLabel("", 130, 68, 781, 531)
[/autoit] [autoit][/autoit] [autoit]
$Label2b = _GUICtrlEdit_SetText($Label2, FileRead(@ScriptDir & "\test.txt"))GUICtrlCreateGroup("", -99, -99, 1, 1)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetState($Group1, $GUI_HIDE)aus_alle()
[/autoit] [autoit][/autoit] [autoit]
an_button1()GUISetState(@SW_SHOW)
[/autoit] [autoit][/autoit] [autoit]
#EndRegion ### END Koda GUI section ###$toptab=0
[/autoit] [autoit][/autoit] [autoit]
While 1if guictrlread($radio1)=$GUI_CHECKED Then ;wenn der Checkbutton nicht gesetzt ist
[/autoit] [autoit][/autoit] [autoit]
$toptab= _GUICtrlTab_GetCurFocus($tab1) ;Index des Fokussierten Tabs merken
Msgbox(0,0,"Tabindex :"&$toptab&" gesetzt",1) ; nachricht
GUICtrlSetstate($radio1,$GUI_UNCHECKED) ; Checkbutton zurücksetzen
endif$nMsg = GUIGetMsg()
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
;**********************Case $Button1
[/autoit] [autoit][/autoit] [autoit]
_GUICtrlTab_setCurFocus($tab1,$toptab) ;gemerkten Tab auswählen
aus_alle()
an_button1()case $Button2
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
aus_alle()
an_button2()case $Button3
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
aus_alle()Case $Button4
[/autoit] [autoit][/autoit] [autoit]
aus_alle()case $Button5
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
aus_alle()Case $Button6
[/autoit] [autoit][/autoit] [autoit]
aus_alle()EndSwitch
[/autoit] [autoit][/autoit] [autoit]
WEndFunc aus_alle()
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetState($Tab1, $GUI_HIDE )
GUICtrlSetState($Radio1, $GUI_HIDE)
GUICtrlSetState($Group1, $GUI_HIDE)
GUICtrlSetState($Label2, $GUI_HIDE)
EndFuncFunc an_button1()
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetState($Tab1, $GUI_SHOW)
GUICtrlSetState($Radio1, $GUI_SHOW)
EndFuncFunc an_button2()
[/autoit]
GUICtrlSetState($Group1, $GUI_SHOW)
GUICtrlSetState($Label2, $GUI_SHOW)
EndFunc -
Hallo Alina,
Zitatwas machst Du, wenn statt "Box" immer was anderes da steht?
Es ist völlig egal was dort steht, da über die ControlID selektiert wird, das kannst du übrigens mit ALLEN Controls so machen.
[autoit]
Lass uns mal ein "Problem" konstruieren: Eine GUI für ein größeres Projekt, bei der du am Anfang noch nicht die genaue Anzahl der Controls (Buttons, Checkboxen, Labels, Bilder usw) weist, du weist nur, es werden SEHR viele. Im Lauf der Entwicklung der GUI fallen dir immer weitere Möglichkeiten ein, ein Video-Control, 23 zusätzliche Buttons, eine Listview usw.
Wie kannst du diese "Flut" von Controls in deiner Abfrage abwickeln? Oder 7 Gruppen mit je 12 Checkboxen? Natürlich könntest du 12 Seiten lang mitIf $ted ="14334567841" then
[/autoit]jede einzelne Kombination abfragen, aber wenn nur 3 Checkboxen dazukommen schreibst du auch 12 Seiten Code um, bzw schreibst ihn neu!
Dem Array dagegen ist es (fast) völlig egal, wieviele Einträge es hat, um mal bei dem Beispiel Checkboxen zu bleiben, du könntest in meinem Beispiel 1000 Checkboxen hinzufügen, ohne daß sich der Code nur um eine Zeile ändert!Spoiler anzeigen
[autoit]#include <GUIConstantsEx.au3>
[/autoit] [autoit][/autoit] [autoit]dim $aCheckBoxArray[300]
[/autoit] [autoit][/autoit] [autoit]guicreate("",@desktopwidth-50, @desktopheight-50,0,0)
[/autoit] [autoit][/autoit] [autoit]
for $i=0 to ubound($aCheckBoxArray)-1 ;Gui füllen
$aCheckBoxArray[$i]=GUICtrlCreateCheckbox(hex(random(10,1000000),8), 10+80*int($i/30), mod($i,30)*20)
Next
guisetstate()$sTool="Es sind folgende Checkboxen markiert:"&@crlf&@crlf
[/autoit] [autoit][/autoit] [autoit]do
[/autoit] [autoit][/autoit] [autoit]
$sChecked=""
for $i=0 to ubound($aCheckboxArray)-1 ;abfragen, ob checkbox angehakt
if guictrlread($aCheckBoxArray[$i])=$GUI_CHECKED Then $sChecked&=" "&$i
Next
tooltip($sTool&$sChecked)
until guigetmsg()=-3exit
[/autoit]Der "Text" der Boxen bzw der Controls ist unerheblich wie du siehst.
Ändere einfach mal in Zeile 3 die Anzahl der Controls in eine beliebige Zahl....ciao
Andy -
Hallo Wilhelm1,
sobald du aus Access ein compiliertes AutoIt-Script (*.Exe-Datei) starten kannst , welches dann die Druckereinstellung übernimmt, sollte das kein Problem sein.
Allerdings kannst du auch "direkt" ein AutoIt/VBS-Script aufrufen, sollte auch per VBA gehen m.E., obwohl ich ehrlich gesagt schon jahrelang nichts mehr mit Access gemacht habe.Spoiler anzeigen
Code
Alles anzeigen'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' ' Example WSH Script (VBScript) ' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Require Variants to be declared before used Option Explicit '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Declare Variables & Objects '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Dim oShell Dim oAutoIt '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Initialise Variables & Objects '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Set oShell = WScript.CreateObject("WScript.Shell") Set oAutoIt = WScript.CreateObject("AutoItX3.Control") '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Start of Script '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' WScript.Echo "This script will run some test calculations" oShell.Run "calc.exe", 1, FALSE ' Wait for the calc window to become active oAutoIt.WinWaitActive "Rechner", "" ' Send some keystokes to calc oAutoIt.Send "2*2=" oAutoIt.Sleep 500 oAutoIt.Send "4*4=" oAutoIt.Sleep 500 oAutoIt.Send "8*8=" oAutoIt.Sleep 1500 oAutoIt.WinClose "Rechner", "" oAutoIt.WinWaitClose "Rechner", "" WScript.QuitDas ist ein "standalone"-VBS, einfach als *.VBS Datei abspeichern und doppelklicken. Du kannst also alle( ? ) AutoIt-Befehle auch in anderen Sprachen nutzen, mit Sicherheit auch in VBA.
Somit steuerst du die Druckausgabe (oder sonst irgendetwas) "direkt" per Autoit aber innerhalb deines VBA-Codes, sollte am einfachsten sein.....
ciao
Andy -
Hi,
ich habe mal in meinem Fundus folgendes aufgestöbert, ggf kann es ja der eine oder andere gebrauchen...
Die einzubindenden Dateien werden im Dialog ausgewählt und die Fileinstall()-Anweisung in den Quellcode geschrieben, Gimmick ist auch die mögliche Auswahl von AutoIt-Macros für das Zielverzeichnis z.B. @scriptdir\test\Spoiler anzeigen
[autoit];MultiFileInstall MFI von [email='Andy@autoIt.de'][/email]
[/autoit] [autoit][/autoit] [autoit]
;schreibt Fileinstallanweisung(en) in den Quellcode
;
;Es wird zunächst eine Sicherungskopie des Quellcodes erstellt und danach wird
;die vollständige(n) Fileinstall()-Anweisung(en) in den Quellcode geschrieben
;Es können mehrere Dateien ausgewählt werden, die eingebunden werden können$split = StringSplit(FileOpenDialog("Datei(en) auswählen, welche mit FileInstall() eingebunden werden sollen", @ScriptDir, "Alle (*.*)", 1 + 2 + 4), "|", 2)
[/autoit] [autoit][/autoit] [autoit]
If $split[0] = "" Then Exit ;abgebrochenDo ;schleife solange bis regulärer Pfad eingegeben wurde
[/autoit] [autoit][/autoit] [autoit]
$dest = InputBox("MultiFileInstall", _
"Bitte das Unterverzeichnis angeben, in das die eingebundenen Dateien entpackt werden sollen." & @CRLF & _
"Erlaubt ist jede reguläre Pfadangabe wie z.B C:\Dateien\Test\ oder auch" & @CRLF & _
"@AppDataDir Pfad zu den Anwendungsdaten des aktuellen Benutzers " & @CRLF & _
"@CommonFilesDir Pfad zum Ordner ""Gemeinsame Dateien"" " & @CRLF & _
"@DesktopDir Pfad zum Desktop des aktuellen Benutzers " & @CRLF & _
"@MyDocumentsDir Pfad zu ""Eigene Dateien"" des aktuellen Benutzers " & @CRLF & _
"@ScriptDir Verzeichnis des laufenden Skriptes " & @CRLF & _
"@TempDir Pfad zum Temp-Verzeichnis " & @CRLF & _
"" & @CRLF & _
"Bitte den abschließenden Backslash \ nicht vergessen!", "@scriptdir" & "\", "", 500, 260)If @error = 1 Then Exit ;abbrechen gedrückt
[/autoit] [autoit][/autoit] [autoit]
$macro = ""
If StringLeft($dest, 1) = "@" Then ;Macro im string
$macro = StringLeft($dest, StringInStr($dest, "\") - 1)
$path = Execute($macro)
Else
$path = $dest
EndIf
;thx an Bugfix für regex http://www.bug-fix.info/PathCheck.htm
Until StringRegExp($path, "((?<!.)([a-zA-Z]\:\\)(?!\s)(([\w-+.]*((?<!\s)(\s{1})(?!\\)|(?<!\\)(\\{1})(?!\s))*)*)(\\?)(?!.))") ;solange, bis string ein Pfad istIf $macro <> "" Then ;macrostring für fileinstall aufbereiten
[/autoit] [autoit][/autoit] [autoit]
$path1 = StringReplace($dest, $macro, "")
$path = $macro & "&""" & $path1 & """"
Else ;"normaler" Pfad angegeben
$path = """" & $path & """"
EndIf$string = "Dircreate(" & $path & ")" & @CRLF ;Verzeichnis muss erstellt werden
[/autoit] [autoit][/autoit] [autoit]
If UBound($split) <> 1 Then ;mehrere Dateien wurden ausgewählt
$pfad = $split[0] & "\" ;Dateipfad
For $i = 0 To UBound($split) - 2 ;string mit fileinstall("Dateiname") schreiben
$string &= "fileinstall(""" & $pfad & $split[$i + 1] & """," & $path & ")" & @CRLF
Next
Else ;nur eine Datei wurde ausgewählt
$string &= "fileinstall(""" & $split[0] & """," & $path & ")" & @CRLF
EndIf$installfile = FileOpenDialog("AutoIt-Datei auswählen, in welche die FileInstall()-Dateien eingebunden werden soll", @ScriptDir, "AutoIt (*.au3)", 1 + 2)
[/autoit] [autoit][/autoit] [autoit]
if @error then exit ;dialog geschlossen
If $installfile = "" Then ;abgebrochen
MsgBox(262144 + 48, "MultiFileinstall", "Es muss eine AutoIt-Datei ausgewählt werden, Programm wird beendet!")
Exit
EndIf
$bakfile = StringReplace($installfile, ".", "_BAKfileinstall.") ;name sicherungskopie
FileCopy($installfile, $bakfile, 1) ;sicherungskopie erstellen
If @error Then _exit()
$string &= FileRead($installfile) ;dateiinhalt auslesen
If @error Then _exit()
FileDelete($installfile) ;datei löschen
If @error Then _exit()
FileWrite($installfile, $string) ;fileinstall und dateiinhalt schreiben
If @error Then _exit()
MsgBox(262144 + 64, "MultiFileinstall", "Zeilen mit FileInstall() in " & $installfile & " eingefügt." & @CRLF & "Sicherungskopie " & $bakfile & " wurde erstellt!")Func _exit()
[/autoit]
MsgBox(262144 + 48, "MultiFileinstall", "Es ist ein Fehler aufgetreten, Programm wird beendet!")
Exit
EndFunc ;==>_exit -
Hallo,
als Stringfreak mache ich das natürlich so
Spoiler anzeigen
[autoit]#include <GUIConstantsEx.au3>
[/autoit] [autoit][/autoit] [autoit]dim $aCheckBoxArray[20]
[/autoit] [autoit][/autoit] [autoit]guicreate("")
[/autoit] [autoit][/autoit] [autoit]
for $i=0 to ubound($aCheckBoxArray)-1 ;Gui füllen
$aCheckBoxArray[$i]=GUICtrlCreateCheckbox("Box "&$i, 10, $i*20)
Next
guisetstate()$sTool="Es sind folgende Checkboxen markiert:"&@crlf&@crlf
[/autoit] [autoit][/autoit] [autoit]do
[/autoit] [autoit][/autoit] [autoit]
$sChecked=""
for $i=0 to ubound($aCheckboxArray)-1 ;abfragen, ob checkbox angehakt
if guictrlread($aCheckBoxArray[$i])=$GUI_CHECKED Then $sChecked&=" "&$i
Next
tooltip($sTool&$sChecked)
until guigetmsg()=-3exit
[/autoit]
*Edit* String weggelassen und vereinfacht^^ -
Thx jedenfalls vorab

habe mal die 3 Kandidaten gegeneinander laufen lassenCode
Alles anzeigenStringlänge Suchzeit Boyer-Moore StringInstr FindBytes 251 0.94816519 0.02346666 0.12990477 651 0.90430487 0.04972699 0.11146668 1451 0.92022868 0.10308572 0.11537779 3051 0.96241282 0.21064129 0.50844450 6251 0.97693980 0.42463497 0.14107938 12651 1.00292076 0.85318106 0.61711753 25451 1.23116206 1.71111132 0.74925723 51051 1.96198120 3.42725122 0.57828578 102251 2.37208919 6.88439452 1.07052712 204651 3.90301001 13.9422747 2.19972091 409451 7.46659142 27.9661241 4.67685138 819051 13.6053604 55.9987372 9.06707416 1638251 25.7144413 110.729436 17.6092212 3276651 49.9982539 233.465147 36.2459474 6553451 101.060050 446.790583 72.2963393 13107051 194.476672 891.064925 144.411650 26214251 391.850360 1773.84807 287.375350 52428651 781.723096 3551.08484 574.132187 104857451 1618.99487 7130.31237 1150.15455
erst bei sehr großen stringlängen lohnt sich das, dein Boyer-Moore stürzt aber leider schon bei Patter mit einer Länge von über 20 Zeichen ab....seltsam -
AspirinJunkie aka Namensvetter,
vielen Dank für Deine DLL, allerdings sollte das "Ergebnis" die Position des Suchstrings im String ergeben, d.h. das erste (bzw alle) Vorkommen, also in deinem Beispiel mit den Vögeln die 5.
Am Besten wäre eine Rückgabe aller Treffer in einem Array (jaja, gibt man den kleinen Finger, dann wollen diese Typen gleich den ganzen Arm und den anderen noch dazu

).
ciao
Andy -
nuts,
sehr schön!!!
Um "mal eben" eine kleine Liste auszudrucken völligst ausreichend, und da soll ich mich nun stundenlang hinsetzen und eine Druckfunktion für OO/Excel ausklabustern? Naja, schaumamal
ciao
andy -
Hi Ashpool,
ehrlich gesagt kann ich keine deiner Aussagen nachvollziehen, vor allem mit dem Hintergrund, da du offenbar genau weißt um was es geht.ZitatDas Verwenden einer fremden Dll ...
Jedes Mal wenn du ein Programm(paket) mit hunderten einzelner Dateien installierst, befindet sich "fremder" Code auf deinem Rechner. Glaubst du, daß niemand sicher stellt, nachdem diese neue Installation komplett abgelaufen ist ob eine "wichtige" *.dll auch vorhanden ist?
Ich vermute daß ein Großteil der User überhaupt nicht weiß was eine dll ist, wichtig ist, daß wenn man 2x ganz schnell mit dem Mauszeiger auf das lustige Symbol auf dem Desktop klickt, daß dann ein E-Mail-Programm gestartet wird! Und daß dieses Programm funktioniert...ZitatDu musst sicherstellen, dass die Dll beim Anwender vorhanden ist
Ja, zieh doch mal den SYSTEM und SYSTEM32-Ordner von deinem Rechner, bin mal gespannt was dann überhaupt noch für Software bei dir läuft. Natürlich fängt jedes halbwegs programmierte Programm diesen Fehler ab, es wird erst garnicht starten....das ist also kein Argument.
ZitatUnd wenn dann dank Avira irgendein Teil deines Codes als Schädling eingestuft wird,
bist du NaseDie Ausnahmelisten der Virenscanner sind genauso lang wie die der Viren^^, das wird sich auch in Zukunft nicht ändern. Da brauche ich kein AutoIt auf dem Rechner, damit diesem so ist, leider!
Zitatdie Skript-Sprachen, zu denen AutoIt gehört, die algorithmisch nur eingeschränkte Möglichkeiten bieten
Seit wann ist denn ein Algorithmus oder dessen Implementation abhängig von einer Programmiersprache? Es gibt Programmiersprachen, die sind für einige Algorithmen besser geeignet weil "Krücken" schon im Design dieser Sprache implementiert wurden, damit sie überhaupt benutzt wird!
Mein letztes Statement zu deiner Aussage:ZitatAber warum muss man nun jedes Problem in AutoIt lösen können wollen/müssen?
Weil man so nicht C(++,#), Object Pascal, Fortran und Lisp auf seinem Rechner braucht und so mit der Zeit um diese Sprachen so zu lernen, daß man sie effektiv einsetzen kann, etwas besseres anfangen kann....zum Beispiel in Foren irgendwelchen (auch meist unwichtigen) Kram verzapfen
Hehe, eigentlich hast du völlig Recht. Gates hätte vor 30 Jahren schon mit dotnet (oder Java) anfangen sollen, dann müssten wir uns heute nicht mit 62459 Programmiersprachen auf 7625 Betriebssystemen rumschlagen.
ciao
Andyp.s.: am liebsten führe ich solche Diskussionen beim gleichzeitigen leeren einer geschmeidigen Flasche Spätlese in gemütlicher Runde, du bist herzlich eingeladen!
-
Hi,
Zitataber konterkariert die Verwendung einer DLL nicht gerade den Ansatz von AutoIt, ohne jegliche externe Zutat genau das zu tun, was man erwartet
Wer hat dir den diese Weisheiten gepredigt? Wenn du jeden Tag mit dem Fahhrad zur Arbeit fährst und dort irgendwann eine tolle Maschine ausgemustert wird, schulst du dann um auf Fuhrunternehmer und kaufst eine Flotte von Sattelzügen um das Ding nach Hause zu bringen oder leihst du dir einfach mal kurz ´nen kleinen LKW?
Ich behaupte, daß für über 99% alles anfallenden Aufgaben für die AutoIt-Anwender diese Scriptsprache schnell genug ist, und das sahnige Geheimnis ist einfach, daß man das letzte Prozent (wenn man es überhaupt mal braucht) sehr gut mit "externen" Mitteln bewältigen kann. Genau dafür ist DOM/COM und das uralte *.dll-Prinzip nämlich gemacht worden....
ZitatUnd wenn's um Geschwindigkeit geht, sollte wohl jeder noch so dämliche Versuch in einer herkömmlichen Programmiersprache um Größenordnungen schneller sein, als der optimalst optimierte AutoIt-Code!
Als was bezeichnest du denn eine herkömmliche Programmiersprache? Ich vermute du meinst eine Sprache, bei der man den größten programmtechnischen Unfug verzapfen kann, dann den Source durch einen "optimierenden" (wirds hell^^?) Compiler jagt, welcher die unzulänglichkeiten des Coders wegbügelt, um anschließend eine 6,3MB große Datei zu haben, die nichts weiter macht als 2x am Tag Daten mit einem Server abzugleichen....über eine 10MBit-Leitung. Das Programm schiebt dabei Äonen von Wartezeiten zwischen den einzelnen IP-Paketen....wer so etwas unbedingt braucht, der muss sich allerdings eine der "herkömmlichen" Programmiersprachen aneignen, AutoIt ist dafür viel zu langsam und auch viel zu einfach!
Einen 10-Zeiler schreiben, F7 drücken und die EXE in den Autostartordner schieben, dauert incl. GUI keine 5 Minuten, und es wird genau das gemacht was gemacht werden soll. Ja, ich bleibe bei meineM Leisten!
AndyP.S. ja, ich freue mich schon auf den Inline-Assembler, kein Witz....
-
Also wenns auf Zeitersparnis ankommt, dann verwende ich Frank Abbings prospeed.dll
Komplett in Assembler geschrieben rockt die das Haus. Übrigens sind im Downloadpaket auch sehr ausführliche AutoIt-Beispiele und eine hammermäßige Demo dabei.
Eigentlich gehts dort um allerlei Grafikbefehle, aber _FindBytes() kann man auch als stringinstr()-Ersatz verwenden.Mal ein Zeitvergleich:
Finden eines "Strings" innerhalb einer Bitmap (1680x1050x3 Bytes) in der untersten Bildzeile, dauert mit stringinstr ca 300ms, mit FindBytes nur 10ms...
Das witzige daran ist, daß lt Autor nur ein einfaches zeichenweises Vergleichen, also "durch den String rennen", verwendet wird, und nicht eine der sehr viel schnelleren Methoden wie z.B. das Boyer-Moore-Verfahren! Btw, auf der verlinkten Wikipedia-Seite ist auch ein C-Quellcode, wäre sehr schön, den mal als AutoIt-verwendbare *.dll zu haben
***mal bittend zu Bernd rüberschiel
*** -
Zitat
Mmmmh, ob ich das jetzt richtig erklärt habe?
Ja, man kann auch Quersumme dazu sagen, und ob da eine Null mehr oder weniger ist, bleibt völlig egal. Es kommt nicht mehr dabei heraus nur weil man haufenweise Nullen mit dazuzählt, frag mal unsere Politiker!
Aber mal im Ernst, wozu diese seltsame Rechenvorschrift mit der Addition der benachbarten Zahlen. -
Da ich mir wg des Begriffs "Quersumme" auch nicht sicher war, habe ich mal in meiner BIBELnachgeschaut, aber mit so etwas profanem gibt sich dieses Werk nicht ab (hab auch nur die 11. Auflage)

Aber zum Glück gibts ein Internetz, dort kann jeder seinen Senf verzapfen, z.B. HIER
Dort werden tatsächlich 6 verschiedene Quersummen aufgeführt! Also nix da mitZitatnur bei kleinen ziffern isses die quersumme

-
Hi,
ist das nicht eine Quersumme? Naja, ich nenns mal so^^Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
$zahl = 22031511 ;egal ob int oder string.....
$zahl = "22031511";77773334456812734734562813471274612734612"MsgBox(0, "", "Die Quersumme von " & $zahl & " ist " & _quersumme($zahl))
[/autoit] [autoit][/autoit] [autoit]Func _quersumme($ziffern)
[/autoit]
Local $zahl = String($ziffern) ;einen String machen
Local $quer = 0
For $i = 1 To StringLen($zahl) ;jede einzelne Ziffer...
$quer += Number(StringMid($zahl, $i, 1)) ;...zusammenzählen
Next
$zahl = String($quer) ;aus der quersumme wieder einen string machen
If StringLen($zahl) = 1 Then Return $zahl ;wenn nur eine Ziffer übrig bleibt, raus
$zahl = _quersumme($zahl) ;die quersumme hat mehr wie eine ziffer, dann rekursiov weiter
Return $zahl ;ergebnis aus der rekursion zurückgeben
EndFunc ;==>_quersumme -
Hallo,
[autoit]
die Stringbefehle sind sehr schnell.
Man könnte beim Füllen des Arrays einen String anlegen der beispielsweise so aussehen könnte:$String="[001]search1[002]search2[003]search3....[468]search468["
[/autoit]Beim Löschen von Daten müsste nur genau wie im Array der letzte "Datensatz" an den entsprechenden Index kopiert werden.
[autoit]stringreplace($String,"[034]search34[","[468]search468[")
[/autoit]Gesucht wird dann nicht über den Index sondern über das Suchwort $search=" ]search356[" mittels stringinstr()
Die drei Ziffern (2 Byte würden reichen ;)) vor dem Treffer sind dann der Index des Arrays. Die Suche im String dauert nur Millisekunden.Btw, wie ist denn ein dreidimensionales Array im Speicher abgelegt? Ggf könnte man z.B. mit der prospeed.dll das Suchwort im Speicher lokalisieren und den Index "zurückrechnen".
*EDIT*Testroutine simpel
Spoiler anzeigen
[autoit]Local $ar3D[500][20][5]
[/autoit] [autoit][/autoit] [autoit]$string = ""
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
For $x = 0 To UBound($ar3D, 1) - 1
For $y = 0 To UBound($ar3D, 2) - 1
For $z = 0 To UBound($ar3D, 3) - 1
$ar3D[$x][$y][$z] = Hex(Random(1000000)) & Hex(Random(1000000)) & Hex(Random(1000000)) & Hex(Random(1000000))
Next
Next
$string &= StringFormat("[%03s]", $x) & $ar3D[$x][0][0]
;MsgBox(262144,'Debug line ~' & @ScriptLineNumber,'Selection:' & @lf & '$string' & @lf & @lf & 'Return:' & @lf & $string) ;### Debug MSGBOX
Next$t = TimerInit()
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$index = __ArraySearch($ar3D, $ar3D[495][0][0])
$arraysearchtime = TimerDiff($t)$t = TimerInit()
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$index = __stringArraySearch($string, $ar3D[495][0][0])
$stringarraysearchtime = TimerDiff($t)MsgBox(0, "Index = " & $index, _
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
StringFormat("__ArraySearch()" & @TAB & @TAB & "%.2f%", $arraysearchtime) & " Millisekunden" & @CRLF & _
StringFormat("__stringArraySearch()" & @TAB & "%.2f%", $stringarraysearchtime) & " Millisekunden")Func __stringArraySearch($string, $search)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$pos = StringInStr($string, $search) - 4
Return Number(StringMid($string, $pos, 3))
EndFunc ;==>__stringArraySearchFunc __ArraySearch(ByRef $array, $search)
[/autoit]
For $i = 0 To UBound($array) - 1
;consolewrite($array[$i][0][0]&@tab&$i&@crlf)
If $array[$i][0][0] = $search Then
Return $i
EndIf
Next
Return -1
EndFunc ;==>__ArraySearch -
Zitat
Das Limit ist die Anzahl an Controls
Reine Schikane der Entwickler, damit niemand mit Controls einen Paint-Clone bauen kann!