Hallo Jautois,
wozu gibt es Arrays und Schleifen, darin kann du deine Quadrate erstellen. Und in der Func die dadurch aufgerufen wird, kannst du doch im OnEventModus das Makro @GUI_CtrlId verwenden, also wo ist das Problem?
mfg (Auto)Bert
Hallo Jautois,
wozu gibt es Arrays und Schleifen, darin kann du deine Quadrate erstellen. Und in der Func die dadurch aufgerufen wird, kannst du doch im OnEventModus das Makro @GUI_CtrlId verwenden, also wo ist das Problem?
mfg (Auto)Bert
Hallo Henry,
2 Beiträge innerhalb von 12 Stunden ohne dass ein anderer Post dazwischen war grenzt schon stark an pushen, dieses wird hier nicht so gerne gesehen denn man kein seinen eigenen Beitrag auch bearbeiten. (Dies als Hinweis)
Back to Topic: schau dir mal diesen Beitrag von @ BugFix an, darin zeigt er eine Lösung.
mfg (Auto)bert
Hallo Henry,
zu 1) hier kannst du _GuiCtrlListView_SetColumnWidth verwenden entweder mit einem fixen Wert oden dem Stil $LVSCW_AUTOSIZE
[autoit]_GUICtrlListView_SetColumnWidth($hListView, 0, $LVSCW_AUTOSIZE); erste Spalte automatische Breite
[/autoit]
zu 2) BugFix hat mal ein Beispiel gepostet bei dem man ListviewItems ändern kann, zum Speichern schau dir FileWriteLine an
zu 3) _GUICtrlListView_GetItemText und _GUICtrlListView_GetSelectedIndices verwenden z.B.
$Sound = _GUICtrlListView_GetItemText($hListView1, _GUICtrlListView_GetSelectedIndices($hListView1, False), 1)
[/autoit](aus Troin's Thread Post von Progandy)
zu 4) schau dir _GUICtrlListView_DeleteItem in der Hilfe an
zu 5) kA (zumindest nicht wie es ohne ChildGui funktioniert)
Arrays können einem die Tipp-Arbeit sehr erleichtern und reduzieren dadurch auch mögliche Tipp-Fehler, dass du die für eine ListView und nicht für eine ListBox entschieden hast ist gut, da die Listview mehr Möglichkeiten bietet,
mfg (Auti)Bert
Hallo genesis,
echtes MultiTasking ist meines Wissens nach in AutoIT unmöglich. Schildere mal den Einsatzzweck, vielleich lässt sich ein Workaround finden,
mfg (Auto)Bert
Hallo
in Zeile 51 hat sich (anscheinend durch Copy und Paste) ein Flüchtigkeitsfehler eingeschlichen, müsste so aussehen:
_GUICtrlListView_AddSubItem($hListView1, $iItem, $file[$i] & "\" & $file[$i], 1)
[/autoit]nimmt zwar in Liste auf wird aber nicht gespielt,
so muss die func _fileopen aussehen (Fehler war in 48 ![]()
Func _fileOpen()
Local $file = FileOpenDialog("Musikdatei auswählen", "C:", "Song files (*.mp3; *.wma; *.wav)", 2+4)
If @error Then Return
$file = StringSplit($file, "|")
Local $iItem
_arrayDisplay($file)
If $file[0] = 1 Then
If _GUICtrlListView_FindInText($hListView1, $file[1]) >= 0 Then Return
Local $fileName = StringRegExp($file[1], "[\\/]([^\\/]+)\Z",1)
$iItem = _GUICtrlListView_AddItem($hListView1, $fileName[0])
_GUICtrlListView_AddSubItem($hListView1, $iItem, $file[1], 1)
Else
For $i = 2 To $file[0]
If _GUICtrlListView_FindInText($hListView1, $file[$i]) >= 0 Then ContinueLoop
$iItem = _GUICtrlListView_AddItem($hListView1, $file[$i])
_GUICtrlListView_AddSubItem($hListView1, $iItem, $file[1] & "\" & $file[$i], 1)
Next
EndIf
;_GUICtrlListView_AddItem($Listbox1, $file)
;GUICtrlSetData($ListBox1,$file)
EndFunc ;==>_fileOpen
mfg (Auto)Bert
Hallo Troin,
am besten siehst du dir mal den Starplayer von Oscar im Forum Scripte an, er verwendet ListViews und lässt auch mehrfaches Einfügen durch über den FileOpendialog zu,
mfg (Auto)Bert
Hallo der Scripter,
dein Script lies sich nicht starten, ich habe es daher etwas angepasst damit ich es starten kann und auch die komplette Gui auf mein Display passt,
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <GDIPlus.au3>
#include <ScreenCapture.au3>
#include <ButtonConstants.au3>
#include<misc.au3>
Global $max_ammo = 5, $current_ammo = 5, $timerinit = 50, $timerinit2 = 50, $nullammo = "0", $null1 = 0, $null2 = 0, $null3 = 0, $null4 = 0, $null5 = 0
Global $ammo1, $ammo2, $ammo3, $ammo4, $ammo5
lvl_1()
Func lvl_1(); ==> lvl_1
$level = "1"
#Region ### START Koda GUI section ### Form=C:\Dokumente und Einstellungen\Sebastian\Desktop\autoit\spiel\lvl_1.kxf
$lvl_1 = GUICreate("Level_1", 838, 602, 0, 0, $WS_POPUP)
$Pic1 = GUICtrlCreatePic("background.jpg", 0, 0, 836, 508, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS))
GUICtrlSetCursor(-1, 3)
GUICtrlSetState(-1, $GUI_DISABLE)
$Pic2 = GUICtrlCreatePic("menu.jpg", 0, 508, 836, 92, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS))
GUICtrlSetState(-1, $GUI_DISABLE)
$btn = GUICtrlCreateIcon("exit.ico", -1, 745, 508, 92, 92) ; --> die letzte 0, damit kein Klick-Ereignis ausgelöst wird (Click-Through)
$Label1 = GUICtrlCreateLabel("Munition:", 16, 512, 90, 28)
GUICtrlSetFont(-1, 15, 800, 0, "MS Sans Serif")
GUICtrlSetBkColor(-1, 0x5e2d64)
$Label2 = GUICtrlCreateLabel("Leben:", 16, 536, 69, 28)
GUICtrlSetFont(-1, 15, 800, 0, "MS Sans Serif")
GUICtrlSetBkColor(-1, 0x5e2d64)
$Label3 = GUICtrlCreateLabel("Level: " & $level, 16, 568, 200, 28)
GUICtrlSetFont(-1, 15, 800, 0, "MS Sans Serif")
GUICtrlSetBkColor(-1, 0x5e2d64)
Global $leben1 = GUICtrlCreateIcon("leben.ico", -1, 144, 544, 25, 25, BitOR($SS_NOTIFY, $WS_GROUP))
Global $leben2 = GUICtrlCreateIcon("leben.ico", -1, 112, 544, 25, 25, BitOR($SS_NOTIFY, $WS_GROUP))
Global $leben3 = GUICtrlCreateIcon("leben.ico", -1, 176, 544, 25, 25, BitOR($SS_NOTIFY, $WS_GROUP))
Global $leben4 = GUICtrlCreateIcon("leben.ico", -1, 208, 544, 25, 25, BitOR($SS_NOTIFY, $WS_GROUP))
Global $leben5 = GUICtrlCreateIcon("leben.ico", -1, 240, 544, 25, 25, BitOR($SS_NOTIFY, $WS_GROUP))
Global $ammo1 = GUICtrlCreateIcon("munition.ico", -1, 112, 512, 25, 25, BitOR($SS_NOTIFY, $WS_GROUP))
Global $ammo2 = GUICtrlCreateIcon("munition.ico", -1, 144, 512, 25, 25, BitOR($SS_NOTIFY, $WS_GROUP))
Global $ammo3 = GUICtrlCreateIcon("munition.ico", -1, 176, 512, 25, 25, BitOR($SS_NOTIFY, $WS_GROUP))
Global $ammo4 = GUICtrlCreateIcon("munition.ico", -1, 208, 512, 25, 25, BitOR($SS_NOTIFY, $WS_GROUP))
Global $ammo5 = GUICtrlCreateIcon("munition.ico", -1, 240, 512, 25, 25, BitOR($SS_NOTIFY, $WS_GROUP))
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
_GuiRoundCorners($lvl_1, 0, 0, 50, 50)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $btn
; main_gui()
EndSwitch
check_ammo()
WEnd
EndFunc ;==>lvl_1
Func main_gui() ;==> Hauptfenster
Exit (1)
EndFunc ;==>main_gui
Func check_ammo()
If _IsPressed('01') Then
$timerdiff = TimerDiff($timerinit)
If $timerdiff >= 100 Then
If $current_ammo = 5 Then
GUICtrlDelete($ammo5)
$null5 = 1
EndIf
If $current_ammo = 4 Then
GUICtrlDelete($ammo4)
$nullammo4 = 1
EndIf
If $current_ammo = 3 Then
GUICtrlDelete($ammo3)
$nullammo3 = 1
EndIf
If $current_ammo = 2 Then
GUICtrlDelete($ammo2)
$nullammo2 = 1
EndIf
If $current_ammo = 1 Then
GUICtrlDelete($ammo1)
$nullammo1 = 1
EndIf
If $current_ammo = 0 Then
Global $nullammo = "1"
Global $Label4 = GUICtrlCreateLabel("!!!!Keine Munition!!!!", 280, 184, 297, 42)
GUICtrlSetFont(-1, 20, 800, 0, "Arial Black")
GUICtrlSetColor(-1, 0xFF0000)
GUICtrlSetBkColor(-1, 0xe2b75b)
;Hier sieht man dann nur den letze Hülse, die wird aber öffters erstellt, da man nach 5 mal drücken nicht verschwindet.
;eigentlich sollen hier wieder alle Hülsen so schön in der Reihe stehen, wie am Anfang. Und jedes nur 1mal.
Global $ammo1 = GUICtrlCreateIcon("munition.ico", -1, 112, 512, 25, 25, BitOR($SS_NOTIFY, $WS_GROUP))
Global $ammo2 = GUICtrlCreateIcon("munition.ico", -1, 144, 512, 25, 25, BitOR($SS_NOTIFY, $WS_GROUP))
Global $ammo3 = GUICtrlCreateIcon("munition.ico", -1, 176, 512, 25, 25, BitOR($SS_NOTIFY, $WS_GROUP))
Global $ammo4 = GUICtrlCreateIcon("munition.ico", -1, 208, 512, 25, 25, BitOR($SS_NOTIFY, $WS_GROUP))
Global $ammo5 = GUICtrlCreateIcon("munition.ico", -1, 240, 512, 25, 25, BitOR($SS_NOTIFY, $WS_GROUP))
EndIf
$current_ammo = $current_ammo - 1
EndIf
$timerinit = TimerInit()
EndIf
If _IsPressed('02') Then ; Hier brauch ich Hilfe: er erstellt die Icons nicht wieder her, theoretisch geht alles, aber die werden nicht mehr angezeigt.
$timerdiff2 = TimerDiff($timerinit2)
If $timerdiff2 >= 500 Then
If $nullammo = "1" Then
GUICtrlDelete($Label4)
$nullammo = "0"
EndIf
If $null5 = 1 Then
Global $ammo5 = GUICtrlCreateIcon("munition.ico", -1, 240, 512, 25, 25, BitOR($SS_NOTIFY, $WS_GROUP))
$current_ammo = 5
EndIf
If $null4 = 1 Then
Global $ammo4 = GUICtrlCreateIcon("munition.ico", -1, 208, 512, 25, 25, BitOR($SS_NOTIFY, $WS_GROUP))
$current_ammo = 4
EndIf
If $null3 = 1 Then
Global $ammo3 = GUICtrlCreateIcon("munition.ico", -1, 176, 512, 25, 25, BitOR($SS_NOTIFY, $WS_GROUP))
$current_ammo = 3
EndIf
If $null2 = 1 Then
Global $ammo2 = GUICtrlCreateIcon("munition.ico", -1, 144, 512, 25, 25, BitOR($SS_NOTIFY, $WS_GROUP))
$current_ammo = 2
EndIf
If $null1 = 1 Then
Global $ammo1 = GUICtrlCreateIcon("munition.ico", -1, 112, 512, 25, 25, BitOR($SS_NOTIFY, $WS_GROUP))
$current_ammo = 1
EndIf
EndIf
$timerinit2 = TimerInit()
EndIf
EndFunc ;==>check_ammo
;#######Zusatzfunktion####################
Func _GuiRoundCorners($h_win, $i_x1, $i_y1, $i_x3, $i_y3)
Dim $pos, $ret, $ret2
$pos = WinGetPos($h_win)
$ret = DllCall("gdi32.dll", "long", "CreateRoundRectRgn", "long", $i_x1, "long", $i_y1, "long", $pos[2], "long", $pos[3], "long", $i_x3, "long", $i_y3)
If $ret[0] Then
$ret2 = DllCall("user32.dll", "long", "SetWindowRgn", "hwnd", $h_win, "long", $ret[0], "int", 1)
If $ret2[0] Then
Return 1
Else
Return 0
EndIf
Else
Return 0
EndIf
EndFunc ;==>_GuiRoundCorners
Jetzt fehlen nur noch die Icons und man kann testen. Ich vertehe aber nicht warum die Icons löscht um sie dann später wieder zu erstellen, nutze doch einfach die Funktion GuiCtrlSetState() mit $GuiHide bzw. $GuiShow
mfg (Auto)Bert
Hallo bernd670 ,
falls es wirklich ums Fliesen legen geht, dann hat 10ur wahrscheinlich die Theorie falsch erkärt, denn nach meinem Wissen ist auch an jedem Rand eine Fuge, aber das kann er ja beim korrigieren der Formel berücksichtigenist ja relativ einfach
mfg (Auto)Bert
Hallo chip,
schau dir mal die Stile und auch die erweiterten Stile für TV an, Ich lege meine TVs immer so an und das + Zeichen zum erweitern ist sofort da:
[autoit]$htreevwMain = GUICtrlCreateTreeView(452,120, 345, 345, BitOR($GUI_SS_DEFAULT_TREEVIEW,$TVS_CHECKBOXES),$WS_EX_CLIENTEDGE)
[/autoit]mfg (Auto)Bert
Hallo Lenny,
ja da warst du deutlich schneller, nehme an war duch etwas anderes abgelenkt (Telefon etc.) und habe erst verspätet meinen Post abgesandt. Ist aber schön wenn 2 das gleiche finden,
mfg (Auto)Bert
Hallo bleey,
lies mal die Forenregeln und danach die Hilfe (hier downloaden) vom Anfang bis mind. einschliesslich GUI-Referenz,
mfg (Auto)Bert
Hallo scripter,
hier:
mfg (Auto)Bert
Hallo Lenny,
schau mal auf diese Seite: http://www.jasik.de/shutdown/stop_fehler.htm#50
mfg (Auto)Bert
Hallo Progandy,
ich habe die 2 Zeilen mit ProgressMarquee aukommentiert und neu getestet und es sind damit ziemlich genau 5% weniger CPU-Auslastung,
mfg (Auto)Bert
Hallo h4x89,
du solltest schon dein Skript mit einstellen, damit man sehen kann wo evtl. Zeit vergeudet wird. Ich tippe aber darauf, dass du die Funktion WinWaitActive benutzt, und dass das aufgerufene Setup die Zeiten benötigt.
mfg (Auto)Bert
Hallo chip,
besorge dir doch ein Tool mit dem du Icons in einer Library speichern kannst z.B. hier,
mfg (Auto)Bert
Hallo sc4ry,
Ich habe das ganze mit deinen Werten überprüft dabei steigt die CPU-Belastung bei mir von 5% auf25%, mit sleep sogar auf 28%,
ICH kannte die UDF GDIProgress von @progandy bisher nicht, habe selber auch noch nie was mit GDI+ gemacht wundere mich jetzt allerdings genauso wie du warum nach dem Erstellen der Gui die Auslastung nicht wieder zurückgeht. Ich hatte eigentlich nur einen kurzen Peek erwartet aber nicht eine konstante Dauerauslastung.
Das für den Test umgebaute Skript:
#include "gdiprogress.au3"
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
Opt('GUIOnEventMode', 1)
Global $Form1_1 = GUICreate("Testaufruf für EditBox", 400, 280, 140, 150, BitOR($WS_MINIMIZEBOX, $WS_MAXIMIZEBOX, $WS_SIZEBOX))
GUISetOnEvent($GUI_EVENT_CLOSE, '_End')
GUICtrlCreateButton('GDIProgress &ohne Sleep', 220, 10, 150, 25)
GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKRIGHT + $GUI_DOCKTOP)
GUICtrlSetOnEvent(-1, 'ShowDiscSpaceO')
GUICtrlCreateButton('GDIProgress &mit Sleep', 220, 50, 150, 25)
GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKRIGHT + $GUI_DOCKTOP)
GUICtrlSetOnEvent(-1, 'ShowDiscSpaceM')
GUISetState()
While 1
Sleep(120)
WEnd
Func _End()
GUIDelete($Form1_1)
Exit
EndFunc ;==>_End
Func ShowDiscSpaceO()
ShowDiscSpace(False)
EndFunc
Func ShowDiscSpaceM()
ShowDiscSpace(True)
EndFunc
Func ShowDiscSpace($withSleep)
Opt("GUIOnEventMode", 0)
$iniReadSec = IniReadSection("Settings.ini","ALL DISCS")
If Not @error Then
$height = 10
$SpaceFree = 0
$SpaceTotal = 0
For $k = 1 To $iniReadSec[0][0] + 1
$height += 30
Next
$GuiSpace = GUICreate("Disc Space All", 500, $height + 20, -1, -1, Default, Default, $Form1_1)
$y = 10
Dim $PMarquee[$iniReadSec[0][0] + 1]
For $k = 1 To $iniReadSec[0][0]
$Split = StringSplit($iniReadSec[$k][1], "|")
$PMarquee[$k] = _ProgressCreate(10, $y, 480, 25, 0xAAAA00, 0xFF0000, 0xFFFF00, 0x00FF00)
_ProgressMarquee($PMarquee[$k], 2, 0)
_ProgressSet($PMarquee[$k], ($Split[1] - $Split[2]) * 100 / $Split[1])
_ProgressSetText($PMarquee[$k], $iniReadSec[$k][0] & @TAB & " Total: " & $Split[1] & " GB / Used: " & $Split[1] - $Split[2] & " GB (" & Round(($Split[1] - $Split[2]) * 100 / $Split[1], 2) & "%) / Free: " & $Split[2] & " GB (" & Round($Split[2] * 100 / $Split[1], 2) & "%)")
_ProgressSetFont($PMarquee[$k], "", 8, Default, 0xFFFFFF)
$SpaceTotal += $Split[1]
$SpaceFree += $Split[2]
$y += 30
Next
$PMarqueeTotal = _ProgressCreate(10, $y + 20, 480, 25, 0xAAAA00, 0xFF0000, 0xFFFF00, 0x00FF00)
_ProgressMarquee($PMarqueeTotal, 2, 0)
_ProgressSet($PMarqueeTotal, ($SpaceTotal - $SpaceFree) * 100 / $SpaceTotal)
_ProgressSetText($PMarqueeTotal, "All Devices" & @TAB & " Total: " & Round($SpaceTotal / 1024, 2) & " TB / Used: " & Round(($SpaceTotal - $SpaceFree) / 1024, 2) & " TB (" & Round(($SpaceTotal - $SpaceFree) * 100 / $SpaceTotal, 2) & "%) / Free: " & Round($SpaceFree / 1024, 2) & " TB (" & Round($SpaceFree * 100 / $SpaceTotal, 2) & "%)")
_ProgressSetFont($PMarqueeTotal, "", 8, Default, 0xFFFFFF)
GUISetState(@SW_SHOW, $GuiSpace)
While 1
$msg = GUIGetMsg()
if $withSleep then Sleep(10)
If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WEnd
For $k = 1 To $iniReadSec[0][0]
_ProgressDelete($PMarquee[$k])
Next
_ProgressDelete($PMarqueeTotal)
GUIDelete($GuiSpace)
EndIf
Opt("GUIOnEventMode", 1)
EndFunc
mfg (Auto)Bert
Hallo sc4ry,
stell mal deine INI mit ein und schreibe wle Zeile 3
Und wo ist die Zeile 3, vor allem kann ich nicht erkennen, was diese INI-Zeilen mit der Anzeige des freien Plattenplatzes zu tun haben soll. Ich hoffe es ist nicht alzudringend, denn ich hab jetzt erst einmal einen Termin ausser Haus, schätze aber das ich gegen Abend dazu komme es mir anzuschauen,
mfg (Auto)Bert
Hallo sc4ry,
stell mal deine INI mit ein und schreibe wle Zeile 3 ausschauen muss, damit die richtige Section gelesen wird, dann teste ich es mit deinen Werten. Kann es sein, dass du diesen Prozess (aus welchen Gründen auch immer) in einer Schleife ausführst, dann wäre es nämlich geschickter $GuiSpace nicht jedesmal zu erzeugen und wieder zu löschen sondern nur beim erstenmal erzeugen immer wieder die Daten refreshen und danch zu löschen,
mfg (Auto)Bert
Hallo
bin auch der Meinung, dass eine schlanke Registry den Rechner schneller starten läßt. Aber leider ist es auch unter den renommierten Softwarehäusern heute nicht mehr selbstverständlich, die eigenen Einträge bei der Deinstallation zu löschen, daher läuft bei mir auch 1 mal wöchentlich ein Registrycleaner. Der Witz dabei ist, es werden im Normalfall immer die gleichen 27 Einträge gelöscht, MS ist anscheinend der Meinung dass bestimmte Schlüssel benötigt werden und legt diese beim nächsten Neustart wieder an.
Alina von wem ist den deine Hardwarelösung, die ja wohl den optimalen Schutz bietet zu dem Preis, dass man bei Neuinstallation einer Software etwas mehr Arbeit hat (Wächter ausschalten, Installieren, Wächter einschalten) auch kann es dabei zu lustigen Ergebnissen kommen, z.B. bei Füllstandsmeldungen für Druckerpatronen