Beiträge von BugFix
-
-
Ich habe es gerade getestet. Hat nicht funktioniert, ich glaube aber das ich die falsche au "noch" haben.
QRCreateCI.au3 v0.3 --> ich finde die nicht im Post bzw. ist da ggf noch die "alte" Version ? Sorry, evtl. bin ich auch blind.
Schreibfehler von mir, muss v0.4 heißen - habs korrigert.
Ob du die richtige Version hast, siehst du in der ersten Zeile:
;-- TIME_STAMP 2024-07-16 10:25:32 v 0.4Ich habe deinen Aufruf getestet:
Parameter Text:
text="BEGIN:VCARD^VERSION:4.0^N:Mustermann;Erika;;Dr.;^FN:Dr. Erika Mustermann^ORG:Wikimedia^ROLE:Kommunikation^TEL;TYPE=work,voice;VALUE=uri:tel:+49-221-9999123^EMAIL:erika@mustermann.de^END:VCARD"Hat bei mir funktioniert
-
Neue Version QRCreateCI.au3 v0.4
Multiline per Kommandozeile wurde bisher nicht erkannt. Habe ich nun angepasst.
Standard für Zeilenumbruch ist jetzt (wie bei Batch) ein Caret ^.
Nur wenn ein anderer Platzhalter für den Umbruch verwendet werden soll, muss dieser gesetzt werden - dann aber zwingend als erster Parameter! z.B. QRCreatorCI break="||" text="Zeile 1||Zeile 2||Zeile 3"Für den (möglichen) Fall, dass man Text ohne Umbruch aber mit dem Standard-Platzhalter für Umbruch (^) ausgeben möchte, ist (wiederum als erster Parameter) break=none erforderlich!
-
OK, konnte jetzt testen.
Stimmt - Multiline wurde bisher nicht erkannt. Habe ich geändert und werde gleich den Thread dazu aktualisieren.
Standard für Zeilenumbruch ist jetzt (wie bei Batch) ein Caret ^.
Nur wenn ein anderer Platzhalter für den Umbruch verwendet werden soll, musst du diesen bekannt geben - dann aber zwingend als ersten Parameter! z.B. QRCreatorCI break="||" text="Zeile 1||Zeile 2||Zeile 3"Für den (möglichen) Fall, dass du Text ohne Umbruch aber mit dem Standard-Platzhalter für Umbruch (^) ausgeben möchtest, ist wiederum als erster Parameter break=none erforderlich!
-
Ich nehme an, du meinst meine UDF:
ThemaQRCode.au3 & QRCodeUI.au3 & QRCreatorCI.au3 mit aktueller quricol.dll (32 & 64 bit) integriert
Vor langer Zeit hatte ich einen QR-Code Creator erstellt. Inzwischen sind die dll in neuer Version verfügbar.
Ich habe jetzt als Basis die QRCode.au3 erstellt- _QR_generatePNG
Generates the QR-Code as PNG file for the passed text. - _QR_generateBMP
Generates the QR-Code as BMP file for the passed text. - _QR_getHBitmap
Creates a HBITMAP handle for the QR-Code for the passed text. - _QR_copyToClipboard
Copies the QR-Code picture for the passed text to the clipboard. - _QR_FileDefault
Generates a default filename
BugFix1. Mai 2020 um 14:34 Dann zeige doch bitte mal dein Skript, das zum Fehler führt.
EDIT:
Kann jetzt aber auch nicht testen. Mit meinem jetzigen Rechner (Win 11) läuft die CMD-Version gar nicht (Dateigröße immer 0) und die UI zeigt das Vorschaufenster nicht richtig an (Bild mal da - mal nicht, Ruckeln am Slider hilft manchmal
)
Keine Ahnung, was da jetzt zwischen Win7 und Win11 passiert ist. - _QR_generatePNG
-
das war ich selbst.
Leider hat das eigentliche ListView-Control von alldem keine Ahnung. AutoIt speichert zwar die Control-ID im Eintrag, der Speicherort hat aber für das ListView-Control keine besondere Bedeutung.
Das ist mir jetzt unklar. Was meinst du mit Speicherort?
Die Informationen stehen alle über verschieden Funktionen zur Auswertung bereit. Egal, ob ich als Auslöser dem Listview oder dem Listview-Item eine Event-Funktion zuordne.
Das Listview-Control wird bei Klick auf ein Item informiert und dieses Ereignis liefert mir per GuiCtrlRead(Listview-Control-ID) die Item-Ctrl-ID.
Mit GUICtrlRead($CtrlID) erfahre ich den Inhalt des kpl. Item. Item-Index erfahre ich mit GUICtrlSendMsg(...).
Oder alternativ mit den UDF-Funktionen dafür, in denen diese Abfragen komprimiert sind.Ich würde sagen, sie sind ebensogut verwertbar wie die anderen Controls, wenn man die zugehörigen UDFs einsetzt.
War vielleicht etwas unklar ausgedrückt, ich bezog mich da auf die Fülle der zur Verfügung stehenden Parameter.
P.S. casi4712 Sorry, ich wollte deinen Thread jetzt nicht für Listview-Diskussionen kapern.
-
Wenn du Sleep kpl. raushaben möchtest, würde ich nur mit AdlibRegister arbeiten (hier mal so gestaltet, dass es mit der konsole funktioniert):
AutoIt
Alles anzeigenGlobal $TimerShow $dauermeldung = 5000 $intervallmeldung = 60000 - $dauermeldung ;#### AdlibRegister(checkMeldung, $intervallmeldung) ; zum Beenden HotKeySet('{ESC}', _Exit) While True Sleep(50) WEnd Func _Exit() Exit EndFunc Func checkMeldung() Local $aInfo[] = ['ALARM', 'Kein ALARM'] AdlibUnRegister(checkMeldung) Local $AlarmInfo = $aInfo[Random(0,1,1)] ; hier gehört die Überprüfung auf Alarmzustand rein $TimerShow = TimerInit() ;~ GUICtrlSetData($lbl_Alarm, $AlarmInfo) ConsoleWrite('[check]' & @CRLF) ConsoleWrite($AlarmInfo & @CRLF) AdlibRegister(_ShowMsg) EndFunc ;==>checkMeldung Func _ShowMsg() If TimerDiff($TimerShow) < $dauermeldung Then Return ;~ GUICtrlSetData($lbl_Alarm, '[check ended]') ConsoleWrite('[check ended]' & @CRLF) AdlibUnRegister(_ShowMsg) AdlibRegister(checkMeldung, $intervallmeldung) ; jetzt ist die gesamte Intervall-Zeit um ($intervallmeldung -$dauermeldung +$dauermeldung) EndFunc
-
Warum die WMI-Abfrage mittels Windows PowerShell durchführen?
Erfahrungsgemäß ist die Nutzung des WMI-Objektes in AutoIt etwas "behäbig", sodass der Umweg über PS durchaus einen Vorteil bringen kann. Muss man einfach testen, was zur entsprechenden Abfrage am besten passt.
-
Alles, was mit Klicks im ListView-Bereich zu tun hat, wird schnöde unter den Tisch gekehrt. Das gilt sowohl für den GetMsg- als auch für den OnEvent-Modus.
Wer hat dir denn diesen Bären aufgebunden?
Listview sind die am effektivsten verwertbaren Control überhaupt.
Bsp OnEvent:
EDIT:
Da du direkt die Nativen Funktionen angesprochen hast, habe ich vergleichsweise sowohl Nativ als auch Listview-UDF eingebaut (Zeile #13/14 entsprechend aus/kommentieren):AutoIt
Alles anzeigen#include <GUIConstantsEx.au3> #include <StringConstants.au3> #include <GuiListView.au3> AutoitSetOption('GUIOnEventMode', 1) Global $hGui = GUICreate('Test LV', 500, 500) GUISetOnEvent($GUI_EVENT_CLOSE, _Exit) Global $cLV = GUICtrlCreateListView('A|B|C', 10, 10, 400, 400) For $i = 1 To 10 GUICtrlCreateListViewItem(Stringformat('%i-1|%i-2|%i-3|', $i, $i, $i), $cLV) ;~ GUICtrlSetOnEvent(-1, _ItemClick) GUICtrlSetOnEvent(-1, _ItemClick_Native) Next Global $hLV = GUICtrlGetHandle($cLV) GUISetState() While True Sleep(250) WEnd Func _ItemClick() Local $iIndex = _GUICtrlListView_GetSelectedIndices($hLV) Local $sItem = _ 'Index: ' & $iIndex & @CRLF & _ 'Item Ctrl-ID: ' & @GUI_CtrlId & @CRLF & _ 'Item Text: ' & _GUICtrlListView_GetItemTextString($hLV, $iIndex) & @CRLF & _ 'Column 1: ' & _GUICtrlListView_GetItemText($hLV, $iIndex, 0) & @CRLF & _ 'Column 2: ' & _GUICtrlListView_GetItemText($hLV, $iIndex, 1) & @CRLF & _ 'Column 3: ' & _GUICtrlListView_GetItemText($hLV, $iIndex, 2) ConsoleWrite($sItem & @CRLF & @CRLF) EndFunc Func _ItemClick_Native() Local $CtrlID = GUICtrlRead($cLV) Local $sItem = GUICtrlRead($CtrlID) Local $aSubItem = StringSplit($sItem, Opt('GUIDataSeparatorChar'), BitOR($STR_ENTIRESPLIT,$STR_NOCOUNT)) Local $sOut = _ 'Index clicked: ' & GUICtrlSendMsg($cLV, $LVM_GETNEXTITEM, -1, $LVNI_SELECTED) & @CRLF & _ 'Sub-Item clicked: ' & _SubItem_Clicked($cLV, $CtrlID) & @CRLF & _ 'Item Ctrl-ID: ' & $CtrlID & @CRLF & _ 'Item Text: ' & $sItem & @CRLF & _ 'Column 1: ' & $aSubItem[0] & @CRLF & _ 'Column 2: ' & $aSubItem[1] & @CRLF & _ 'Column 3: ' & $aSubItem[2] ConsoleWrite($sOut & @CRLF & @CRLF) EndFunc Func _SubItem_Clicked($_cLV, $_ID) Local $xClicked = GUIGetCursorInfo()[0] ; -- clicked x-position -- Local $hHeader = HWnd(GUICtrlSendMsg($_cLV, $LVM_GETHEADER, 0, 0)) ; -- count columns -- ; $HDM_GETITEMCOUNT = 0x1200 Local $aCall = DllCall("user32.dll", "lresult", "SendMessageW", "hwnd", $hHeader, "uint", 0x1200, "wparam", 0, "lparam", 0) Local $iCol = $aCall[0] Local $iXLeft = ControlGetPos($hLV, '', 0)[0], $iW For $i = 0 To $iCol -1 ; -- comparison xClicked inside each column $iW = GUICtrlSendMsg($_cLV, $LVM_GETCOLUMNWIDTH, $i, 0) If $xClicked >= $iXLeft And $xClicked <= $iXLeft + $iW Then Return $i $iXLeft += $iW Next Return -1 EndFunc Func _Exit() Exit EndFunc
Und mit der Listview-UDF kannst du jede erdenkliche Info rausziehen.
-
dass es nicht möglich ist die GUICtrlSetOnEvent zusätzlich dazu zu bringen die Links auszulesen und diese dann zu öffnen. Wahrscheinlich kommt sich das dann in die Quere?
Das GUICtrlSetOnEvent ruft eine von dir bestimmte Funktion auf. Was du in dieser Funktion alles veranstaltest, liegt doch letztlich nur an dir.
-
Der korrekte Pfad lautet: C:\Users\USERNAME\AppData\Local\AutoIt v3\SciTE
-
Dir geht es eher um die Einstellungen von SciTE. Die sind in den properties Dateien hinterlegt. Aber nicht die im Programmordner, sondern unter /AppData/Local - wenn ich das grad richtig im Kopf habe. Von dort den Zweig SciTE kopieren und du hast dieselben Settings.
-
inwiefern kann mir Strinformat bei solchen Aufggaben helfen?
Mit Stringformat kannst du Kommandozeilenbefehle genau in der Form schreiben, wie sie angefordert werden. Für die einzusetzenden Werte gibt es Platzhalter (die in diverser Form Formatierung erzeugen können) und deine Inhalte fügst du in ihrer Reihenfolge am Ende hinzu.
Simples Bsp.:
-
dass mit den vielen '"''" kann einen schon wahnsinnig machen
Ja, bei dieser Escaperei verliert man leicht den Überblick. Daher immer wieder mein Tipp: StringFormat.
-
Vielleicht solltest du aus dem Script eine Smartphone-App basteln
Haha - die Idee ist mir tatsächlich auch gekommen. Allerdings nicht weil das Tool als Must-Have auf jedes Smartphone sollte, sondern da hätte ich mal die Möglichkeit zu testen, ob das mit der Lua-Execute-App tatsächlich funktioniert. Würde das also in Lua ausführen.
Wer weiß, vielleicht packts mich ja noch. 😚
-
Der Hauptgrund, warum ich das mit einem Programm machen wollte: Zwei nebeneinander liegende Räume, doppelflügelige Tür dazwischen. Räume unterschiedlich lang. Ziel: Von dieser Tür aus sollte ein gespiegeltes Verlegemuster sein. Also beidseitig Probiererei. 😁
-
Diele ist Vollholz und hat nicht direkt was mit Laminat zu tun. Das können zwei verschiedene Produkte sein.
Nun, ich wollte nicht "Einzelnes-Laminat-Dingens" schreiben. 😂 Und in Beschreibungen habe ich "Dielen" gefunden. Dass eine Diele ohne weiteren Kontext als Langes Brett mit Nut und Feder zu sehen ist, ist schon klar. 😊
-
Ich habe gerade 3 Räume, in denen ich Laminat verlegen muss. Um besser mit den Maßen jonglieren zu können, habe ich mir jetzt diesen Calculator erstellt.
Die Länge des ersten Teils muss nur eingegeben werden, wenn keine Diele in voller Länge verwendet wird, das wird dann automatisch eingefügt. Wenn im Ergebnis untermaßige Teile erscheinen (rot markiert) muss durch Anpassen der Größe für das erste Teil korrigiert werden.
Bei der Berechnung für die zweite Reihe wird zuerst versucht, das Restteil der ersten Reihe zu verwenden. Wenn Länge von Startteil und Endteil zusammen länger sind als eine volle Länge + Versatz, wird die Startlänge so angepasst, dass ein ganzes Teil am Ende zum Einsatz kommen kann.
Analoger Ablauf für die Breite.
Es lassen sich auch nur Länge oder nur Breite berechnen. Beide Berechnungen finden in eigenen Funktionen statt. Sind dafür keine Daten eingegeben, werden diese einfach nicht ausgeführt.
Hinweis:
Den Längenverlust durch die Sägeblattbreite habe ich vernachlässigt. Selbst bei einem sehr breiten Schnitt von 3 mm wären das pro Seite nur 1,5 mm Versatz - das verschwindet ungesehen unter der Wandleiste.Also, falls ihr demnächst auch was zu verlegen habt - Viel Spaß damit.
EDIT:
Vielleicht nicht ganz unwichtig, ich habe als Verlegemuster den "Englischen Verband" zugrunde gelegt.Falls durch ungünstige Raummaße zu viel Verschnitt entsteht, dann lieber im Wilden Verband verlegen (Wie von Andy in Post 5 beschrieben).
-
Damit sieht man eindeutig womit man es zu tun hat.
Hab ich jetzt (ähnlich) ergänzt.
Btw. - sehr unglücklich finde ich, dass eine ohne Inhalt deklarierte Variable als Typ "String" erkannt wird. Automatische Vorbelegung mit Null wäre ein Träumchen.
-
Ausgabe des Inhalts einer Map als Schlüssel-Wert-Paare in die Konsole.
Für nicht darstellbare Werte wird deren Typ ausgegeben.Edit: Ich habe mal die Markierung für String-Werte mit eingefügte. Danke für den Hinweis Mars
AutoIt
Alles anzeigen; #FUNCTION# ======================================================================================= ; Name ..........: _ConsoleWriteMap ; Description ...: Writes the content of a map as key-value pairs to the console. ; ...............: For values that cannot be displayed, their type is specified. ; Syntax ........: _ConsoleWriteMap($_m) ; Parameters ....: $_m - The map to be displayed. ; Return values .: None ; Author ........: BugFix ; ================================================================================================== Func _ConsoleWriteMap(ByRef $_m) Local $aC[] = ['-> ', '>> '], $n = 0, $sType, $vValue Local $sOut = StringFormat(' %-20s%s-- VALUE --\n', '-- KEY --') For $k In MapKeys($_m) $n = Abs($n -1) $sType = VarGetType($_m[$k]) Switch $sType Case 'Array', 'Map', 'Object', 'DLLStruct', 'Function', 'UserFunction' $vValue = $sType Case 'Keyword' $vValue = (IsKeyword($_m[$k]) = 1 ? 'Default' : 'Null') Case 'String' $vValue = '"' & $_m[$k] & '"' Case Else $vValue = String($_m[$k]) EndSwitch $sOut &= StringFormat('%s%-20s%s%s\n', $aC[$n], $k, $vValue) Next ConsoleWrite($sOut & @CRLF) EndFunc
AutoIt
Alles anzeigenLocal $a[] = [1,2,3], $m0[], $o = ObjCreate('Scripting.Dictionary'), $nothing Local $m[] $m.Arr = $a $m.Map = $m0 $m.Obj = $o $m.String = 'Bla' $m.Num = 15 $m.NumStr = "15" $m.Empty = $nothing $m.Struct = DllStructCreate('double') $m.Ptr = DllStructGetPtr($m.Struct) $m.Hwnd = WinGetHandle('[ACTIVE]') $m.Null = Null $m.Def = Default $m.Func = MsgBox $m.UserFunc = _ConsoleWriteMap _ConsoleWriteMap($m)