Beiträge von BugFix
-
-
Jeder kennt das:
Entwicklung eines Projektes, es kommen immer mehr Control hinzu und die Gui muss angepasst werden, was auch bedeutet, dass alle(viele) Controlpositionen angepasst werden müssen.
Das war mir jetzt zu blöd und deshalb habe ich diese kleine Funktion zum Positionieren der Control geschrieben. Somit kann die Änderung bei Controls deutlich minimiert werden.
AutoIt: _CtrlPosRelative( )
Alles anzeigen;-- TIME_STAMP 2020-10-29 12:22:58 #include <WinAPISysWin.au3> #include <WinAPIDlg.au3> Opt('MustDeclareVars', 1) GUICreate('Test') Local $bt1 = GUICtrlCreateButton('Test Button 1', 0, 0, 150, 25) _CtrlPosRelative(-1, -10, -10) ; 10px Rand rechts und unten Local $bt2 = GUICtrlCreateButton('Test Button 2', 0, 0, 150, 25) _CtrlPosRelative(-1, 10, -10) ; x ist fix, y relativ mit 10px Rand unten GUISetState() ; Größe der Gui ändern und Ctrl verschieben an relative Position Sleep(5000) WinMove('Test', '', 100, 50, 800, 600) _CtrlPosRelative($bt1, -10, -10) _CtrlPosRelative($bt2, 10, -10) Do Until GUIGetMsg() = -3 Func _CtrlPosRelative($_iID, $_x, $_y, $_w=-1, $_h=-1) Local $hCtrl = IsHWnd($_iID) ? $_iID : GUICtrlGetHandle($_iID) Local $hParent = _WinAPI_GetParent($hCtrl) Local $iID = _WinAPI_GetDlgCtrlID($hCtrl) Local $aSize = ControlGetPos($hParent, '', $iID) If $_w = -1 Or $_w = Default Then $_w = $aSize[2] If $_h = -1 Or $_h = Default Then $_h = $aSize[3] Local $clientW = _WinAPI_GetClientWidth($hParent) Local $clientH = _WinAPI_GetClientHeight($hParent) If $_x < 0 Then $_x = $clientW - $_w - Abs($_x) If $_y < 0 Then $_y = $clientH - $_h - Abs($_y) ControlMove($hParent, '', $iID, $_x, $_y, $_w, $_h) EndFunc -
Neue Dateien 06
[RESERVIERT: BugFix]erledigt
-
Wir kennen alle zur Genüge von unserer Forensoftware die Mitteilung: Ihre Sitzung ist abgelaufen, bitte melden Sie sich neu an.
Diese Meldung basiert in der Regel aber nicht auf Problemen des Forums, sondern auf der Tatsache, dass der Browser selbst Änderungen am User-Agent vornimmt, was die Zertifizierung der Sitzung aufhebt.
Aber das nur am Rande.
Ich möchte für das automatische Laden lokaler Webseiten dieses Ereignis selbst auslösen. Also: Message an Server - Sitzung ist abgelaufen.
Denn diese Nachricht kann ich in der Browsereinstellung als Trigger für automatisches Neuladen nutzen.
Ich habe aber keinen Plan, wie ich selbst (per Programmbefehl) diese Nachricht auslösen kann. Hat da jemand Erfahrung?
-
Die letzte mir bekannte war die 12USB Version von Opera wo man über die skin.ini Anpassungen machen konnte. Geht das auch mit den neueren USB Versionen?
Ich verwende die Version 12.18.1872.0, da ich neben Portabilität auch Wert auf geringe Dateigröße lege. Früher war portabel in der Regel auch ein Garant für kleine Dateien - aber das interessiert heute scheinbar keinen mehr, da USB-Datenträger immer größer werden. Während die v12.18 nur 31 MB auf dem Datenträger belegt, braucht die aktuelle Version v72.0 64,5 MB!
Aktuelle Versionen sind für offline Nutzung auch nicht erforderlich. Alles was da an Neuigkeiten drin ist betrifft im Wesentlichen Online-Sicherheit, also für meine Offline-Nutzung völlig uninteressant. Am Liebsten würde ich ja die Uraltversion des K-Meleon Browsers nehmen, der hatte nicht mal 2 MB, kann aber leider die neuesten Stylings nicht umsetzen.
Falls jemand Bedarf hat, die Version kann hier herunter geladen werden.
-
werden die _IE-Funktionen dann sicher auch nicht mehr funktionieren..
IE war hier nur zu Demozwecken. Ich packe eine abgespeckte Opera Portable Version bei und öffne darin die Hilfedatei. Der Browser lässt sich so konfigurieren, dass keinerlei Menü, Adresszeile etc. sichtbar ist, sieht dann wie ein Editierfenster aus.
-
Oder verwende Html (bevorzuge ich):
AutoIt
Alles anzeigen#include <GUIConstantsEx.au3> #include <IE.au3> #include <WindowsConstants.au3> OnAutoItExitRegister('_exit') Local $sHtml = _ '<!DOCTYPE html>' & @CRLF & _ '<html>' & @CRLF & _ ' <head>' & @CRLF & _ ' <meta charset="utf-8">' & @CRLF & _ ' <title>Using inline CSS styles</title>' & @CRLF & _ ' <style>' & @CRLF & _ ' body {' & @CRLF & _ ' font-family: sans-serif;' & @CRLF & _ ' }' & @CRLF & @CRLF & _ ' h2 {' & @CRLF & _ ' color: rgb(230, 107, 0);' & @CRLF & _ ' }' & @CRLF & @CRLF & _ ' </style>' & @CRLF & _ ' </head>' & @CRLF & _ ' <body>' & @CRLF & @CRLF & _ ' <h1>Hilfe</h1>' & @CRLF & _ ' <h2>Vorwort</h2>' & @CRLF & _ ' <p>Diese Hilfe wird dich unterstützen bei der Nutzung des Programms</p>' & @CRLF & _ ' <h2>Inhalt</h2>' & @CRLF & _ ' <ul>' & @CRLF & _ ' <li>A</li>' & @CRLF & _ ' <li>B</li>' & @CRLF & _ ' <li>C</li>' & @CRLF & _ ' <li>D</li>' & @CRLF & _ ' </ul>' & @CRLF & _ ' </body>' & @CRLF & _ '</html>' & @CRLF Global $HelpHtml = StringReplace(@TempDir & "\help.html", '\', '/') FileWrite($HelpHtml, $sHtml) GUICreate("Embedded Html", 640, 580, _ (@DesktopWidth - 640) / 2, (@DesktopHeight - 580) / 2, _ $WS_OVERLAPPEDWINDOW + $WS_CLIPSIBLINGS + $WS_CLIPCHILDREN) Local $oIE = _IECreateEmbedded() GUICtrlCreateObj($oIE, 10, 40, 600, 360) GUISetState(@SW_SHOW) _IENavigate($oIE, "file:///" & $HelpHtml) While 1 Local $iMsg = GUIGetMsg() Select Case $iMsg = $GUI_EVENT_CLOSE ExitLoop EndSelect WEnd GUIDelete() Exit Func _exit() FileDelete($HelpHtml) EndFunc -
Scheint so als wäre das wirklich mal was wo keiner eine Lösung weis
Weil es keine (native) Lösung gibt.
Windows stellt keine Möglichkeit bereit, die Bildschirmauflösung per Kommandozeile zu ändern. Es gibt ein Tool: QRes, mit dem das möglich ist. Aber Vorsicht - das Tool prüft nicht, ob die übergebenen Werte von der Hardware realisierbar sind. Man muss also wissen, was man tut.
-
die ich mittig auf dem Bildschirm platzieren möchte. Dafür nutze ich den Optionsparameter "2" (Center the tip at the x,y coordinates instead of using them for the upper left corner) und es klappt wie erwartet.
Das hast du total falsch verstanden.
Das Zentrieren bezieht sich auf den Text IM TOOLTIP!! und nicht auf die Platzierung auf dem Bildschirm, dafür sind Koordinaten erforderlich. Mit dem Default-Keyword statt der Koordinaten wird der Tip in der Nähe des Mauszeigers angezeigt.
Edit: Nochmal deutlicher:
Normal: die linke untere Ecke des Tooltip wird auf die x,y - Koordinaten gesetzt.
$TIP_CENTER: die Mitte des Tooltip wird an die x,y - Koordinate gesetzt
Edit_2:
Mit einer eigenen (gekapselten) ToolTip Funktion kann man das recht elegant lösen:
$TIP_FORCEVISIBLE wird außer bei Anzeige in der Mitte immer benötigt. Falls die Option $TIP_CENTER verwendet wird, könnte sonst der Tip ausserhalb des Bildschirmes dargestellt werden. Das wird so verhindert.
AutoIt
Alles anzeigenGlobal Enum Step *2 $TT_LEFT, $TT_RIGHT, $TT_TOP, $TT_BOTTOM, $TT_VCENTER, $TT_HCENTER _ToolTip('LEFT TOP', '', BitOR($TT_LEFT,$TT_TOP)) Sleep(2000) _ToolTip('LEFT VCENTER', '', BitOR($TT_LEFT,$TT_VCENTER)) Sleep(2000) _ToolTip('LEFT BOTTOM', '', BitOR($TT_LEFT,$TT_BOTTOM)) Sleep(2000) _ToolTip('HCENTER TOP', '', BitOR($TT_HCENTER,$TT_TOP)) Sleep(2000) _ToolTip('HCENTER VCENTER') ; default: BitOR($TT_VCENTER, $TT_HCENTER) Sleep(2000) _ToolTip('HCENTER BOTTOM', '', BitOR($TT_HCENTER,$TT_BOTTOM)) Sleep(2000) _ToolTip('RIGHT TOP', '', BitOR($TT_RIGHT,$TT_TOP)) Sleep(2000) _ToolTip('RIGHT VCENTER', '', BitOR($TT_RIGHT,$TT_VCENTER)) Sleep(2000) _ToolTip('RIGHT BOTTOM', '', BitOR($TT_RIGHT,$TT_BOTTOM)) Sleep(2000) Func _ToolTip($sText, $sTitle="", $iPosition=BitOR($TT_VCENTER, $TT_HCENTER), $iIcon=0, $iOptions=0) Local $x = @DesktopWidth/2, $y = @DesktopHeight/2 ; $TT_HCENTER, $TT_VCENTER Local $iOptForceVisible = BitOR(BitXOR($iOptions, 4), 4) If BitAND($iPosition, $TT_LEFT) Then $x = 0 $iOptions = $iOptForceVisible ; $TIP_FORCEVISIBLE muss gesetzt sein EndIf If BitAND($iPosition, $TT_RIGHT) Then $x = @DesktopWidth $iOptions = $iOptForceVisible ; $TIP_FORCEVISIBLE muss gesetzt sein EndIf If BitAND($iPosition, $TT_TOP) Then $y = 0 $iOptions = $iOptForceVisible ; $TIP_FORCEVISIBLE muss gesetzt sein EndIf If BitAND($iPosition, $TT_BOTTOM) Then $y = @DesktopHeight $iOptions = $iOptForceVisible ; $TIP_FORCEVISIBLE muss gesetzt sein EndIf ToolTip($sText, $x, $y, $sTitle, $iIcon, $iOptions) EndFunc -
zumindest für Python bräuchte ich es auch... obwohl es da ja keinen echten Multi-Line-Kommentar gibt... da mache ich es mit Multi-Line-String
Jo, wird ja auch so empfohlen.
Werde ich mal noch einpflegen. Mal sehen, wie das am Besten geht, denn da muss ja der Einzug berücksichtigt werden.
-
habe dazu was getippt, um an den Style zu kommen
Da hast du mich falsch verstanden. Den Style an einer bestimmten Position des Editors kann man mit den Api-Funktionen auslesen:
editor.StyleAt[position]
Aber man kann nicht abfragen, welchen Style au3 oder lua für comment.box verwenden (bei AutoIt: 2, bei Lua: 1).
Sofern das nur für AutoIt und Lua genutzt wird, ist das OK. Vielleicht mache ich das, indem ich die Togglefunktion nur für SciTE und Lua aktiv schalte.
-
Wenn nichts markiert wurde, sollte es egal sein, wo das Caret steht, solange es sich in einer Start-/Endzeile oder sonstwo innerhalb eines Kommentarblocks befindet, um den Kommentarblock wieder zu entfernen.
Das halte ich nicht für sehr sinnvoll. Wenn zuviel Möglichkeiten sind, sind zuviel Fehlinterpretationen möglich. "Der Cursor muss in seiner Zeile oder einer der folgenden Zeilen comment.start finden". Das entspricht auch unserem visuellen Vorgehen: Von oben nach unten.
Die Position innerhalb eines Kommentarblocks zu erkennen, kann ich zwar sicher für Lua und AutoIt (weil ich da weiß, welcher Style jeweils verwendet wird), aber eben nicht allgemeingültig, weil nirgendwo ausgelesen werden kann, welchen Style der jeweilige Dateityp für Blockkommentare nutzt. Das ist in der Lexer.dll definiert. In den Properties sieht man das nur anhand der Kommentare, die aber auch unterschiedlich und somit nicht zuverlässig sind.
Wo ich noch mitgehen könnte: Cursor vor/in comment.start Zeile oder in comment.end Zeile
Allerdings wäre das nicht mehr kongruent in der Anwendungsweise, dann sollte man lieber sagen: in comment.start Zeile oder in comment.end Zeile
Was meinst du?
Wenn sich in der Selektion eine Start-/Endzeile befindet, jedoch kein Gegenstück dazu, sollte das als Fehler gewertet und kein Kommentarblock erzeugt werden.
Ähm, der Anwender hat also ohne Sinn und Verstand ein einzelnes #cs oder #ce in sein Skript geklatscht und das soll ich abfangen? In kleinen Skripten könnte man das tun, aber stell dir mal ein paar tausend Zeilen Code vor. Es muss das gesamte Skript vom Anfang bis zur Cursorposition gescannt werden um die korrelierenden start-end Zuordnungen zu erhalten. Das halte ich nicht für erstrebenswert. Etwas an Denkprozessen darf man ruhig auf den Anwender übertragen.

