Beiträge von DerSchatten
-
-
Gibt es eine Möglichkeit ein Eingabefeld (Edit, Input,...) inaktiv zu machen? So das man nicht hineinklicken kann.
Mit "disable" ginge das zwar, dann wird der Text darin allerdings ausgegraut dargestellt. Was nicht so schön ist.
-
Hab mir das mal angesehen.
Eine Möglichkeit Dateien ohne zwischensoeichern direkt aus der exe auszulesen gibt es wohl nicht?
-
Also einfacher, wie gebe ich alle selektierten Einträge aus einem Listenfeld zb in eine msg-Box aus?
-
Was fehlt denn?
Die komplette Funktion habe ich ja gepostet.
Ich will den Beitrag hier nicht mit dem kompletten Script zumüllen.
-
Dann helft mir doch bitte mal wie es richtig heißen muß.
Fakt ist das ich mein Command mit dem gekürzten String starten muß.
-
Muß ich jetzt zuerst den Text mit GetItemTextString auslesen oder zuerst _GUICtrlListView_GetSelectedIndices verwenden?
Damit hakt es nämlich trotzdem noch wo:
[autoit]
[/autoit]
Func _DeleteFile()
Local $d64dateiauswahl = _GUICtrlListView_GetSelectedIndices(StringLower($list_dir), True)
Local $rechterString = StringInStr($d64dateiauswahl, '"', 0, -1)
Local $linkerString = StringMid($d64dateiauswahl, 7, $rechterString - 6)
If $d64dateiauswahl[0] = 0 Then Return MsgBox(16, "Hinweis", "Es wurden keine Dateien zum löschen ausgewählt.")
For $i = 1 To $d64dateiauswahl[0]
RunWait(@ComSpec & " /c c1541.exe " & '"' & $dateipfad & '" -delete ' & _GUICtrlListView_GetItemTextString($list_dir, $d64dateiauswahl[$i]), "", @SW_HIDE)
Next
_ImageOpen()
EndFuncEr läuft mir immer in die msgbox-Ausgabe hinein, so als wäre nichts ausgewählt.
Abgesehen davon wie bekomme ich das mit meinen zugeschnittenen Strings dann hin?
-
Wie löse ich dieses problem.
Ich möchte alle selektierten Dateien in einer Listenfeld mittels einem bestimmten Command löschen.
Die ausgewählten Einträge müssen jedoch zuvor noch beschnitten werden.
Momentan sieht es so aus:
[autoit]
[/autoit]
Func _DeleteFile()
Local $d64dateiauswahl = StringLower(_GUICtrlListView_GetSelectedIndices($list_dir, True))
Local $rechterString = StringInStr($d64dateiauswahl, '"', 0, -1)
Local $linkerString = StringMid($d64dateiauswahl, 7, $rechterString - 6)
If $linkerString[0] = 0 Then Return MsgBox(16, "Hinweis", "Es wurden keine Dateien zum löschen ausgewählt.")
For $i = 1 To $linkerString[0]
RunWait(@ComSpec & " /c c1541.exe " & '"' & $dateipfad & '" -delete ' & $linkerString[$i], "", @SW_HIDE)
Next
_ImageOpen()
EndFuncDas funktioniert aber nicht, da "linkerString" kein Array ist.
So hab ichs auch schon versucht:
[autoit]
[/autoit]
Func _DeleteFile()
Local $d64dateiauswahl = StringLower($list_dir)
Local $rechterString = StringInStr($d64dateiauswahl, '"', 0, -1)
Local $linkerString = _GUICtrlListView_GetSelectedIndices(StringMid($d64dateiauswahl, 7, $rechterString - 6), True)
If $linkerString[0] = 0 Then Return MsgBox(16, "Hinweis", "Es wurden keine Dateien zum löschen ausgewählt.")
For $i = 1 To $linkerString[0]
RunWait(@ComSpec & " /c c1541.exe " & '"' & $dateipfad & '" -delete ' & $linkerString[$i], "", @SW_HIDE)
Next
_ImageOpen()
EndFunc"$list_dir" ist mein Listenfeld.
-
Das Beispiel von name22 bringt mir leider überhaupt kein Ergebnis. Wenn ich es richtig verstanden habe müßte es bei mir dann so aussehen:
[autoit]StringRegExp($dir, @LF, 3)
[/autoit]Leider kann ich die anderen beiden Beispiele nicht anwenden, weil meine Daten in einem String liegen und in keinem Array.
Was mir jedoch seltsam vorkommt ist, das folgendes einfaches Beispiel ebenfalls nicht funktioniert:
[autoit]
[/autoit]
$dir = "Das ist ein übler % test der mit 21% gemacht wird"
$result = StringRight($dir, StringInStr($dir, "%", 0, -1))
MsgBox(0, "Ergebnis:", $result)Eigentlich sollte das Ergebnis doch so lauten:
"% gemacht wird"
Stattdessen kommt sowas dabei raus:
"bler % test der mit 21% gemacht wird"
Ist da ein Bug drinn?
-
Wie die Überschrift sagt möchte ich gerne die letzte Zeile eines Strings in einem Eingabefeld anzeigen.
Jetzt habe ich schon einige Möglichkeiten versucht und mich auch mit StringRight, StringInStr, etc. herumgespielt.
Leider bekomme ich kein brauchbares Ergebnis. Der Inhalt des Strings sieht so aus:
Code
Alles anzeigen0 "-knight'n'grail-" 2009 16 "title" prg 0 "-.-..-....-..-.-" del 75 "kng" prg 1 "kngss" prg 49 "go" prg 51 "gp" prg 8 "s1" prg 6 "s2" prg 7 "s3" prg 17 "w1" prg 8 "w1c" prg 15 "w1spr" prg 12 "w2" prg 7 "w2c" prg 12 "w2spr" prg 13 "w3" prg 7 "w3c" prg 15 "w3spr" prg 11 "w4" prg 8 "w4c" prg 9 "w4spr" prg 6 "w5" prg 7 "w5c" prg 8 "w5spr" prg 13 "w6" prg 6 "w6c" prg 19 "w6spr" prg 2 "w7" prg 3 "w7c" prg 1 "w7spr" prg 7 "w8" prg 4 "w8c" prg 13 "w8spr" prg 0 "-.-..-....-..-.-" del 0 "game produced by" del 0 "wide pixel games" del 0 "-.-..-....-..-.-" del 0 " published by " del 0 " psytronik soft " del 0 "-.-..-....-..-.-" del 228 blocks free.Das "228 blocks free." hätte ich dann gerne herausgefiltert. Am Ende jeder Zeile wird noch ein <LF> mitgeschickt.
Das Problem ist das die unterste Zeile nicht immer gleich lang ist, da die Zahl 1, 2 oder 3-stellig sein kann.Folgendes habe ich schon versucht:
[autoit]
[/autoit]
$dir_free = StringUpper(StringRight($dir, StringInStr($dir, @LF, 0, 1)))Das Ergebnis sieht dann aber so aus:
Obwohl nach dem "DEL" eindeutig ein <LF> kommt, wird dieses einfach ignoriert. Stattdessen fängt er irgendwo in der vorletzten Zeile an zu zählen.
Warum?
-
Bei der ersten Mothode werden weiterhin doppelte Einträge nicht angezeigt.
und bei der zweiten sind alle Einträge mehrfach vorhanden.
Wenn ich die Beispiel dennoch auf mein programm anwende, zeigt mir das erste Beispiel überhaupt nichts an. Die List blitzt zwar kurz auf, das Listenfeld ist dann aber leer.
[autoit]
[/autoit]
Func _ImageOpen()
Local $dateiauswahl, $ordnername = GUICtrlRead($input_ordnername)
If StringRight($ordnername, 1) <> "\" Then GUICtrlSetData($input_ordnername, $ordnername & "\")
If $ordnername = "" Then Return MsgBox(48, "Fehler", "Es wurde kein Verzeichnispfad ausgewählt!", 0, $gui_main)
$dateiauswahl = _GUICtrlListView_GetSelectedIndices($listview_dateiliste, True)
If $dateiauswahl[0] = 0 Then Return MsgBox(48, "Fehler", "Es wurde keine Datei ausgewählt!", 0, $gui_main)
_Feldvariablen()
GUICtrlSetData($edit_vorgang, "Disketten-Image auslesen ...")
For $i = 1 To $dateiauswahl[0]
If StringRight(_GUICtrlListView_GetItemTextString($listview_dateiliste, $dateiauswahl[$i]), 3) = "nbz" Then
$temp_nbz = @TempDir & "\temp.d64"
$dir_conv = _getDOSOutput("nibconv.exe " & '"' & $ordnername & _GUICtrlListView_GetItemTextString($listview_dateiliste, $dateiauswahl[$i]) & '" ' & '"' & $temp_nbz & '"')
$dir = _getDOSOutput("c1541.exe " & $temp_nbz & " -list")
FileDelete ($temp_nbz)
Else
$dir = _getDOSOutput("c1541.exe " & '"' & $ordnername & _GUICtrlListView_GetItemTextString($listview_dateiliste, $dateiauswahl[$i]) & '"' & " -list")
Endif
$dir_name = StringUpper(StringMid($dir, 4, 16))
$dir_id = StringUpper(StringMid($dir, 21, 6))
$dir_kurz = StringSplit(StringUpper(StringTrimLeft($dir, 27)), @LF, 1)
;_ArrayDisplay($dir_kurz)
GUICtrlSetData($edit_name, $dir_name)
GUICtrlSetData($edit_id, $dir_id)
For $I = 1 To 3
For $J = 1 To $dir_kurz[0]
GUICtrlSetData($list_dir, $dir_kurz[$J])
Next
Next
Next
GUICtrlSetData($edit_vorgang, "")
EndFunc -
leider funktionieren beide Methoden nicht.
Ich hänge mal eine Datei an, die ich gerne in ein Listenfeld ausgeben möchte.
-
Was bedeutet das?
Das ich in Listenfenster keine wiederholenden Einträge anzeigen lassen kann?
Wie lös ich das problem? Dubioser Weise werden ja auch wiederholende zeilen angezeigt, aber nur maximal 2 mal.
-
Niemand eine Idee was da falsch sein könnte?
-
Super danke!
Jetzt suche ich noch eine Möglichkeit die .ico in mein Programm einzubinden. Aber wenn möglich nicht über die "FileInstall"-variante sondern fix integriert.
Und gibt es eine Möglichkeit Einzustellen das die Schaltflächen dann nicht Zweidimensional werden?
-
Ich habe leider dazu nichts brauchbares gefunden, aber man kann doch sicher .ico Dateien in eine Schaltfläche einbinden?
-
Genauso funktioniert es!Perfekt! danke dir!Zu früh gefreut.
Seltsamer Effekt der sich nur darstellt:
Eine Ausgabe die "------" oder "=====" Zeichen enthält wird nicht korrekt dargestellt. (siehe Anhang)
Zum Vergleich In der Mitte das Listenfeld und rechts das Editfeld.
So wie es aussieht werden Idente Zeilen einfach übersprungen.Die Funktion dazu sieht so aus:
[autoit]
[/autoit]
Func _ImageOpen()
Local $dateiauswahl, $ordnername = GUICtrlRead($input_ordnername)
If StringRight($ordnername, 1) <> "\" Then GUICtrlSetData($input_ordnername, $ordnername & "\")
If $ordnername = "" Then Return MsgBox(48, "Fehler", "Es wurde kein Verzeichnispfad ausgewählt!", 0, $gui_main)
$dateiauswahl = _GUICtrlListView_GetSelectedIndices($listview_dateiliste, True)
If $dateiauswahl[0] = 0 Then Return MsgBox(48, "Fehler", "Es wurde keine Datei ausgewählt!", 0, $gui_main)
_Feldvariablen()
GUICtrlSetData($edit_vorgang, "Disketten-Image auslesen ...")
For $i = 1 To $dateiauswahl[0]
If StringRight(_GUICtrlListView_GetItemTextString($listview_dateiliste, $dateiauswahl[$i]), 3) = "nbz" Then
$temp_nbz = @TempDir & "\temp.d64"
$dir_conv = _getDOSOutput("nibconv.exe " & '"' & $ordnername & _GUICtrlListView_GetItemTextString($listview_dateiliste, $dateiauswahl[$i]) & '" ' & '"' & $temp_nbz & '"')
$dir = _getDOSOutput("c1541.exe " & $temp_nbz & " -list")
$dir_name = StringUpper(StringMid($dir, 4, 16))
$dir_id = StringUpper(StringMid($dir, 21, 6))
Local $dir_kurz = StringAddCR(StringUpper(StringTrimLeft(StringLeft($dir, StringInStr($dir, "free.") + 4), 27)))
FileDelete ($temp_nbz)
_ArrayDisplay($dir_kurz)
GUICtrlSetData($edit_name, $dir_name)
GUICtrlSetData($edit_id, $dir_id)
GUICtrlSetData($edit_dir, $dir_kurz)
Else
$dir = _getDOSOutput("c1541.exe " & '"' & $ordnername & _GUICtrlListView_GetItemTextString($listview_dateiliste, $dateiauswahl[$i]) & '"' & " -list")
$dir_name = StringUpper(StringMid($dir, 4, 16))
$dir_id = StringUpper(StringMid($dir, 21, 6))
Local $dir_kurz = StringAddCR(StringUpper(StringTrimLeft(StringLeft($dir, StringInStr($dir, "free.") + 4), 27)))
$dir_kurz2 = StringSplit($dir_kurz, @CRLF, 1)
_ArrayDisplay($dir_kurz)
GUICtrlSetData($edit_name, $dir_name)
GUICtrlSetData($edit_id, $dir_id)
GUICtrlSetData($edit_dir, $dir_kurz)
Endif
For $l = 1 To UBound($dir_kurz2) - 1
GUICtrlSetData ($list_dir, $dir_kurz2[$l])
Next
Next
GUICtrlSetData($edit_vorgang, "")
EndFunc -
Kennt vielleicht jemand das Problem?
Wenn ich Texte in eine Editbox einfüge die CR zeichen haben, so werden diese nicht erkannt.
Der text wird dann in einer Zeile dargestellt.Ich habe mal ein paar Screenshots gemacht, damit man sich etwas darunter vorstellen kann.
Im SciTE kann man die Umbrüche ja schön anzeigen lassen.
Wie man sehen kann werden CRLF korrekt dargestellt, im gegensatz zu nur CR.Was ich schon versucht habe ist:
[autoit]
[/autoit]
$edit_statuscopy= GUICtrlCreateEdit("", 20, 20, 600, 400, BitOR($ES_READONLY, $WS_VSCROLL, $ES_MULTILINE, $ES_WANTRETURN))Im quasi zu zwingen Umbrüche zu machen. Das ist ihm aber so ziemlich egal.
Oder macht das die EditBox schon so richtig?
Falls ja, wie kann ich das so drehen das die CR als Zeilensprung interpretiert werden? SciTE macht das ja anscheinend auch so.
-
Ich verwende die Funktion _FileListToArrayEx um in einem ListView Ordnerinhalte anzuzeigen
[autoit]
[/autoit][autoit][/autoit][autoit]
Func _FileListToArrayEx($sPath, $sFilter = '*.*', $iFlag = 0, $sExclude = '')
If Not FileExists($sPath) Then Return SetError(1, 1, '')
If $sFilter = -1 Or $sFilter = Default Then $sFilter = '*.*'
If $iFlag = -1 Or $iFlag = Default Then $iFlag = 0
If $sExclude = -1 Or $sExclude = Default Then $sExclude = ''
Local $aBadChar[6] = ['\', '/', ':', '>', '<', '|']
For $iCC = 0 To 5
If StringInStr($sFilter, $aBadChar[$iCC]) Or _
StringInStr($sExclude, $aBadChar[$iCC]) Then Return SetError(2, 2, '')
Next
If StringStripWS($sFilter,
= '' Then Return SetError(2, 2, '')
If Not ($iFlag = 0 Or $iFlag = 1 Or $iFlag = 2) Then Return SetError(3, 3, '')
Local $oFSO = ObjCreate("Scripting.FileSystemObject"), $sTFolder
$sTFolder = $oFSO.GetSpecialFolder(2)
Local $hOutFile = @TempDir & $oFSO.GetTempName
If Not StringInStr($sFilter, ';') Then $sFilter &= ';'
Local $aSplit = StringSplit(StringStripWS($sFilter, 8), ';'), $sRead
For $iCC = 1 To $aSplit[0]
If StringStripWS($aSplit[$iCC],
= '' Then ContinueLoop
If StringLeft($aSplit[$iCC], 1) = '.' And _
UBound(StringSplit($aSplit[$iCC], '.')) - 2 = 1 Then $aSplit[$iCC] = '*' & $aSplit[$iCC]
RunWait(@ComSpec & ' /c ' & 'dir "' & $sPath & '\' & $aSplit[$iCC] _
& '" /b /o-e /od > "' & $hOutFile & '"', '', @SW_HIDE)
$sRead &= OemToChar(FileRead($hOutFile))
If Not FileExists($hOutFile) Then Return SetError(4, 4, '')
FileDelete($hOutFile)
Next
If StringStripWS($sRead,
= '' Then SetError(4, 4, '')
Local $aFSplit = StringSplit(StringTrimRight(StringStripCR($sRead), 1), @LF)
Local $sHold
For $iCC = 1 To $aFSplit[0]
If $sExclude And StringLeft($aFSplit[$iCC], _
StringLen(StringReplace($sExclude, '*', ''))) = StringReplace($sExclude, '*', '') Then ContinueLoop
Switch $iFlag
Case 0
$sHold &= $aFSplit[$iCC] & Chr(1)
Case 1
If StringInStr(FileGetAttrib($sPath & '\' & $aFSplit[$iCC]), 'd') Then ContinueLoop
$sHold &= $aFSplit[$iCC] & Chr(1)
Case 2
If Not StringInStr(FileGetAttrib($sPath & '\' & $aFSplit[$iCC]), 'd') Then ContinueLoop
$sHold &= $aFSplit[$iCC] & Chr(1)
EndSwitch
Next
If StringTrimRight($sHold, 1) Then Return StringSplit(StringTrimRight($sHold, 1), Chr(1))
Return SetError(4, 4, '')
EndFunc
Func OemToChar ($szSrc)
Local $strSrc = DllStructCreate("char[" & StringLen($szSrc) + 1 & "]")
Local $strDst = DllStructCreate("char[" & StringLen($szSrc) * 2 + 1 & "]")
DllStructSetData($strSrc,1,$szSrc)
DllStructSetData($strDst,1,0)
Local $lRetVal = DllCall("user32.dll", "long", "OemToChar", "ptr", DllStructGetPtr($strSrc), "ptr", DllStructGetPtr($strDst))
If IsArray($lRetVal) And $lRetVal[0] = 1 Then
Return SetError(0,0,DllStructGetData($strDst,1))
EndIf
Return SetError(1,0,"")
EndFunc
Func _WindowProc($hWnd, $Msg, $wParam, $lParam)
Switch $hWnd
Case $hinput_ordnername
Switch $Msg
Case $WM_GETDLGCODE
Switch $wParam
Case $VK_RETURN
_DirOpen()
Return 0
EndSwitch
EndSwitch
EndSwitch
Return _WinAPI_CallWindowProc($wProcOld, $hWnd, $Msg, $wParam, $lParam)
EndFuncFunc _DirOpen()
[/autoit]
Local $aFilelist, $ordnername = GUICtrlRead($input_ordnername)
If StringRight($ordnername, 1) <> "\" Then GUICtrlSetData($input_ordnername, $ordnername & "\")
If GUICtrlRead($combo_dateityp) = "IMAGE Dateien" Then
$aFilelist = _FileListToArrayEx($ordnername, "*.d*;*.g*;*.n*", 1)
Else
$aFilelist = _FileListToArray($ordnername, "*." & StringLeft(GUICtrlRead($combo_dateityp), 3), 1)
EndIf
If @error Then Return _GUICtrlListView_DeleteAllItems($listview_dateiliste)
_GUICtrlListView_DeleteAllItems($listview_dateiliste)
For $i = 1 To $aFilelist[0]
GUICtrlCreateListViewItem($aFilelist[$i], $listview_dateiliste)
Next
_GUICtrlListView_SetColumnWidth(GUICtrlGetHandle($listview_dateiliste), 0, $LVSCW_AUTOSIZE)
EndFuncNur passt die Sortierung nicht.
Die Daten werden irgendwie durcheinander angezeigt.
Lassen sich auch nicht mit _GUICtrlListView_SimpleSort($listview_dateiliste, True, 1) richtig anzeigen.
-
Hi,
das blockiert/sperrt aber das Progress Fenster und hält es im Vordergrund fest. Etwas unpraktisch.