Welchen Sinn soll das Einbetten haben? Stehe da voll auf der Leitung.
Wenn der Anwender eine Datei wählen soll, erscheint die Datei/der Dateipfad nach der Auswahl in einem Input. Wozu willst du Platz verschwenden und ein Tree/Listview zur Auswahl ständig anzeigen, wenn nur einmalig darauf zugegriffen wird?
Beiträge von BugFix
-
-
Ist doch als native Funktion in AutoIt enthalten:
[autoit]FileOpenDialog() ; == Datei-Öffnen
[/autoit]
FileSelectFolder() ; == Ordner wählen -
Guckst du auf JEDEC.org

Manchmal sind die einfachsten Ideen auch die besten
(übrigens bei mir der erste Treffer in der Suche..
) -
Meiner Meinung nach ein bisschen überflüssig noch mehr HotKeys anzulegen,
stattdessen kann man auch einfach Alt + 3x Rechts + Runter + Enter drücken und schon hat man das gleiche, dann erreicht man auch Toggle All Folds.
Sorry, aber dieser Beitrag ist ziemlich unproduktiv. Natürlich kann man sich mit dem Alt-Menü durchhangeln. Aber bei der Tastenfolge ist das alles andere als übersichtlich. Insofern ist das Anlegen eines Hotkeys durchaus sinnvoll. Denn eh ich mich so kompliziert durchhangele, kann ich dann auch die Maus nehmen, das geht dann deutlich schneller (Str+Shift+Klick-auf-Falzmarke). -
Ich sag doch: Wenn du es nicht weist - nimm die 36!
Die Tools, die mit SciTE installiert werden, belegen normalerweise die Nummern bis inklusive 34. (Diese findest du in der "au3.properties") -
AnMa: Ist bei dir denn die Nr. 23 frei?
Nimm mal lieber die 36, wenn du das nicht sicher weißt. -
Grundsätzlich gilt:
• SciTEUser.properties öffnen
• freie command-Nr raussuchen (bei aktueller SciTE-Version steht dann dort z.B. "command.name.33.$(au3)="
• wenn du selbst noch keine Einträge erstellt hast kannst du auf jeden Fall die Nummern 36 bis 49 verwendenSo ist der Aufbau der Einträge:
Codecommand.name.35.*.au3=OrganizeIncludes <== Name, erscheint unter Extras command.35.*.au3="$(autoit3dir)\autoit3.exe" "$(SciteDefaultHome)\OrganizeIncludes\OI_1.0.0.50.au3" <== Befehl der ausgeführt wird command.save.before.35.*.au3=1 <== Speichern vor Ausführen, nur wenn erforderlich command.shortcut.35.*.au3=Ctrl+Shift+Alt+I <== der HotkeyDer verwendete Befehl kann sein:
• Aufruf einer EXE (mit/ohne Parameter), somit auch AU3-Skripte als Param der autoit3.exe
• Aufruf von Lua-Skripten ( dofile )
• Ausfüren von Lua-Code direkt ( dostring )Bezüglich "Toggle All Folds": Ich werde das Bsp. in eine Funktion integrieren, die differenzierte Regionen (#Region, Function, Comment-Block, etc.) oder alle Foldings betrifft. Hab noch etwas Geduld.

-
Mit diesem kleinen Tool lassen sich per Hotkey alle Regionen im Skript aus-/einklappen. Die anderen Faltungen in Funktionen etc. sind davon nicht betroffen.
Einfach in eurer SciTEUser.properties bei einer freien Nummer eintragen:
Code# 23 Un/Fold #Region command.name.23.$(au3)=Toggle Fold #Region command.23.*.au3=dostring local text = editor:GetText() tReg = {} pos, iEnd = text:find('#[Rr][Ee][Gg][Ii][Oo][Nn]') \ if pos ~= nil then table.insert(tReg, pos) while true do \ pos, iEnd = text:find('#[Rr][Ee][Gg][Ii][Oo][Nn]', iEnd) \ if pos == nil then break end table.insert(tReg, pos) end \ for i=1, #tReg do editor:GotoPos(tReg[i]) editor.CurrentPos = tReg[i] \ scite.MenuCommand(IDM_EXPAND) end end command.mode.23.*=subsystem:lua command.shortcut.23.*.au3=Ctrl+Alt+R -
Also wenn ich mich recht erinnere, müssen die Enumerationen, wenn sie in Strukturen enthalten sind, als Array eingebunden werden. Nur weiß ich nicht, welcher Datentyp vorgesehen ist. Eigentlich sollte "byte[Anzahl_Enumeration]" funktionieren.
-
Dann zeig mal das AutoIt-Pendant dazu. Ich habe bisher immer Stress gehabt, wenn Enumerationen in der Struktur enthalten sind, weil AutoIt Enumeration als Datentyp nicht kennt. Ich vermute mal, dass auch in diesem Fall dort der Fehler entsteht.
-
Bist du denn auch sicher, dass der Pointer auf einen passenden Inhalt ( WCHAR[260] ) verweist? Ich vermute mal, dass die Datenstruktur nicht passt.
-
Probier doch mal so:
[autoit]$ptr = DllStructGetData($PackageInfo_struct, "InstallClient")
[/autoit]
If Not IsPtr($ptr) Then Exit MsgBox(0, 'FEHLER', '"InstallClient" ist kein Pointer')
$struct = DllStructCreate("WCHAR[260]", $ptr)
ConsoleWrite( DllStructGetData($struct, 1)) & @LF) -
In diesem Post findest du eine Funktionsliste.
-
Xenon: Bibliotheken kann man nicht wie Ordner behandeln, da sie nur Verknüpfungen darstellen. Noch dazu sind die angezeigten Namen nicht real, intern werden andere verwendet.
Ich habe das noch nie automatisiert, da auf Hard- und Softlinks aufgepasst werden muss. Zu schnell zerschießt man dabei die Struktur. -
Auch mit diesem Skript ist alles linksbündig.
PS: Bitte benenne die GroupEx[0.7].au3 um zur GroupEx.au3. "[0.7]" ist nur die Programmversion, die ich beim Veröffentlichen im Dateinamen mit angebe.
EDIT: "...Eben diese Box ist dann rechtsbündig zu dem Menupunkt."
DAS kannst du nicht beeinflussen. Das hat auch nichts mit der Ausrichtung von Menü oder Menü-Item zu tun.
Wenn du das anders möchtest, musst du dir ein eigenes Fenster basteln mit Menüpunkten, das du dann an gewünschter Position einbindest. -
-
Also falls dein Highscore nicht unendlich viele Werte aufnehmen soll, sondern z.B. etwa 100, ist eine INI immer noch einfacher zu händeln (und auch nicht weniger performant) als eine Datenbank.
Hier mal ein Bsp.wie ich sowas im Allgemeinen verwende. Ein Limit ist hier nicht gesetzt, kann aber problemlos als erste Abfrage in der AddHighScore-Funktion integriert werden.
Im Gegensatz zu den bisherigen Beispielen, wird hier auch berücksichtigt, dass bei demselben Score auch derselbe Rang zu vergeben ist.Spoiler anzeigen
[autoit]#include <Array.au3>
[/autoit] [autoit][/autoit] [autoit]#cs
[/autoit] [autoit][/autoit] [autoit]
[highscore]
0=1|1990|nameA|01.09.2013
0=2|1888|nameA|11.09.2013
0=3|900|nameB|02.09.2013
0=4|890|nameA|07.09.2013
#ceOnAutoItExitRegister('_WriteIni')
[/autoit] [autoit][/autoit] [autoit]Local $INI = 'sortHigh.ini'
[/autoit] [autoit][/autoit] [autoit]
Local $aHigh = _ReadIniScoreToArray($INI, 'highscore')_ArrayDisplay($aHigh, 'Highscore aus INI')
[/autoit] [autoit][/autoit] [autoit]_AddNewScoreAndSort($aHigh, 900, 'MrX', '12.09.2013')
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
_AddNewScoreAndSort($aHigh, 900, 'MrY', '12.09.2013')
_AddNewScoreAndSort($aHigh, 900, 'MrZ', '12.09.2013')
_AddNewScoreAndSort($aHigh, 900, 'MrQ', '12.09.2013')
_AddNewScoreAndSort($aHigh, 1990, 'MrsP', '12.09.2013')
_ArrayDisplay($aHigh, 'Highscore aktualisiert')Func _WriteIni()
[/autoit] [autoit][/autoit] [autoit]
_WriteScoreArrayToIni($INI, 'highscore', $aHigh)
EndFuncFunc _ReadIniScoreToArray($_sPathINI, $_sSection)
[/autoit] [autoit][/autoit] [autoit]
Local $aSection = IniReadSection($_sPathINI, $_sSection), $aSplit
Local $aScore[$aSection[0][0]+1][4] = [[$aSection[0][0]]] ; [[Rang,Score,Name,Datum]], [0][0]=Anzahl
For $i = 1 To $aSection[0][0]
$aSplit = StringSplit($aSection[$i][1], '|')
For $j = 1 To 4
If $j = 2 Then $aSplit[$j] = Number($aSplit[$j])
$aScore[$i][$j-1] = $aSplit[$j]
Next
Next
Return $aScore
EndFuncFunc _WriteScoreArrayToIni($_sPathINI, $_sSection, ByRef $_aScore)
[/autoit] [autoit][/autoit] [autoit]
Local $sWrite = ''
For $i = 1 To $_aScore[0][0]
$sWrite &= '0|' & $_aScore[$i][0] & '|' & $_aScore[$i][1] & '|' & $_aScore[$i][2] & '|' & $_aScore[$i][3] & @LF
Next
IniWriteSection($_sPathINI, $_sSection, $sWrite)
EndFuncFunc _AddNewScoreAndSort(ByRef $_aScore, $_iScore, $_sName, $_sDate)
[/autoit]
$_aScore[0][0] += 1
ReDim $_aScore[$_aScore[0][0]+1][4]
$_aScore[UBound($_aScore)-1][1] = Number($_iScore)
$_aScore[UBound($_aScore)-1][2] = $_sName
$_aScore[UBound($_aScore)-1][3] = $_sDate
_ArraySort($_aScore, 1, 1, 0, 1)
Local $iRank = 1
For $i = 1 To $_aScore[0][0]
$_aScore[$i][0] = $iRank
If $i > 1 And $_aScore[$i-1][1] = $_aScore[$i][1] Then
$_aScore[$i][0] = $_aScore[$i-1][0]
Else
$iRank += 1
EndIf
Next
EndFunc -
hier bekommt man wohl keine Hilfe und Friesel braucht zu lange, bis da mal was kommt.
Das und ständiges Pushen sehe ich als Grund für Verwarnung des TE.
[CLOSED] -
Schau mal in meine Signatur, da findest du ein Tut zu Arrays.
Ich hab mal eine Lösungsvariante gebastelt. Probier erst mal selber, dann guck in den Spoiler:
Spoiler anzeigen
[autoit]#include <Date.au3>
[/autoit] [autoit][/autoit] [autoit]ConsoleWrite('Heute ist: ' & _WeekDay_GE(@YEAR, @MON, @MDAY) & @LF)
[/autoit] [autoit][/autoit] [autoit]Func _WeekDay_GE($_iYYYY, $_iMM, $_iDD)
[/autoit]
Local $aWDays[8] = ['','Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag']
Local $iDay = _DateToDayOfWeek($_iYYYY, $_iMM, $_iDD) ; So = 1, ... Sa = 7
Return $aWDays[$iDay]
EndFunc -