Hallo,
schau dir mal in der Hilfe bei GuiCreate() oder im Anhang die GUIControl-Stile an.
Speziell $DS_MODALFRAME und $WS_EX_TOPMOST sollten dir da weiterhelfen
ciao
Andy
Beiträge von Andy
-
-
-
Zitat
Aber es passiert gar nichts wenn ich auf den button klicke ?
Stimmt nicht! Selbstverständlich "passiert etwas", nur nicht so wie du dir das vorstellt. Die Hilfe bietet in diesem Fall nicht viel Hilfe^^ ich habe das Beispiel deshalb etwas erweitert
[autoit]#include <GUIConstantsEx.au3>
[/autoit][autoit][/autoit][autoit]Opt('MustDeclareVars', 1)
[/autoit][autoit][/autoit][autoit]Example()
[/autoit][autoit][/autoit][autoit]Func Example()
[/autoit][autoit][/autoit][autoit]
Local $checkCN, $msg
GUICreate("My GUI Checkbox") ; will create a dialog box that when displayed is centered$checkCN = GUICtrlCreateCheckbox("CHECKBOX 1", 10, 10, 120, 20)
[/autoit][autoit][/autoit][autoit]GUISetState() ; will display an dialog box with 1 checkbox
[/autoit][autoit][/autoit][autoit]; Run the GUI until the dialog is closed
[/autoit][autoit][/autoit][autoit]
While 1
$msg = GUIGetMsg()If $msg = $GUI_EVENT_CLOSE Then ExitLoop
[/autoit][autoit][/autoit][autoit]
If $msg = $checkCN Then ;die checkbox sendet eine Nachricht
If GUICtrlRead($checkCN) = $GUI_CHECKED Then ;der Status des Checkbox-Controls wird festgestellt, wenn "angehakt" dann
ToolTip("Checkbox angehakt") ;infotext anzeigen
Else ;ansonsten
ToolTip("Checkbox NICHT angehakt")
EndIf
Sleep(1000) ;eine Sekunde text anzeigen
ToolTip("") ;toolbox löschen
EndIfWEnd
[/autoit]
EndFunc ;==>Example
[autoit]Zitatdas ich vorher noch das Verzeichnis auswählen kann
FileSelectFolder ;sollte dir weiterhelfen
[/autoit] -
Hi,
ob du deine Variable in die Registry einträgst, oder in eine TXT oder in eine INI-Datei oder in ein "Binär"-File bleibt vollkommen wurscht. Überall werden Dateien geöffnet, die Daten eingetragen und beim Starten deines Programms ausgelesen. Such die FÜR DICH einfachste Möglichkeit aus, funktionieren werden alle...und sind m.E auch mit gleichem Aufwand zu handhaben, also Geschmacksache
-
Zitat
C++ hat eindeutig den Geschwindigkeitsvorteil, aber auch so seine Tücken, Pointer etc - unmanaged code halt
Ja, für denjenigen, der in den Eingeweiden des BS und/oder auch der Hardware graben muss, ist C sicherlich erste Wahl. Über den Geschwindigkeitsvorteil beim AUSFÜHREN der Programme braucht man auch kein Wort zu verlieren. Interessant wirds bei der Programmerstellung an sich, da sind "Spezialsprachen" für bestimmte Anwendungsfälle (da zähle ich jetzt auch mal AutoIt dazu) wesentlich im Vorteil. Mal schnell in 2 Minuten in einer Scriptsprache einen 10-Zeiler "hinrotzen", da dauert die Suche nach den passenden Bibliotheken in C schon länger, vorrausgesetzt, die gesuchte Funktion ist darin überhaupt vorhanden (wovon ich ausgehe).
Wenn man sich die Möglichkeiten der dotnet-Familie mal vor Augen führt fragt man sich doch, warum nicht "alle" damit programmieren. Das Konzept überzeugt jedenfalls.
ABER: Die Hilfe und die darin vorhandenen Beispiele sowie die Beschaffung von Informationen rund um das programmtechnische Problem sind m.E. wesentlich höher einzustufen wie die eigentlichen Fähigkeiten der Programmiersprache. (gutes Beispiel ist die Existenz von Trolltechs Qt!)
Ganz ehlich gesagt bin ich gerade von der Hilfe innerhalb der .NET-Sprachen herb enttäuscht, mit einigen hunderttausend Mannjahren weniger Entwicklungspower haben "unsere" AutoIt´ler da m.E. die Nase sogar vorne!
Sicherlich hat die Oberfläche von.z.B. Visual-Basic superfeine "Goodies", aber irgendwie vergleiche ich das immer mit der Brücke eines Supertankers oder Verkehrsflugzeugs. Wer täglich stundenlang damit zu tun hat, für den ist das einfach, aber wenn jemand 3x in der Woche ein kurzes Programm schreiben möchte, für den wäre ein "Noob"-Modus sicherlich sinnvoll. Code in den Editor kloppen, F7 drücken, läuft; das fällt leider bei .NET aus...(zu 90%)!
Die Grätsche zwischen Supertankerkapitän und Paddelbootfahrer schaffen die zzt NOCH nicht....
-
Hallo,
[autoit]ZitatDer nutzer hat nun 9 ausgewählt wie kann ich nun herrausbekommen das er die 9 angewählt hat ???
guictrlread() ;sollte dir weiterhelfen
[/autoit]Weiterhin benutzt du den OnEventMode zusammen mit dem MessageMode, das KANN problemlos funktionieren, muss aber nicht (sieht man schön an deinem Beispiel^^)
[autoit]
Wenn du den Oneventmodus nutzt, musst du sicherstellen, daß dar Anwender nicht während der Ausführung einer Funktion schon die nächste startet.
Daher wäre mein Rat bei dieser GUI zunächst den Messagemode zu verwenden.
Ausserdem bietet sich, wenn du mit mehreren "Seiten" innerhalb der GUI arbeiten möchtest, ein sog. TAB (Karteireiter) an. Somit brauchst du dich nicht mehr um @SW_SHOW und @SW_HIDE zu kümmern. Schau dir mal das Hilfebeispiel zuGUICtrlCreateTab
[/autoit]an. Beachte aber bei der Erstellung der Tabs mit KODA, dass der Inhalt eines Tabs sofort nach der Definition dieses Tabs erfolgen muss, da der Inhalt sonst auf ALLEN TAB-Seiten dargestellt wird.
-
Zitat
Was meinst du damit?:
Ich meine, daß du ein Fahhrad nimmst wenn man ein Fahrrad benötigt, und wahrscheinlich nimmst du einen Sattelschlepper, wenn man einen Sattelschlepper benötigt
Wollte dein Zitat nur noch mal "verbildlichen"
-
Hi, so kannst du überprüfen, wie viele und welche Dateien per drag&drop auf deine EXE gezogen wurden. Das Limit liegt aber bei (ich müsste nachschauen) 67 Dateien...
[autoit]$anzahl=$cmdline[0]
[/autoit]
$dateien=""
if $anzahl=0 then
msgbox(0,0,"keine Dateien ausgewählt")
Else
for $i=1 to $anzahl
$Dateien&=$cmdline[$i]&@CRLF
next
msgbox(0,$anzahl,$dateien)
endifSo kannst du dein Programm auch über den "Senden an"-Befehl im Kontextmenü des Explorere erreichbar machen. Dateien markieren, rechtklick, in "Senden an" wechseln und dein Programm auswählen
[autoit]$ret = FileCreateShortcut(@ScriptDir & "\easyupload.exe", @UserProfileDir & "\sendto\EasyUpload.lnk") ; sendto-eintrag zeigt jetzt auf easyupload_temp.exe
[/autoit]
If $ret = 0 Then MsgBox(0, "Fehler", "Fehler beim Schreiben der Verknüpfung in den " & @UserProfileDir & "\sendto\ -Ordner") -
Hallo,
ich benutze haupsächlich einen lokal installierten FTP-Server und ab und zu mal einen "externen" im I-Net...
Auch mit AutoIt-Programmen ist mir dabei nie aufgefallen, daß Dateien nicht oder nicht richtig downgeloaded oder geupped werden. Ja, es kann vorkommen, daß eine sehr große Datei gerade auf dem Server upgedatet wird, diese steht natürlich dann auch im Verzeichnis, aber ein versuchter Download wird (richtigerweise) verhindert, da die Datei zu diesem Zeitpunkt ja noch beschrieben wird. Aber das ist bei anderen BS auch nicht anders.ZitatAutoIt findet geuploadetet Dateien erst ca. 20 Minuten später
Kann ich von hier aus nicht bestätigen, wie gesagt, schon während des Uploads werden die angelegten Files angezeigt. Der Download schlägt (solange upgeloadet wird) natürlich fehl....s.o., d.h. wenn der Upload 20 min dauert, dann kann auch niemand in dieser Zeit diese Datei downloaden.
-
Zitat
also mit was man persönlich besser zurecht kommt
Dazu fällt mir nur mein Standardspruch bzgl. Werkzeug auf der Baustelle ein: "Soviel wie nötig, so einfach wie möglich!". Es gibt Leute, die tragen 2 Werkzeugkisten in den 7. Stock obwohl die Arbeit die dort verrichtet werden soll, nur einen Einstellschlüssel und "Hosentaschenwerkzeug" erfordert. Ebendiese Leute klagen regelmäßig in der Mittagspause schon über Kreuzweh infolge der "ewigen Schlepperei" und erledigen die restliche Arbeit eher langsam....
Was das mit deiner Frage zu tun hat? Generationen von Programmierern kamen bisher sehr gut ohne C++ zurecht, und in Zukunft werden es eher mehr als weniger werden die liebend darauf verzichten werden. Nimm das zu deinem Problem passende Werkzeug, bei dem du am schnellsten zu deinem Ergebnis kommst ohne massig Ballast mitzuschleppen!ZitatAber da ich meistens eher kleiner Projekte mache, arbeite ich meistens mit Autoit
Jede Wette, dieser Mann fährt nicht mit einem Sattelschlepper morgens zum Brötchenholen^^
-
autoBert
der TA wollte nicht die ANZAHL der eingegebenen Zeichen begrenzen sondern beim Input nur Einsen und Nullen zulassen....irgendwo hatte ich da extra mal ne Funktion für geschrieben.....oder war dein Post auf den von mir erwähnten Stolperstein bezogen?
Aber auch dann verstehe ich den Zusammenhang nicht
-
...und wenn man keinerlei Ahnung von RegExen hat...
[autoit]$string = '0101200101'
[/autoit]
$test=stringreplace(stringreplace($string,"0","1"),"1","1")
if @extended<>stringlen($string) then
MsgBox(0,0, 'Fehler! Bitte nur Nullen und Einsen eingeben!')
Else
MsgBox(0,0, 'Eingabe ok!')
EndIfwobei dort zugegebenermaßen ein FETTER Stolperstein drin sitzt, wer findet ihn?^^
-
Hallo Raupi,
die ControlID´s werden m.E. nach der Reihe bei Entstehung durchnummeriert. Das Control mit der "größten" ID ist dann das zuletzt erstellte
ciao
Andy -
Zitat
Für Textdateien, ok, aber bei Binärdaten wird das nicht funktionieren.
Dort gibt es keine "Leerzeichen" und "Wörter".naja, 2x8Bit sind ja auch ein "word"^^
Das Prinzip ist jedenfalls universell anwendbar, bei einer 2-Farben Bitmap (Monochrom) die nicht gerade extrem gedithered ist, sollte man auch zu schönen Ergebnissen kommen. Bei einem gescannten Text zum Beispiel.
Hast mich auf ne Idee gebracht.... -
Zitat
Bei $BS_DEFPUSHBUTTON gibt teilweise Problem, wenn ein anderer Button den Fokus hat.
Das verstehe ich nicht, entweder soll mit einem "Enter" der Fokus auf das nächste Inputfeld geschaltet werden, oder es soll ein Button gedrückt werden. Beides zusammen geht nicht, bzw ist ein Problem der Programmlogik.
Die ausgefüllten Inputfelder sollen doch irgendwann weiterverarbeitet werden (Button am Ende der Maske). Da könnte man doch Oskars Idee weiterverarbeiten und nach dem Enter im letzten Inputfeld direkt auf den Button springen. Das ergäbe m.E, auch Sinn in der Usability. Wenn man vom letzten Inputfeld per TAB(s) zum Button springen muss, dann kann man gleich (wie gehabt) durch die Felder Tabben...*/EDIT/* wg Langsamkeit
ZitatIn WM_Command den Fokus bestimmten und in Abjängigkeit vom Fokus reagieren.
so hatte ich das gemeint^^
-
so ggf....
Spoiler anzeigen
[autoit]#include <ButtonConstants.au3>
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>Global $eventCount = 0
[/autoit] [autoit][/autoit] [autoit]
$sHeader = "Input1|Input2|Input3"
Global $hGui = GUICreate("", 400, 400, -1, -1)
Global $aHeader = StringSplit($sHeader, '|') ; Überschriften-Array
Global $aNew[$aHeader[0]] ; Array für die Input-IDs
Global $aInputWidth[$aHeader[0]] = [100, 100, 100] ; hier die Länge (in Pixel) der Inputfelder eintragen
Global $xPos = 20
For $i = 1 To $aHeader[0]
GUICtrlCreateLabel($aHeader[$i], $xPos + 2,200, 110, 20) ; Überschriften-Label erstellen
GUICtrlSetFont(-1, 8, 400, 0, 'Verdana') ; Schriftgröße und -art der Überschriften festlegen
$aNew[$i - 1] = GUICtrlCreateInput("", $xPos, 220, $aInputWidth[$i - 1], 20,Default, $WS_EX_STATICEDGE) ; Eingabefelder erstellen
GUICtrlSetFont(-1, 10, 600, 0, 'Verdana') ; Schriftgröße und -art der Eingabefelder festlegen
$xPos += $aInputWidth[$i - 1] + 5
Next$btn_virtuell=GUICtrlCreateButton("test",10,10,10,10,$BS_DEFPUSHBUTTON) ;button erstellen
[/autoit] [autoit][/autoit] [autoit]GUISetState(@SW_SHOW, $hGui)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
GUIRegisterMsg($WM_Command ,"WM_COMMAND")
GUIctrlSetState($btn_virtuell,$GUI_hide ) ;button unsichtbar machenWhile 1
[/autoit] [autoit][/autoit] [autoit]
$nMsg = GUIGetMsg(1) ; Message-Event holen (1) = erweiterter Modus
Switch $nMsg[0] ; anhand der Control-ID das entsprechende Case aufrufen
case $btn_virtuell
Tooltip("Enter gedrückt")
sleep(1000)
Tooltip("")
case $anew[0]
GUICtrlSetState($aNew[1], $GUI_FOCUS)
#Region Schließen
Case $GUI_EVENT_CLOSE ; User hat auf das Schließen-Symbol geklickt (bzw. die ESC-Taste gedrückt)
Switch $nMsg[1] ; erweiterte Abfrage für welches Fenster
Case $hGui ; User will das Hauptfenster schließen
exitEndSwitch
[/autoit] [autoit][/autoit] [autoit]#EndRegion Schließen
[/autoit] [autoit][/autoit] [autoit]
EndSwitchWEnd
[/autoit] [autoit][/autoit] [autoit]Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
[/autoit] [autoit][/autoit] [autoit]
Local $hwndFrom, $iIDFrom, $iCode
$iIDFrom = BitAND($iwParam, 0xFFFF) ; Low Word
$iCode = BitShift($iwParam, 16) ; Hi Word
Switch $iIDFrom
case $anew[0]
switch $iCode
case 0
GUICtrlSetState($aNew[1], $GUI_FOCUS)
EndSwitch
case $anew[1]
switch $icode
case 0
GUICtrlSetState($aNew[2], $GUI_FOCUS)
EndSwitch
case $anew[2]
switch $iCode
case 0
GUICtrlSetState($aNew[0], $GUI_FOCUS)
EndSwitchEndSwitch
[/autoit]
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_COMMAN -
Hallo,
vielleicht kannst du dieses Programm (oder ein anderes) über die Kommandozeile steuern, dann würde eine enfache Batch-(oder AutoIt-)Datei reichen.Oder du steuerst das Programm über Controlclicks, so wie das aussieht, sollte es auch kein Problem darstellen, zur Not reicht ja auch ein "Mausclick"-Script.
In Scite gibts auch bei EXTRAS den Recorder, für einen Versuch der erste Anfang^^ciao
Andy -
Hi,
zum Beispiel da könnte man sich anschauen wie man "mehrere"^^ Pixel finden kann....ciao
Andy*/Tante Edith sagt:/* Bei den "Bottern" im benachbarten Forum findes du aber sicherlich wesentlich bessere Beispiele....da hats haufenweise Spezialisten^^
und weils so schön ist, dieser Beitrag passt wieder mal zum Thema!!!

-
thx vielmals...
aber:^^
Man bekommt beim Beispiel1 den "richtigen" Fensterinhalt in die Datei gespeichert, auch wenn GuiSetState() ausgeklammert ist. Das verstehe ich, man speichert ja direkt die Bitmap.Im 2. Beispiel wird, wenn ich die Bildbearbeitung im "Hintergrund" laufen lasse, nur eine Bildschirmcopy gespeichert. Das hat wohl den Grund, daß die devicecontexte die Bitmapdaten an der Position der (unsichtbaren) GUI auf dem Bildschirm kopieren. Wie müsste man das Script ändern, daß sowohl bei "eingeschalteter" GUI, als auch im Hintergrund die richtigen Bitmaps gespeichert werden?
-
Hallo,
mal 2 Beispielscripte, ich hab gerade nen Gehirnkrampf und komme nicht weiter....
Wie bekomme ich die die BITMAPS (innerhalb des Fensters) gespeichert...Spoiler anzeigen
[autoit]#include <GuiConstantsEx.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GDIPlus.au3>Opt('MustDeclareVars', 1)
[/autoit] [autoit][/autoit] [autoit]_Main()
[/autoit] [autoit][/autoit] [autoit]Func _Main()
[/autoit] [autoit][/autoit] [autoit]
Local $hGUI, $hWnd, $hGraphic, $hBrush, $hFormat, $hFamily, $hFont, $tLayout; Create GUI
[/autoit] [autoit][/autoit] [autoit]
$hGUI = GUICreate("GDI+", 400, 300)
$hWnd = WinGetHandle("GDI+")
GUISetState(); Draw a string
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
_GDIPlus_Startup ()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND ($hWnd)
$hBrush = _GDIPlus_BrushCreateSolid (0x7F00007F)
$hFormat = _GDIPlus_StringFormatCreate ()
$hFamily = _GDIPlus_FontFamilyCreate ("Arial")
$hFont = _GDIPlus_FontCreate ($hFamily, 12, 2)
$tLayout = _GDIPlus_RectFCreate (140, 110, 100, 20)
_GDIPlus_GraphicsDrawStringEx ($hGraphic, "Hello world", $hFont, $tLayout, $hFormat, $hBrush);*********************Bitmap soll gespeichert werden********************
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]; Loop until user exits
[/autoit] [autoit][/autoit] [autoit]
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE; Clean up resources
[/autoit] [autoit][/autoit] [autoit]
_GDIPlus_FontDispose ($hFont)
_GDIPlus_FontFamilyDispose ($hFamily)
_GDIPlus_StringFormatDispose ($hFormat)
_GDIPlus_BrushDispose ($hBrush)
_GDIPlus_GraphicsDispose ($hGraphic)
_GDIPlus_Shutdown ()EndFunc ;==>_Main
[/autoit]
oder hier....Spoiler anzeigen
[autoit]#include <WinAPI.au3>
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
#include <WindowsConstants.au3>
#include <GDIPlus.au3>Opt('MustDeclareVars', 1)
[/autoit] [autoit][/autoit] [autoit]_GDIPlus_Startup()
[/autoit] [autoit][/autoit] [autoit]local $hfile_Source = _GDIPlus_ImageLoadFromFile(@WindowsDir & "\web\wallpaper\Tulpen.jpg")
[/autoit] [autoit][/autoit] [autoit]
local $hfile_dest = _GDIPlus_ImageLoadFromFile(@WindowsDir & "\web\wallpaper\Mondkrater.jpg")
local $iX1 = 300;_GDIPlus_ImageGetWidth($hSource1)
local $iY1 = 400;_GDIPlus_ImageGetHeight($hSource1)
local $iX2 = 300;_GDIPlus_ImageGetWidth($hSource2)
local $iY2 = 400;_GDIPlus_ImageGetHeight($hSource2);****************GUI DEST*******************
[/autoit] [autoit][/autoit] [autoit]
local $hGui_dest = GUICreate("DEST", $iX1 , $iY1)
local $hPic_dest = GUICtrlCreatePic('', 0,0, $iX1 , $iY1)
local $hWnd_dest = WinGetHandle($hGui_dest)
GUISetState(@sw_show,$hgui_dest)local $hGraphic_dest = _GDIPlus_GraphicsCreateFromHWND($hWnd_dest)
[/autoit] [autoit][/autoit] [autoit]
local $hDestination_dest = _GDIPlus_BitmapCreateFromGraphics($iX1, $iY1, $hGraphic_dest)
local $hGraphiccontext_dest = _GDIPlus_ImageGetGraphicsContext($hDestination_dest)
_GDIPlus_GraphicsDrawImage($hGraphiccontext_dest, $hfile_dest, 0, 0) ;ziel in context schreiben
_GDIPlus_GraphicsDrawImage($hGraphic_dest, $hfile_dest, 0, 0); ziel ist fenster;****************GUI source*******************
[/autoit] [autoit][/autoit] [autoit]
local $hGui_source = GUICreate("SOURCE", $iX2 , $iY2,10,10)
local $hPic_source = GUICtrlCreatePic('', 0,0, $iX2 , $iY2)
local $hWnd_source = WinGetHandle($hGui_source)
GUISetState(@sw_show,$hgui_source)local $hGraphic_source = _GDIPlus_GraphicsCreateFromHWND($hWnd_source)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
local $hDestination_source = _GDIPlus_BitmapCreateFromGraphics($iX2, $iY2, $hGraphic_source)
local $hGraphiccontext_source = _GDIPlus_ImageGetGraphicsContext($hDestination_source)
_GDIPlus_GraphicsDrawImage($hGraphiccontext_source, $hfile_Source, 0, 0) ;wenn man das bild in den Context schreibt, kann man es speichern
_GDIPlus_GraphicsDrawImage($hGraphic_source, $hfile_Source, 0, 0) ;bild in das Fenster zeichnen;*************BITBLT*****************
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
local $verfahren=$mergepaint
local $hdc_dest = _WinAPI_GetDC($hgui_dest)
local $hdc_source = _WinAPI_GetDC($hgui_source)
sleep(1000)
_WinAPI_BitBlt($hDC_dest, 0, 0, $ix1, $iy1, $hDC_source, 0,0, $verfahren);**************BITMAP aus Fenster DEST soll gespeichert werden**************
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Do
[/autoit] [autoit][/autoit] [autoit]
Until GUIGetMsg() = -3_GDIPlus_Shutdown()
[/autoit]thx vorab
AndyEDIT/ soll nicht per screencopy, sondern "direkt aus dem Context gespeichert werden