und brauchst die Abfrage für die Taskbarposition nicht mehr!
He He - die brauche ich nach wie vor.
Ich frage ja auch ab, ob diese sichtbar ist und docke z.B. GUI dort an.
und brauchst die Abfrage für die Taskbarposition nicht mehr!
He He - die brauche ich nach wie vor.
Ich frage ja auch ab, ob diese sichtbar ist und docke z.B. GUI dort an.
Die Taskleiste wird bei der Berechnung auch berücksichtigt.
Jein, wenn du die Taskleiste nicht an "Standardposition" also unten hast (ich habe sie links), wird sie kpl. ignoriert. Übrigens auch von fast allen professionellen Programmen. Ich glaube, ich bin der einzige Trottel, der in Software für andere immer eine Abfrage der Taskbarposition und -größe integriert. ![]()
Und unter welchen Namen,Nummern hast du die Textelemente angelegt?
Ich sehe darin nix ausser MSVCRT.DLL und KERNEL32.DLL
Aufgefallen ist mir, dass das Fenster ungefähr die halbe Taskleiste unter Win 8 noch anzeigt.
Blende die Taskleiste einfach aus. Die Makros für Bildschirmgröße arbeiten sowieso nicht korrekt in Bezug auf die Position der Taskbar. Kannst ja die Größe auch fix vorgeben, wenn alle Desktop dieselbe Größe haben.
$Body = FileRead("Text-Datei.die_du_anhängen_willst")
Hier mal was ganz simples aus der Hüfte:
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
Global $h = @DesktopHeight
Global $w = @DesktopWidth
Global $hGui = GUICreate('', $w, $h, -1, -1, $WS_POPUP)
; das Fenster nach vorn setzen
WinSetOnTop($hGui, '', 1)
Global $Kachel_1 = GUICtrlCreateLabel('', 0, 0, $w/2, $h/2)
Global $Kachel_2 = GUICtrlCreateLabel('', $w/2, 0, $w/2, $h/2)
Global $Kachel_3 = GUICtrlCreateLabel('', 0, $h/2, $w/2, $h/2)
Global $Kachel_4 = GUICtrlCreateLabel('', $w/2, $h/2, $w/2, $h/2)
GUICtrlSetBkColor($Kachel_1, 0xFF0000)
GUICtrlSetBkColor($Kachel_2, 0x00FF00)
GUICtrlSetBkColor($Kachel_3, 0x0000FF)
GUICtrlSetBkColor($Kachel_4, 0xFF00FF)
; die Kacheln selbst sollen nicht klickbar sein:
GUICtrlSetState($Kachel_1, $GUI_DISABLE)
GUICtrlSetState($Kachel_2, $GUI_DISABLE)
GUICtrlSetState($Kachel_3, $GUI_DISABLE)
GUICtrlSetState($Kachel_4, $GUI_DISABLE)
; nur zum Beenden in dieser Demo:
Global $bEnd = GUICtrlCreateButton('Ende', 100, 50, 100, 24)
; genau wie Button lassen sich auch Picture-Ctrl oder Icon verwenden
[/autoit] [autoit][/autoit] [autoit]GUISetState()
[/autoit] [autoit][/autoit] [autoit]While 1
Switch GUIGetMsg()
Case $bEnd
Exit
EndSwitch
WEnd
Ich kenne das so, dass jede Nacht nach Schliessen eines Internetcafes alle PC ihr Start-Image übergebügelt bekommen. Ist auch empfehlenswert, falls es einem User absichtlich oder unabsichtlich gelingt, irgendeinen Schädling einzupflanzen.
Aber noch empfehlenswerter ist eigentlich das System von einem Read-Only Medium zu starten, also z.B. eine Live-CD. Das ist zudem eine Datenschutz-freundliche Variante - nach jedem User neu starten und das System ist sauber und ohne irgendwelche Verlaufsspuren, Cookies etc. - ich weiss, dass die staatlichen Verfolgungsbehörden wohl "not amused" wären, wenn alle so verantwortungsbewusst mit ihren Daten umgehen würden
- Denn wo man nichts schreiben kann, lässt sich auch schlecht ein Staatstrojaner unterbringen.
Wirklich sinnvoll ist es m.M. nach wirklich nur, wenn man, wie in xml oder JSON, Schlüssel-Wert-Paare (mit beliebig vielen Unterpaaren) in Dictionaries ablegen will.
Da muss man wirklich auf den einzelnen Verwendungszweck schauen.
Was möchtest du eigentlich mit der Baumstruktur erreichen?
Ich kann zwar nicht für den TE antworten, aber Baumstrukturen sind doch weit verbreitet und sehr effizient. Schau dir xml oder JSON an.
Ich habe es nie explizit getestet, aber ich bin der Meinung dieser "Schreibschutz" ist ausschließlich auf die Editorebene bezogen und temporär. Das hat nichts mit der Dateieigenschaft read-only zu tun.
Ich hatte mal Funktionen zum Speichern eines Treeview in einer Datei und umgekehrt erstellt:
TreeviewOrder.au3 -- Treeview Inhalt in Datei speichern und aus Datei laden
Wobei man auch ein Auge auf die Performance werfen sollte. In Loops nicht schreiben.
[autoit]
#include <Array.au3>
Local $sOutput = @ScriptDir & "\Output.txt"
Local $aData[4] = [45,2,9,413];Hier deine Daten Quelle (in diesem Fall habe ich einfach ein Beispiel Array erstellt)
_ArraySort($aData)
[/autoit][autoit][/autoit][autoit]Local $sWrite = ''
For $i = 0 To UBound($aData) -1
$sWrite &= $aData[$i] & @CRLF
; FileWriteLine($sOutput,$aData[$i])
Next
FileWrite($sOutput, $sWrite)
Exit
Was so auf den Straßen herumfährt ist was die meisten laien bauen. Das ist meist nur laut. Auf Wettbewerben gibt es verschiedene Arten von Anlagen.
Das war ja auch das, was ich sagte: Diese Wettbewerbe haben eigentlich mit Autos nichts zu tun, da diese nur als Attrappe für die Anlage herhalten. Der Sound dort wird ja nicht bei einer Straßenfahrt bewertet. Also mobiler Sound in einem nicht-mobilen Automobil. ![]()
Diese Veranstaltungen rufen bei mir immer das Bild des "coolen" Typen hervor, der mit einem Ghetto-Blaster in Kühlschrankgröße durch die Straßen zieht. ![]()
Warum man um eine Ansammlung von Lautsprechern in Waschschüsselgröße ein lackiertes Gehäuse mit 4 Rädern baut, wird sich mir wohl für immer und ewig verschliessen. ![]()
Ich habe jetzt nicht den ganzen Thread nochmal durchforstet, daher sorry, falls schon gemeldet:
- Konversationen lassen sich nicht löschen
- Durchsuchen von Konversationen führt immer zu "keine Ergebnisse gefunden" (Suchbegriff ist bei mir immer der Absender/Empfänger)
- Dateianhänge *.au3 sind nicht möglich (etwas peinlich in einem AutoIt-Forum)
Ist eigentlich eine Lösung für "Ihre Sitzung ist abgelaufen..." möglich? Im Schnitt reichen 30s Inaktivität, damit das Forum mich mit diesem Hinweis kickt. Vereinzelt habe ich aber auch mal mehr Zeit zum 'idlen'. Ärgerlich ist das besonders, wenn ich einen etwas längeren Beitrag verfassen will. Beim Absenden bekomme ich dann diese Nachricht. Also kopiere ich schnell den geschriebenen Inhalt, melde mich neu an und füge den Inhalt ein.
Aber: Bei Copy&Paste im Editor gehen alle Zeilenumbrüche verloren. Also muss ich wieder editieren und wenn ich Pech habe ist meine Sitzung schon wieder abgelaufen, wenn ich posten will. :wacko:
Hi,
ich habe mal einen anderen Lösungsansatz gewählt:
- Finde alle Komma-Positionen
- Finde alle Komma-Positionen innerhalb von Strings (Single-quotiert oder Double-quotiert)
- Finde alle Komma-Positionen innerhalb von Funktionsaufrufen
- Entfernen der "inside"-Kommapositionen durch Vergleich mit den anderen Positionen.
Übrig bleiben die Kommapositionen, die tatsächliche Parameter trennen.
Da die Suche nach balancierten Ausdrücken in AutoIt etwas hibbelig ist (und wir brauchen gleich 3 davon: '', "", () ), habe ich diesen Teil ausgelagert und ermittele das mittels Lua über Lua - Inline.
#include-once
#include "LuaInline.au3"
#include "Array.au3"
_Lua_StartUp() ; == Initialisiert Lua, Shutdown automatisch bei AutoIt-Ende
[/autoit] [autoit][/autoit] [autoit]Global $sFunc = _
"function GetParamCommaPos(_s)" & _
" local tComma, tInComma, sComma, dbl = {}, {}, '', string.char(34)" & _
" local function CheckPos(_ps, _pe)" & _
" for i=1, #tComma do" & _
" if (tComma[i] > _ps and tComma[i] < _pe) then tInComma[tComma[i]] = true end" & _
" end" & _
" end" & _
" local tPattern = {'()(%b'..dbl..dbl..')()', '()(%b\'\')()', '()(%w+%b\(\))()'}" & _ ; == 'dblQuote', 'sglQuote', 'funcCall'
" for pos_s, _ in _s:gmatch('()(,)') do" & _
" table.insert(tComma, pos_s)" & _
" end" & _
" for i=1, #tPattern do" & _
" for pos_s, _, pos_e in _s:gmatch(tPattern[i]) do" & _
" CheckPos(pos_s, pos_e)" & _
" end" & _
" end" & _
" for i=1, #tComma do" & _
" if not tInComma[tComma[i]] then sComma = sComma..tostring(tComma[i])..',' end" & _
" end" & _
" return sComma:sub(1,#sComma-1)" & _
"end"
;~ Parameter ist als Array zu übergeben
Global $sStr = '"testfenster, test, test (abcd)", 10, 10, iniread("test.ini","test","test","test"),"test"'
Global $aParam[1] = [$sStr]
Global $aSplitPos = StringSplit(_Lua_RunFuncLocal($sFunc, 'GetParamCommaPos', $aParam, 'str'), ',')
Global $aParam[$aSplitPos[0] +1], $n = 1, $sVal
For $i = 1 To $aSplitPos[0]
$sVal = StringMid($sStr, $n, $aSplitPos[$i]-$n)
$aParam[$i-1] = StringStripWS($sVal, 1+2)
$n = $aSplitPos[$i]+1
Next
$aParam[$aSplitPos[0]] = StringStripWS(StringTrimLeft($sStr, $aSplitPos[$aSplitPos[0]]) , 1+2)
_ArrayDisplay($aParam)
[/autoit]
Wenn du das als feste Funktion nutzen möchtest, ist es effektiver die Lua Funktion als Lua-Skript mit anzuhängen und aus diesem Skript zu laden.
"_Lua_RunFuncLocal" schreibt die Funktion auch nur in ein Temp-File und ruft darüber auf. Also verwende dann besser "_Lua_RunFuncFile".
EDIT:
Ich habe mal die Auslagerung in ein Lua-Skript erstellt.
Eine Besonderheit: Das aufzurufende Lua-Skript muss mit absolutem Pfad aufgerufen werden, @ScriptDir bringt also nix. Deshalb ist der Pfad für das Lua-Skript als zusätzlicher Parameter enthalten.
#include "C:\Code_AutoIt\BEISPIELE\SplitParam.au3"
#include "LuaInline.au3"
#include <Array.au3>
_Lua_StartUp()
[/autoit] [autoit][/autoit] [autoit]Local $s = '"testfenster, test, test (abcd)", 10, 10, iniread("test.ini","test","test","test"),"test"'
Local $aRet = _SplitParameters($s, 'C:\Code_AutoIt\BEISPIELE')
_ArrayDisplay($aRet)
Die LuaInline.au3 sollte aber auf jeden Fall im Hauptskript geladen werden, ebenso das _Lua_StartUp(). Wenn man das auslagern würde in die SplitParam.au3, würde bei jedem Aufruf die lua.dll neu erstellt werden.
In meinem Auto sind ausschließlich Komponente der höheren/höchsten Qualität verbaut, da ich versuche mit meinem Auto das an Sound auf die Beine zu stellen, was auf Messen steht
Mag sein, dass ich das anders sehe und kenne - aber Musik in hoher Qualität bedeutet für mich eindeutig, dass ich die Lautstärke auf ein Minimum reduzieren kann und dabei ein Maximum an musikalischem Erleben habe. Und genau das widerspricht per se schon den Bedingungen in einem Auto.
Mir sind nur wenige Nobelkarossen bekannt, die tatsächlich so gut schallgedämmt sind, dass die Nutzung einer Musikanlage, die über einfachen Stereosound hinausgeht, überhaupt sinnvoll ist.
Allein die Basisfrequenzen, die beim Betrieb eines PKW entstehen, überlagern eine große Bandbreite der Musik. Insofern ist das Musikhören im Auto immer Welten entfernt von qualitativ hochwertigem Musikgenuss.
Im Stadtverkehr mag das vielleicht noch gehen, aber ich fahre z.B. 90% meiner Fahrten auf Autobahnen und bei Tempo 180 oder mehr ist die lauteste Melodie, die des Fahrtwindes. ![]()
Läuft das über die Styles ab die Scintilla verwendet?
Genau, der Lexxer ordnet den Positionen im Editor die gefundenen Styles zu. Für au3 ist das Komma mit bei den Operatoren, also im 'style.au3.8'.
Ein Problem bleibt allerdings weiterhin, dass Parameter wiederum selbst Funktionen mit Parametern sind. Da kannst du evtl. hier Anregungen holen: _String_Balanced --> Text zwischen korrespondierenden Klammern
Nicht nur die Funktion selbst, sondern auch die Hinweise auf Rekursion mit RegEx in den Posts.
Mal ne andere Frage: Untersuchst du die Strings ausserhalb des Editors oder im Editor?
Falls im Editor, du verwendest doch Scintilla (wie auch SciTE). Und da könntest du die Zeichen-Typ-Info heranziehen um die Kommapositionen für die Parametertrennung zu identifizieren.
Brauchst du eine globale Lösung, die also jede Variante an Parameterstrukturen berücksichtigt (auch mit unterschiedlichen Stringbegrenzern innerhalb einer Struktur) oder geht es dir speziell um diesen Anwendungsfall?
Schau mal hier: Button Designer