Ich denke, comment.box.middle ist nicht dazu gedacht, um Einrückungen zu definieren, sondern um dem Kommentar ein oder mehrere druckbare Zeichen voranzustellen.
OK, da kann ich mitgehen.
Anhand folgender Properties kann bestimmt werden, ob bzw. wie comment.box.middle eingerückt wird:
Ja OK. Doch trotzdem muss an irgendeiner Stelle definiert werden: Ja, ich will (auch Kommentarblöcke) einrücken oder eben nicht. Denn ich kann ja nicht vom Anwender unabhängig einfach festlegen, dass eingerückt wird. Also ist zumindest eine weitere Property erforderlich, z.B. comment.box.indent.filepattern=0/1
-
comment.box.tab.alternation=@Tab ; <== Für diese Variable erkenne ich auch bei aller Anstrengung keinen Mehrwert!
Da nur sichtbare Zeichen als Property gesetzt werden können, muss der Anwender über ein Ersatzzeichen mitteilen, dass ein Tab zur Anwendung kommen soll.
Ich hätte auch festschreiben können: Soll ein Tab als box.middle verwendet werden so muss als Zeichen dafür "T" verwendet werden. In diesem Fall wäre die Property tatsächlich überflüssig.
Da ich aber dem Anwender freie Wahl bei der Definition für seine Tab-Variable ermöglichen will ("@TAB", "tab", "BunteKuh",...) muss für den Fall, dass Tab verwendet werden soll das/die entsprechende/n Zeichen dort definiert werden und in box.middle wird darauf verwiesen: comment.box.middle.au3=$(comment.box.tab.alternation)
Im Skript prüfe ich:
comment.box.middle. nicht-leer ? --> comment.box.middle == comment.box.tab.alternation ? --> OK, TAB soll als box.middle verwendet werden.
...und das passiert dann damit... das Exit hinter #CE ist zu viel und das Exit darüber dürfte nicht mit im Kommentarblock sein!
Du hast sowas von Recht, und ich bin froh dich als Tester zu haben.

