Lies bitte mal die Hilfe zu Word Attach. Speziell den zweiten Parameter und die Beschreibung des Standardwerts.
Beiträge von name22
-
-
Da gibt es diverse Möglichkeiten.Ich verwende für große Datenmengen meistens eine Datenbank (SQL), aber ob sich das für deine simple Datenstruktur lohnt weiß ich nicht (man müsste ausprobieren ob und wie viel schneller das ist). Wie schreibst du denn im Moment in die Datei?
Sonst fällt mir nur die Möglichkeit eines asynchronen Schreibvorgangs ein... Kannst ja mal danach googlen. -
Das stimmt nicht ganz... So hast du eine Uhr die bis zu 1s daneben liegen kann.
-
@rossini Wenn du deinen ersten Beitrag bearbeitest kannst du oben das Präfix auf "[gelöst]" setzen.

Ich würde es eigentlich wie UEZ auch eher mit GDI bzw. GDIPlus umsetzen, aber für dich wird das wahrscheinlich mit den Standardcontrols einfacher sein. Außerdem scheint der GDI+ Ansatz für transparente Fenster den ich im Sinn habe sowieso nicht unter Windows XP zu funktionieren (vermutlich weil XP noch nicht mit Alpha Blending bei Fenstern zurechtkommt. Vollständige/Keine Transparenz pro Pixel funktioniert aber, wie man es an deinem Beispiel sieht) ^^. -
Alles Gute Oscar
. -
Wenn du nur willst, dass ein Pic Control auch PNG Dateien akzeptiert, dann haben wir dafür schon einige Beispiele geschrieben, such mal im Forum danach.
Falls ich dich komplett falsch verstanden habe, dann drück dich deutlicher aus :D.P.S. Woher kommt bitte die Funktion GUICtrlCreatePNG? Oder hast du dir die nur ausgedacht?
Edit: Chris Von wegen umständlich... Es gibt schon fertige Funktionen dafür (ich hab sogar mal eine geschrieben)
-
Spoiler anzeigen
[autoit]#include <GuiConstants.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GuiconstantsEx.au3>
#include <WindowsConstants.au3>
#include <WinAPI.au3>Dim $nowmins, $nowhours, $nowsecs
[/autoit] [autoit][/autoit] [autoit]
Dim $countmins, $counthours, $countsecs
Dim $timermins, $timerhours, $timersecs
Dim $endtime, $jetztzeit, $startzeit, $nettozeit
Dim $relzeit, $relseconds, $relminutes, $relhours
Dim $greenhx$greenhx = 0x72C45C
[/autoit] [autoit][/autoit] [autoit]
$timerhours = 0
$timermins = 5
$timersecs = 0$nowhours = @HOUR
[/autoit] [autoit][/autoit] [autoit]
$nowmins = @MIN
$nowsecs = @SEC$countsecs = $nowsecs + $timersecs
[/autoit] [autoit][/autoit] [autoit]
$countmins = $nowmins + $timermins
$counthours = $nowhours + $timerhoursIf $countsecs > 59 Then
[/autoit] [autoit][/autoit] [autoit]
$countsecs = $countsecs - 60
$countmins = $countmins + 1
EndIfIf $countmins > 59 Then
[/autoit] [autoit][/autoit] [autoit]
$countmins = $countmins - 60
$counthours = $counthours + 1
EndIfIf $counthours > 23 Then
[/autoit] [autoit][/autoit] [autoit]
Exit
EndIf$startzeit = ($nowhours * 3600) + ($nowmins * 60) + $nowsecs
[/autoit] [autoit][/autoit] [autoit]
$endtime = ($counthours * 3600) + ($countmins * 60) + $countsecs
$nettozeit = ($timerhours * 3600) + ($timermins * 60) + $timersecs$Form1 = GUICreate("Form1", 120, 35, @DesktopWidth - 120, @DesktopHeight - 35, $WS_POPUP, BitOR($WS_EX_TOPMOST, $WS_EX_LAYERED))
[/autoit] [autoit][/autoit] [autoit]GUISetBkColor(0xABCDEF)
[/autoit] [autoit][/autoit] [autoit]
_WinAPI_SetLayeredWindowAttributes($Form1, 0xABCDEF, 255)$jetztzeit = (@HOUR * 3600) + (@MIN * 60) + @SEC
[/autoit] [autoit][/autoit] [autoit]
$relhours = Floor(($endtime - $jetztzeit) / 3600)
$relminutes = Floor((($endtime - $jetztzeit) - ($relhours * 3600)) / 60)
$relseconds = Floor(($endtime - $jetztzeit) - ($relhours * 3600) - ($relminutes * 60))
$Label_3 = GUICtrlCreateLabel(StringFormat("%02u", $relminutes), 38, 0, 100, 30)
$Label_4 = GUICtrlCreateLabel(":", 66, 0, 100, 30)
$Label_5 = GUICtrlCreateLabel(StringFormat("%02u", $relseconds), 76, 0, 100, 30)
GUICtrlSetFont($Label_3, 20, 800, 0, "Arial")
GUICtrlSetColor($Label_3, $greenhx)
GUICtrlSetFont($Label_4, 20, 800, 0, "Arial")
GUICtrlSetColor($Label_4, $greenhx)
GUICtrlSetFont($Label_5, 20, 800, 0, "Arial")
GUICtrlSetColor($Label_5, $greenhx)
GUISetState()AdlibRegister("_Update", 100)
[/autoit] [autoit][/autoit] [autoit]While ($jetztzeit <= $endtime)
[/autoit] [autoit][/autoit] [autoit]
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE
AdlibUnRegister()
Exit
EndSelect
WEndFunc _Update()
[/autoit] [autoit][/autoit] [autoit]
$relzeit = $endtime - $jetztzeit
_SetData($Label_3, StringFormat("%02u", $relminutes))
_SetData($Label_5, StringFormat("%02u", $relseconds))
$jetztzeit = (@HOUR * 3600) + (@Min * 60) + @Sec
$relhours = Floor(($endtime - $jetztzeit) / 3600)
$relminutes = Floor((($endtime - $jetztzeit) - ($relhours * 3600)) /60)
$relseconds = Floor(($endtime - $jetztzeit) - ($relhours * 3600) - ($relminutes * 60))
EndFuncFunc _SetData($cControl, $sData)
[/autoit]
If GUICtrlRead($cControl) <> $sData Then GUICtrlSetData($cControl, $sData)
EndFunc
Das lässt sich zwar immer noch verbessern, aber so flackert es nicht mehr und läuft zuverlässiger. Du solltest es generell vermeiden irgendwelche zusätzlichen Abfragen und Funktionen in die Hauptschleife zu schreiben (neben der GUIMsg Abfrage). Ich hab jetzt den Teil der für das updaten der Controls zuständig ist in eine Funktion gepackt und mit AdlibRegister mit einem 100ms Intervall registriert, dadurch wird die Funktion alle 100 Millisekunden aufgerufen (der normale Scriptverlauf wird für die Dauer der Funktion unterbrochen).
Dann habe ich alle unnötigen Funktionen aus der Funktion genommen. Es reicht wenn du einmal die GUI mit GUISetState sichtbar machst, die versteckt sich nicht automatisch wieder :P. Das Gleiche gilt für GUICtrlSetFont und GUICtrlSetColor. Das muss alles nur ein einziges mal ausgeführt werden wenn du die entsprechenden Eigenschaften ändern willst. Dieser überflüssige Code war der Hauptgrund für das Flackern.
Als letztes habe ich eine weitere Funktion geschrieben um den Text der Controls zu ändern, die ändert ihn aber nur wenn er sich vom momentanen Inhalt des Controls unterscheidet, so wird unnötiges aktualisieren vermeidet.Das solltest du dir vielleicht noch mal genauer anschauen, eventuell hilft dir dabei ein Tutorial oder die umfassende AutoIt Hilfedatei.

