Da sind noch weitere Aspekte zu beachten.
Wenn du ein wirklich großes Projekt verwaltest, wie z.B. ein Warenwirtschaftssystem, dann sollten all jene Fenster, die in der späteren Arbeit häufig frequentiert werden (Kunden, Artikel, Aufträge, Rechnungen, muß man abwägen) definitiv vorab erstellt werden, da schon mit dem Befüllen der Datenstrukturen genug Zeit drauf geht.
Eher selten genutzte Fenster (Inventur, Infofenster) kann man dann durchaus zur Laufzeit erstellen.
Und riesige Schleifen? - Egal ob im OnEventMode oder mit GUIGetMsg, je größer das Projekt desto mehr sollte der Übersicht halber jeder Vorgang in eine eigene Funktion ausgelagert werden. Dann läßt sich auch bei GUIGetMsg die Hauptschleife noch lesen.
Beiträge von BugFix
-
-
Im OnEvent-Mode läßt sich das noch etwas straffen. Allerdings ist nach wie vor das Problem des Hineinklickens.
[autoit]
Hier habe ich jetzt noch etwas verfeinert, sodass beim Ziehen des Sliders zwischen zwei Strichen je nach Position auf- oder abgerundet wird auf den nächsten/vorigen 10er Wert.#include <GUIConstants.au3>
[/autoit][autoit][/autoit][autoit]
#include <GuiSlider.au3>
Opt('GUIOnEventMode', 1)$Form1 = GUICreate("Test", 275, 103, 193, 125)
[/autoit][autoit][/autoit][autoit]
GUISetOnEvent($GUI_EVENT_CLOSE, '_end')
$Slider1 = GUICtrlCreateSlider(8, 8, 265, 49, BitOR($TBS_AUTOTICKS,$TBS_ENABLESELRANGE))
GUICtrlSetOnEvent(-1, '_slider')
GUISetState(@SW_SHOW)While 1
[/autoit][autoit][/autoit][autoit]
Sleep(100)
WEndFunc _end()
[/autoit][autoit][/autoit][autoit]
Exit
EndFuncFunc _slider()
[/autoit][autoit][/autoit][autoit]
GUICtrlSetData($Slider1, _GetRound(Round(GUICtrlRead($Slider1)/10,1))*10)
EndFuncFunc _GetRound($val)
[/autoit]
Local $d = Int($val/0.5)
If Mod($d, 2) Then $d += 1
Return $d/2
EndFunc -
Oder ist das wieder mal ein dummer Vista Fehler ?
Gut möglich, in XP klappt es wie vom Threadstarter gewünscht ==> wenn du den Slider zwischen 2 Striche ziehst, wandert er zum nächst höheren. (Ziehst du ihn genau auf einen Strich, bleibt er natürlich dort)
Edit:
Ich weiß jetzt, was du meinst ==> mit der Maus einfach in den Slider klicken, da bekommst du bei 10er Skalierung immer nur jeden zweiten Strich, das ist völlig normal. -
Na das geht aber schöner
[autoit]
#include <GUIConstants.au3>
[/autoit][autoit][/autoit][autoit]
#include <WindowsConstants.au3>
#include <StructureConstants.au3>
$Form1 = GUICreate("Test", 275, 103, 193, 125)
$Slider1 = GUICtrlCreateSlider(8, 8, 265, 49)
GUISetState(@SW_SHOW)
GUIRegisterMsg($WM_NOTIFY, 'WM_NOTIFY')While 1
[/autoit][autoit][/autoit][autoit]
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEndFunc WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
[/autoit]
Local $hWndFrom,$iCode, $tNMHDR, $hWndSlider, $val
$hWndSlider = $Slider1
If Not IsHWnd($hWndSlider) Then $hWndSlider = GUICtrlGetHandle($hWndSlider)
$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iCode = DllStructGetData($tNMHDR, "Code")
If $hWndFrom = $hWndSlider And $iCode = -16 Then
GUICtrlSetData($Slider1, Ceiling(GUICtrlRead($Slider1) / 10)*10)
EndIf
EndFunc -
Hi,
ich habe hier mal SplashImage und SplashText in einer Funktion vereint.
Die Anzeige erfolgt randlos. Beim Text kann Textfarbe, Hintergrundfarbe (oder Transparenz), Schrifthöhe und Font gesetzt werden.
Die richtige Höhe für die Anzeige müßt ihr ggf. austesten.
Für Image können wie im Original nur gif, jpg, bmp verwendet werden.Edit:
- Bei Anzeige von Bildern braucht die Bildgröße nicht mehr übergeben werden, dies wird in der Funktion selbst ermittelt.
- Fehlerbehandlung hinzugefügt.Edit2:
- Benötigter Platz für Text wird selbst berechnet, keine Größenangabe mehr erforderlich. (Breite u. Höhe entfallen als Param)
- Position ist per Standard rechts unterhalb der MausSpoiler anzeigen
[autoit]#include-once
[/autoit] [autoit][/autoit] [autoit]
#include <StructureConstants.au3>
#include <GDIPlus.au3>
#include <WindowsConstants.au3>
#include <WinAPI.au3>
#include <FontConstants.au3>_SplashOn('Hello World Bla Bla Blub' & @crlf & 'Zeile 2', True, -1, -1, -1, -1, 0xFFFC91, 0, 16)
[/autoit] [autoit][/autoit] [autoit]
Sleep(300)
_SplashOn(@Systemdir & "\oobe\images\mslogo.jpg")
Sleep(300)
_SplashOn(@Systemdir & "\oobe\images\oemlogo.gif")
Sleep(300)
_SplashOn(@Systemdir & "\setup.bmp", False)
Sleep(300)
For $i = 60 To 30 Step -3
_SplashOn("Hello world!", True, -1, -1, 300, 0x0000FF, -1, 1, $i, 'Comic Sans MS')
Next
For $i = 30 To 60 Step 3
_SplashOn("Hello world!", True, -1, -1, 300, 0x0000FF, -1, 1, $i, 'Comic Sans MS')
Next;==================================================================================================
[/autoit]
; Function Name: _SplashOn($Item, $fMouse=True, $left=-1, $top=-1, $timeout=-1, _
; $txtCol=-1, $bkCol=-1, $trans=1, $size=-1, $font=-1, $weight=400)
; Description:: Show an SplashImage (gif,jpg,bmp) or an SplashText
; Parameter(s): $Item - Path picture file or SplashText; Autodetection if file or text
; optional $fMouse - True (default) use mousepos for $left and $top
; optional $left - left margin (default=-1 horizontal centered)
; optional $top - upper margin (default=-1 vertikal centered)
; optional $timeout- time how long to show picture/text in ms (default=-1, 3000 ms)
; optional $txtCol - SplashText: text color RGB (default=-1, red)
; optional $bkCol - SplashText: back color RGB (default=-1, black)
; optional $trans - SplashText: background transparency yes/now (default=1, yes)
; optional $size - SplashText: font size (default=-1, 30) ; 14 conforms approximately 12 at TimesNewRoman
; optional $font - SplashText: font name (default=-1, Arial)
; optional $weight - normal (400) = -1 (Standard), bold (600)
; Return: Success - 1
; Failure - 0 set @error: 1= given file doesn't exist; 2= no size given for textarea
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;==================================================================================================
Func _SplashOn($Item, $fMouse=True, $left=-1, $top=-1, $timeout=-1, _
$txtCol=-1, $bkCol=-1, $trans=1, $size=-1, $font=-1, $weight=400)
Local $width, $height
If $fMouse Then
Local $MPos = MouseGetPos()
$left = $MPos[0]
$top = $MPos[1]
EndIf
If $timeout < 0 Then $timeout = 3000
If $txtCol < 0 Then $txtCol = 0xFF0000
If $bkCol < 0 Then $bkCol = 0x000000
If $trans < 0 Then $trans = 0
If $size < 0 Then $size = 30
If $font = -1 Then $font = 'Arial'
If StringRegExp(StringLeft($Item, 3), '[a-zA-Z]:\\') Then ; picture
If Not FileExists($Item) Then Return SetError(1,0,0)
;~ If ($width = -1) Or ($height = -1) Then
Local $objShell = ObjCreate("Shell.Application")
Local $objFSO = ObjCreate("Scripting.FileSystemObject")
Local $objFile = $objFSO.GetFile($Item)
Local $FileName = $objFSO.GetFileName($objFile)
Local $objFolder = $objShell.Namespace($objFSO.GetParentFolderName($objFile))
For $strFileName In $objFolder.Items
If $objFolder.GetDetailsOf($strFileName, 0) <> $FileName Then ContinueLoop
$width = StringRegExpReplace($objFolder.GetDetailsOf($strFileName, 27), '(\d+).*', '$1')
$height = StringRegExpReplace($objFolder.GetDetailsOf($strFileName, 28), '(\d+).*', '$1')
Next
;~ EndIf
Local $gui = GUICreate("", $width, $height, $left, $top, $WS_POPUP, $WS_EX_TOPMOST)
Local $ctrl = GUICtrlCreatePic($Item, 0, 0, $width, $height)
GUISetState(@SW_SHOW)
Local $pos = WinGetPos($gui), $combined_rgn = _WinAPI_CreateRectRgn(0, 0, 0, 0)
Local $ctrl_pos = ControlGetPos($gui, "", $ctrl)
Local $ctrl_rgn = _WinAPI_CreateRectRgn($ctrl_pos[0], $ctrl_pos[1], $ctrl_pos[0] + $ctrl_pos[2], $ctrl_pos[1] + $ctrl_pos[3])
_WinAPI_CombineRgn($combined_rgn, $combined_rgn, $ctrl_rgn, $RGN_OR)
_WinAPI_DeleteObject($ctrl_rgn)
_WinAPI_SetWindowRgn($gui, $combined_rgn)
Sleep($timeout)
GUIDelete($gui)
Else ; text
Local $gui = GUICreate('')
_GDIPlus_Startup()
Local $hFormat = _GDIPlus_StringFormatCreate(0)
Local $hFamily = _GDIPlus_FontFamilyCreate($font)
Local $style = 0
If $weight > 400 Then $style = 1
Local $hFont = _GDIPlus_FontCreate($hFamily, $size, $style, 3)
Local $tLayout = _GDIPlus_RectFCreate(15, 171, 0, 0)
Local $hGraphic = _GDIPlus_GraphicsCreateFromHWND($gui)
Local $aInfo = _GDIPlus_GraphicsMeasureString($hGraphic, $Item, $hFont, $tLayout, $hFormat)
Local $iWidth = Ceiling(DllStructGetData($aInfo[0], "Width"))
Local $iHeight = Ceiling(DllStructGetData($aInfo[0], "Height"))
_GDIPlus_StringFormatDispose($hFormat)
_GDIPlus_FontDispose($hFont)
_GDIPlus_FontFamilyDispose($hFamily)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_ShutDown()
GUIDelete($gui)
$width = $iWidth
$height = $iHeight
If $left = -1 Then $left = Int((@DesktopWidth/2) - ($width/2))
If $top = -1 Then $top = Int((@DesktopHeight/2) - ($height/2))
Local $tRECT, $hFont, $hOldFont, $hDC
If $left + $width > @DesktopWidth Then $left -= $width
If $top + $height > @DesktopHeight Then $top -= $height
$tRECT = DllStructCreate($tagRect)
DllStructSetData($tRECT, "Left", $left)
DllStructSetData($tRECT, "Top", $top)
DllStructSetData($tRECT, "Right", $left + $width)
DllStructSetData($tRECT, "Bottom", $top + $height)
$hDC = _WinAPI_GetDC(0)
$hFont = _WinAPI_CreateFont($size, 0, 0, 0, $weight, False, False, False, $DEFAULT_CHARSET, _
$OUT_DEFAULT_PRECIS, $CLIP_DEFAULT_PRECIS, $DEFAULT_QUALITY, 0, $font)
$hOldFont = _WinAPI_SelectObject($hDC, $hFont)
Local $sH = Hex($txtCol,6)
$txtCol = '0x' & StringRight($sH, 2) & StringMid($sH,3,2) & StringLeft($sH, 2)
$sH = Hex($BkCol,6)
$bkCol = '0x' & StringRight($sH, 2) & StringMid($sH,3,2) & StringLeft($sH, 2)
_WinAPI_SetTextColor($hDC, $txtCol)
_WinAPI_SetBkColor($hDC, $bkCol)
If $trans Then _WinAPI_SetBkMode($hDC, $TRANSPARENT)
Local $timer = TimerInit()
Do
_WinAPI_DrawText($hDC, $Item, $tRECT, $DT_CENTER)
Sleep(20)
Until TimerDiff($timer) > $timeout
_WinAPI_SelectObject($hDC, $hOldFont)
_WinAPI_DeleteObject($hFont)
_WinAPI_ReleaseDC(0, $hDC)
_WinAPI_InvalidateRect(0, 0)
$tRECT = 0
EndIf
Return 1
EndFunc ;==>_SplashOn -
Neue
Was genau soll uns das jetzt sagen... ? -
wie soll ich nun aber aus GUICtrlRead($RechnerTreeView) die ItemId herrausbekommen.
Rückwärts die ID zu erfragen ist zwar auch möglich, aber viel einfacher ist es doch die ID beim Erstellen des Item in einem Array abzuspeichern. Am Besten als 2D zusammen mit dem Item-Text.
-
Du kannst ein Array natürlich auch mit Do-Until durchlaufen, aber einfacher ist For-Next.
So sollte es funktionieren:Spoiler anzeigen
[autoit]#include <array.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include '_GetFilesFolder_Rekursiv.au3'
;~ Global $counter ;zähler der das ende des Array bestimmen soll <== nicht nötig
;~ Global $filenr ;nummer des Feldes im Array was verwendet wird <== nicht nötig
Global $joungest ;name des Jüngsten Files
;~ Global $date <== nicht nötig
Global $Folder
Global $joungest = ''
Global $path = "e:\dd\"
Global $V_Check ; <== falls das Array außerhalb der Func genutzt werden soll, auch außerhalb deklarieren_check()
[/autoit] [autoit][/autoit] [autoit]; Hier Liegen die Funktionen
[/autoit]
Func _check()
Local $file, $getTimeOld, $getTimeNew
$V_Check = _GetFilesFolder_Rekursiv($path, '*', 0) ; < Parameter für NUR Files übergeben, Liest inhalt des angegebenen Ordner, by Bugfix
For $i = 1 To UBound($V_Check) -1
$file = $V_Check[$i]
$getTimeNew = FileGetTime($file, Default, 1)
If $joungest = '' Then
$joungest = $file
$getTimeOld = $getTimeNew
Else
If $getTimeNew > $getTimeOld Then
$joungest = $file
$getTimeOld = $getTimeNew
ConsoleWrite('jüngste (Moment): ' & $joungest & @TAB & $getTimeOld & @CRLF)
EndIf
EndIf
Next
ConsoleWrite(@CRLF & 'jüngste (Gesamt): ' & $joungest & @TAB & $getTimeOld & @CRLF)
EndFunc -
Ich würde mal sagen: Wahrscheinlichkeit geht gegen null.
Es ist sicher nicht die Intention der Entwickler AutoIt in diese Richtung zu führen, ich würde auch keinen Sinn darin erkennen.
Damit du AutoIt-Befehle ausführen kannst, benötigst du zwangsläufig einen Interpreter. Wenn du den wegrationalisieren willst, kannst du die Sprache in der existierenden Form nicht mehr nutzen. -
Wollte mich auch noch eintragen.