Ich hatte zwar im Vorfeld alle möglichen (und vor allem unmöglichen
) Markierungsvarianten überlegt, aber dann 2 vergessen umzusetzen:Das ist nun korrigiert. (poste es gleich)
NEU v 0.8 - s. Post #1
- Start-/Endmarkierung mitten in der jeweiligen Zeile (Zeile gehört zum Block)
- Endmarkierung in nicht leerer Zeile am Anfang (Zeile gehört nicht zum Block)
-
Meinst du das hier BuxFix:
Nein, sondern das hier.
-
-
Wie heißen denn Lua-Dateien, in die man Funktionen schreibt, die dann in anderen Lua-Dateien mit "requiere" eingebunden werden
Das kommt drauf an. Schreibst du ein Modul, dann ist es ein Modul. Schreibst du eine Library, dann ist es eine Library.
Die Unterscheidung ist auf den ersten Blick nicht so deutlich.
Eine Bibliothek stellt i.A. eine Funktionssammlung dar (OHKfuncs.lua ist eine Bibliothek mit dem Globalen Table OHK, auf das nach dem Laden aus allen Skripten zugegriffen werden kann). Die Funktionen können aber ebensogut einzeln in der Datei vorhanden sein (nicht in einem Table)
Ein Modul ist an sich auch eine Bibliothek - aber mit einem Unterschied: Alle Funktionen werden in einem lokalen Table erstellt. Dieses Table wird dann am Ende der Datei exportiert:
-- z.B. "MeinModul.lua"
local MeinModul = {
f1 = function() .... end,
f2 = function() .... end,
f3 = function() .... end,
...
}
return MeinModul
Schau mal ins Modul-Tutorial.
Können Funktionen in anderen Lua-Scripts mit "requiere" benutzt werden, die in der eingebundenen Bibliothek mit "local" deklariert wurden?
Nur wenn sie als Modul erstellt wurden. Alles was lokal ist, kann in anderen Dateien nicht erkannt werden, wenn es nicht exportiert wird.
Übrigens nicht unwichtig: Im Gegensatz zu AutoIt sind Schleifenvariablen auch lokal. Man braucht sie zwar nicht deklarieren, aber ausserhalb der Schleife existieren sie nicht mehr.
Was ist der Unterschied zwischen requiere "MyModule", LoadLuaFile("MyModule.lua") und LoadUserLuaFile('MyModule.lua')?
LoadLuaFile und LoadUserLuaFile machen beide dasselbe: dofile
Die beiden Funktionen verwenden nur einen vordefinierten Pfad (bzw den Pfad als Zusatzparameter mit Default-Wert), sodass nur der Dateiname übergeben werden muss.
LoadUserLuaFile hatte ich erstellt um damit direkt eigene Dateien nur mit Angabe des Dateinamens aus dem Lua.User.Scripts.Path zu laden.
Der Unterschied zu require? - Lies selbst:
Lua offers a higher-level function to load and run libraries, calledrequire. Roughly,requiredoes the same job asdofile, but with two important differences. First,requiresearches for the file in a path; second,requirecontrols whether a file has already been run to avoid duplicating the work. Because of these features,requireis the preferred function in Lua for loading libraries. -
Oder du machst das Menü mehrspaltig. Ich kann mich schwach erinnern, dass ich vor vielen Jahren dazu etwas gepostet hatte. Musst du mal suchen.
-
Setzte ich das Caret aber an den Anfang der zweiten Zeile, dann wurde ja eigentlich nur eine Zeile markiert.
Eigentlich ist ein schönes Wort.