-
Nicht jeder hat Lust die verlorengegangenen Zeilenumbrüche in deinem Script manuell wieder einzufügen ;).
Kannst du nochmal versuchen das zu posten (eventuell mit einem anderen Browser)? Sonst könntest du es auch als Datei anhängen. Dann erleichterst du usns die Arbeit ein wenig. -
Blume *Hand geb* :D.
-
Raupi Dann wäre das auch endlich mal geklärt :D. Wenn das nächste Mal Pokemonfieber in der SB ausbricht werde ich einfach diesen Post verlinken ;).
-
Hm.. Na gut.
Ich habe mich mal vor langer Zeit bei einem MMORPG angemeldet nachdem mich 2 Kumpels ewig damit genervt haben.
Da ich von Natur aus extrem unkreativ bin, habe ich in die Zeile "Name:" einfach "Name" eingegeben... Das kam mir als erstes in den Sinn.
Allerdings hatte da schon jemand die selbe Blöde Idee wie ich, also hab ich es mit "Name2" versucht. Kein Erfolg. Nachdem die nächsten 3 Versuche fehlschlugen war mir das zu blöd und ich bin direkt zu 22 gesprungen.
Nach ein paar Tagen hatte ich mich schon daran gewöhnt.Das war die langweilige Geschichte meines langweiligen Namens *seufz*...
-
Herzlich Willkommen an Board ;).
-
Dann such dir das nächste Mal bitte einen anderen sinnlosen Zweck. Laut unseren Forenregeln sind Spielebots nämlich nicht erwünscht.
-
Ich bezweifle, dass ich das besser als Wikipedia erklären kann. Ich versuchs trotzdem mal :D.
Base64 ist ein Stellenwertsystem genau wie Base10, unser Dezimalsystem, allerdings nicht mit einem Stellenwert von 10, sondern 64. Das heißt, wenn du eine Ziffer in diesem System nach links verschiebst ist sie danach nicht 10 mal, sondern 64 mal so groß wie vorher. Dazu braucht man logischerweise auch 64 Ziffern um all diese Werte mit einem einzigen Zeichen darstellen zu können.
Du kannst Werte in jedes dieser Stellenwertsysteme konvertieren. Zum Beispiel von Dezimal zu Hexadezimal (Base16) oder auch ins Binärsystem. Der Wert bleibt der gleiche, nur die Darstellung ändert sich.Wenn du nun einen String in Base64 kodierst machst du nichts anderes. Jedes einzelne Zeichen ist im Grunde nur eine Zahl. Je nach Zeichenkodierung kann ein Zeichen auf verschiedene Arten durch einen Wert repräsentiert werden. Im Fall von ASCII werden alle 128 Zeichen (Buchstaben, Zahlen, Sonderzeichen etc.) in 7-bit im Binärsystem kodiert (wenn du alle 7-Bits mit einsen füllst bekommst du 127, zusammen mit 0 macht das 128 verschiedene Zahlen).
Base64 ist für die Kodierung von 8-Bit Daten besonders gut geeignet. Davon kannst du nämlich immer 3-Byte der ursrünglichen Daten (1-Byte=8-Bit) aneinanderreihen und auf 4 aneinandergereihte 6-Bit Blöcke im Base64 System aufteilen. Dadurch sinkt die Anzahl der Zeichen für die Kodierung von 256 auf 64 und kann durch lesbare und verbreitete Zeichen dargestellt werden die auch mit sehr alten Systemen noch kompatibel sind. Am String ändert das nichts, bloß kann den dann kein Mensch mehr normal lesen :P.Falls hier Fehler drin sind, bitte ich natürlich darum mich zu verbessern.
Edit: Das von James gefällt mir wesentlich besser. Wenn du das nicht verstehst, machst du was falsch :D.
-
Führ es mal im 32-bit Modus aus.
[autoit]#AutoIt3Wrapper_Usex64=0
[/autoit] -
Nett. Aber richtig cool wird das ja erst durch die OpenGL - AutoIt Kombination :D.
Bei mir sind es übrigens auch ca. 148 FPS. -
Herzlich Willkommen im Forum dodcar.
Keine Angst, wir beißen nicht (es sei denn du verletzt die Forenegeln :P). Du kannst also bedenkenlos posten ^^. -
Falls du unbedingt beim Input Control bleiben möchtest, dann kannst du dessen Zeichenlimit mit
[autoit]GUICtrlSetLimit
[/autoit]setzen.
Ansonsten würde ich dir auch empfehlen ein EditControl (Andys Beitrag) zu verwenden. Das ist für die Eingabe von längeren Texten übersichtlicher. -
Das ist relativ einfach. Schau dir mal diese beiden Funktionen aus der Word.au3 an:
[autoit]_WordDocSave
[/autoit]
_WordDocSaveAs
In der Hilfe findest du auch Beispiele dazu. -
Ich bin mir relativ sicher, dass sowohl GDI als auch GDIPlus das nicht unterstützen. Ich habe auch in anderen Programmiersprachen noch keine Möglichkeit gefunden sie dazu zu bringen. Ob das also direkt per WinAPI geht ist fraglich, ich glaube es nicht.
Die neueren Grafikbibliotheken - DirectX (z.B. DirectDraw) etc. - sollten das von Haus aus unterstützen, falls du das als Alternative in Betracht ziehst.
Eventuell kann man auch beide Grafiklösungen kombinieren, aber je nach Aufwand lohnt sich das vielleicht nicht.
Ansonsten müsste man irgendwie eine andere, externe Möglichkeit finden den VBI des Monitors mitzukriegen. Normalerweise macht man das ja über die Grafikkarte und deren Treiber wenn mich nicht alles täuscht, aber ob man da mit AutoIt rankommt kann ich nicht sagen. Vor allem weiß ich nicht wie sich da die einzelnen Grafikkarten unterscheiden...Naja, vielleicht kommt jetzt noch einer unserer genialen Köpfe vorbei (Andy, UEZ, eukalyptus etc. :D) und präsentiert dir hier die Lösung auf dem Silberteller. Hoffen kann man ja ;).
Zitat von IPUDas Problem was hier auftritt lässt sich vermutlich aber mit dem klassischen Backbuffer beheben (Beispiele wie sowas aussieht in AutoIT findet man z.B. hier) - ich hätts dir zwar auch auf die Schnelle in dein Script bauen können, aber dazu hätte ich das Script in meinem müden Kopf kapieren müssen. Hoffe, dass dir das trotz allem hilft.

Würde mich interessieren wie du das einbauen willst, wenn es bereits im Script vorhanden ist.