- K-Meleon
und auch Iron, die datenschutzmäßig unbedenkliche Version des Google-Chrom. -
Hast Du mal ein Bsp. zum testen? Bin gerade zu ..... um das hin zu bekommen.
Ersetze im Bsp. einfach: HotKeySet('#!p', '_showP') durch AdlibEnable( '_showP', "ZeitIntervall") -
Verwende doch mal Rekursive Dateiauflistung.
Guckst du: Rekursive Datei/Ordner Auflistung per Objekt
-
Wo besteht der Unterschied/Vorteil bei Verwendung von???
For $i = 0 To UBound($MandatoryIniArray) -1
zu der Schleife
For $i = 0 To $MandatoryIniArray[0]
Wenn eine Funktion ein Array zurückgibt mit Anzahl der Elemente an Index [0] kann man natürlich damit arbeiten. Ich bevorzuge aber auch die UBound-Abfrage. So brauch ich mir nie Gedanken machen, ob denn ein Zähler mitgeführt wird. Und beim Lesen von Quelltext ist es meiner Meinung nach auch übersichtlicher, da UBound sofort sagt: bis zum letzten Element. -
Local $Ip[2]
For $i = 0 to 2
Na, dann zähle mal.
-
Da man sich in AutoIt nicht mit Linkern herumschlagen muß
können wir wenig zu deinem Problem sagen. Da solltest du dich an C-Forum wenden.
(übrigens: Ohne jeden Code kann man eh ganz schwer was sagen) -
- Wordsturtz
Aua-Aua, Oscars Spiel so zum Absturtz bringen...
-
-
Tolle Idee
Vielleicht noch etwas um mehr Variation in die Punktevergabe zu bringen:
Mach die Punktezahl abhängig von der Höhe aus der der Buchstabe fallengelassen wird, also wenn du bis zum Schluß wartest und hin- und herbewegst gibt es die wenigsten Punkte. Läßt du den Buchstaben gleich nach seinem Erscheinen fallen, gibt es die meisten Punkte. -
Das kannst du so machen:
[autoit]Local $array[3][2] = [ _
[/autoit][autoit][/autoit][autoit]
['12:00:00','13:00:00'], _
['14:30:00','14:45:00'], _
['12:15:00','13:30:00']]$aCopy = $array
[/autoit]
For $i = 0 To UBound($array) -1
For $j = 0 To UBound($aCopy) -1
If $i = $j Then ContinueLoop
If $array[$i][0] > $aCopy[$j][0] And $array[$i][0] < $aCopy[$j][1] Then _
ConsoleWrite($array[$i][0] & '-' & $array[$i][1] & @CRLF & _
$aCopy[$j][0] & '-' & $aCopy[$j][1] & @CRLF)
Next
Next -
Was das Einbinden von Bildern etc. angeht, so bleibt sich das sicher mit Fileinstall letztendlich gleich.
Ein echter Vorteil (im Handling) ergibt sich beim Einbinden von Dll als Name.dll.au3. Diese kann man dan einfach per #include in das Skript einbinden, ohne sich um den Dateipfad zu kümmern. (s. SQLite-UDF)Edit: Ein deutlicher Unterschied zum FileInstall - Du darfst Variablen und Makros verwenden.