Denn eigentlich hast du zwei Zeilen markiert - kann ja interpretiert werden als: da gehört jetzt noch eine Leerzeile in den Block und nur wenn die Markierung hinter dem Text endet, ist diese Zeile allein gemeint.

Ich will aber sowieso noch ein paar Erweiterungen vornehmen, kümmere ich mich am WE drum.
-
Meinst du damit, es ist besser ein Table lokal zu deklarieren? Z.B. in "MeinModul.lua" local MyMod = {}?
Ja. Was du nicht als lokal deklariert hast, landet in _G, dem Globalen Table. Die Suche nach Variablen, Funktionen ist immer:
- im aktuellen Chunk (Funktion oder do... end - Bereich)
- im Skript
- in eingebundenen Modulen
und zum Schluß im Globalen Table. Somit werden lokale Deklarationen am Schnellsten gefunden.
Du wirst in vielen Skripten z. B. die Lokalisierung nativer Funktionen finden. lokal string = string
Das bringt wieder ein paar Millisekunden.

-
Wofür ist denn "OHK = {}" am Anfang er OHKfuncs.lua? In anderen Scripts habe ich z.B. "F = {}" gesehen.
Mal noch als Hintergrund:
Lua besteht intern ausschließlich aus Arrays - in Lua: Tables.
Alle Funktionen und Werte sind darin gespeichert. Daraus resultiert auch, dass Lua extrem davon profitiert, wenn Funktionen/Variablen explizit lokal deklariert werden.