Beiträge von BugFix
-
-
Bin gerade nicht am PC, aber suche mal im EN Forum nach "TreeviewTab".
-
Wenn es nicht fix sein soll, ist die einfachste Lösung ein Treeview mit Checkboxen.
Kannst du jederzeit beliebig verändern.
-
Die Prozedur "getItem" liefert nicht mehr das Item zurück, sondern immer nil.
Hmm, hab mal nachgesehen, die Methode gibt es in den Events nicht mehr. Allgemein ist sie nur vordefiniert, da sie von den verschiedenen Modulen jeweils überschrieben wird. Mal schauen, wie man das lösen kann.
-
Erste Resultate:
- Das neue EventManagement ist nur relevant für selbst definierte Events. Hier also nicht von Interesse, da StandardEvents Verwendung finden.
- Die Events funktionieren tadellos.
- Das Problem ist deine Prozedur getTree(). An irgendeiner Stelle tritt ein Fehler mit möglichem nil auf. M.M. nach ist der
Parameter item der Verursacher. Bisher konnte ich die Prozedur noch nicht ans Laufen bringen - aber ich probiere weiter.EDIT:
Verursacher ist: tree. Beim Aufruf von tree.getRootItem crasht die Funktion, weil tree nil ist.
Demzufolge ist bereits der Aufruf von tvItem.getTreeCtrl innerhalb der Events nicht erfolgreich. Deshalb sah es auch so aus, als seien diese die Schuldigen.
-
Habe mal getestet. Also ich bekomme auch nicht ein einziges Event mehr zum reagieren.
Was ich im Bsp. wHyperlink erst übersehen hatte ist folgendes:
Codeif self.mIsMouseHover and isPressed: if self.mUrl.len != 0: # provide a chance let the user to veto the action. let event = Event(window=self, msg=wEvent_OpenUrl) if not self.processEvent(event) or event.isAllowed: ShellExecute(0, "open", self.mUrl, nil, nil, SW_SHOW) self.mIsVisited = trueMit Event() und Übergabe der Msg wird eine Variable instanziert. Aber deren Anwendung ist mir schleierhaft.
Wenn man wenigstens einen Sinn in diesem neuen EventManagement erkennen könnte. Der Satz aus dem changelog.md:
Zitat
All dies bedeutet, dass die GUI-Controls und ihr Ereignis leichter als Plugin-Modul entworfen werden könnenklingt momentan für mich etwas höhnisch.
Momentan bin ich beim Status: "Event Verarbeitung ist nicht mehr möglich".
-
Irgendwie will das bei mir nicht funktionieren oder ich bin zu blöd dafür.
Wenn ich das so ändere, passiert beim anklicken der Items gar nichts:
Ich hatte das bisher nur theoretisch betrachtet, da ich noch bei wNim v0.10.2 bin.
Wollte gerade updaten, um das Bsp. mal selbst zu erstellen - aber ich kann (warum auch immer) nicht updaten:
nimble update wnim ---> Error: Package list with the specified name not found.
Muss ich erst mal auf Fehlersuche gehen.

EDIT:
Habe die Version jetzt einfach mit der Git-Adresse installiert. Nun mach ich mich mal an die Events.
-
Aber ich verstehe nicht, wie ich das jetzt auf das neue System umstellen soll.
Hat jemand eine Idee?
Im Bsp. wHyperlink.nim ist das recht gut gezeigt.
Code
Alles anzeigen# Define ourself event type, wCommandEvent-derived event by default propagate upward type wMyLinkEvent = ref object of wCommandEvent # Use wEventRegister macro to define the event message wEventRegister(wMyLinkEvent): wEvent_OpenUrl ... ... # wEvent_OpenUrl will propagate upward, so we can catch it from it's parent window. panel.wEvent_OpenUrl do (event: wEvent): if not event.ctrlDown: event.veto statusBar.setStatusText("press ctrl key and then click to open the url.") -
Ich erledige das heute abend, wenn ich im Hotel bin.
-
Nein, mein englisch ist zu schlecht dafür.
Ich erledige das heute abend, wenn ich im Hotel bin.
-
Hast du auch auf GitHub beim Autor ein Issue gemeldet? Er reagiert recht zügig.
-
So scheint es jetzt zu funktionieren:
Vielleicht praktischerweise gleich "einpacken" in eine Funktion (wenn du den Grafikoverhead nicht möchtest, reicht es "winim/lean" einzubinden).:
Code
Alles anzeigenimport winim/lean proc Call_FileIconInit(): WINBOOL = type fii = proc(fRestoreCache: WINBOOL): WINBOOL {.gcsafe, stdcall.} let shell32 = LoadLibrary("shell32.dll") pAddr = GetProcAddress(shell32, cast[LPCSTR](660)) if IsBadCodePtr(pAddr): return FALSE else: let FileIconInit = cast[fii](pAddr) return FileIconInit(TRUE) -
Aber wie geht das in Nim?
Probier mal
Codeinclude winim/[inc\winuser] let dll = newWideCString("shell32.dll", 11) shell32 = LoadLibrary(cast[LPCWSTR](dll)) dllIndex = "660" dllIndexLPCSTR =cast[LPCSTR](newWideCString(dllIndex, dllIndex.len)) let FileIconInit = GetProcAddress(shell32, dllIndexLPCSTR)Interessanter Link: http://www.catch22.net/tuts/win32/system-image-list#
-
Ich hatte bereits die erste Variante dieses Skriptes im Hilfe-Übersetzung-Thread geposted.
In der Version war nur ANSI-Text übersetzbar. Ich habe das jetzt angepasst, damit auch UTF8 übersetzt werden kann.
DeepL fügt den zu übersetzenden Text mit in die Adresszeile ein, somit ist es möglich den Text vorab aufzubereiten und die Seite mit Text aufzurufen. Der Text wird jedoch nicht nach URL Regeln maskiert, sondern nach einem eigenen System der Website, welches ich auf den Text im Skript anwende.
Zur Anwendung:
- Skript an einen (globalen) Hotkey eurer Wahl binden (für Maus-Freunde geht natürlich auch ein Button auf der Schnellstartleiste
) - zu übersetzenden Text markieren und in die Zwischenablage kopieren
- Hotkey aufrufen (oder Button klicken)
- Website (DeepL) öffnet sich mit eurem Text und der Übersetzung
- von der Webseite (ggf. noch händisch korrigiert) über den Copy-Button die Übersetzung holen
In der Standardeinstellung wird von Englisch nach Deutsch übersetzt.
Man kann durch Parameteraufruf des Skriptes die Von/Zu-Spracheinstellungen ändern:
Bsp.:
- DeepLConvert.exe switch Die Standardsprachen werden bei Von/Zu getauscht auf: Deutsch zu Englisch.
- DeepLConvert.exe to_sp Die Von-Sprache bleibt Englisch, nur die Zu-Sprache wechselt - hier zu Spanisch. (Suffix "to_" & Sprache)
- DeepLConvert.exe nl Die Zu-Sprache bleibt Deutsch, nur die Von-Sprache wechselt - hier auf: von-Niederländisch.
- DeepLConvert.exe pt it Von- und Zu-Sprache wechseln - hier von Portugiesisch zu Italienisch.
AutoIt: DeepLConvert.au3
Alles anzeigen;-- TIME_STAMP 2020-07-29 13:56:30 Opt('MustDeclareVars', 1) #cs Liste zu maskierender Zeichen Zeichen Ascii DeepL-Zeichen ' ' 32 '%20' '#' 35 '%23' '$' 36 '%24' '%' 37 '%25' '&' 38 '%26' '+' 43 '%2B' ',' 44 '%2C' '/' 47 '%5C%2F' ':' 58 '%3A' ';' 59 '%3B' '=' 61 '%3D' '?' 63 '%3F' '[' 91 '%5B' '\' 92 '%5C%5C' ']' 93 '%5D' '^' 94 '%5E' '`' 96 '%60' '{' 123 '%7B' '|' 124 '%5C%7C' '}' 125 '%7D' #ce #cs Verfügbare Sprachen de Deutsch en Englisch fr Französisch sp Spanisch pt Portugiesisch it Italienisch nl Niederländisch pl Polnisch ru Russisch ja Japanisch zh Chinesisch #ce Global $LangFrom = "en" Global $LangTo = "de" Global $sConvert = _DeepL_Convert(ClipGet()) Global $sCmd = "https://www.deepl.com/translator#" Switch $CMDLINE[0] Case 0 ; Standard: EN-->>DE ; nichts Case 1 If $CMDLINE[1] = "switch" Then ; Wechsel zwischen From/To, aber Standardsprachen bleiben $LangFrom = "de" $LangTo = "en" ElseIf StringLeft($CMDLINE[1], 2) = "to" Then ; From bleibt EN, nur To wird gesetzt $LangTo = StringTrimLeft($CMDLINE[1], 3) ; Param übergeben als: "to_" & Language Else ; anderer Parameter für "From" übergeben, "To" bleibt "DE" $LangFrom = $CMDLINE[1] EndIf Case 2 ; sowohl From als auch To erhalten andere Sprache zugewiesen $LangFrom = $CMDLINE[1] $LangTo = $CMDLINE[2] EndSwitch ; sicher gehen, dass Sprachkürzel als Kleinbuchstaben verwendet werden $LangFrom = StringLower($LangFrom) $LangTo = StringLower($LangTo) ; Befehl zum Aufruf der Website bilden $sCmd &= StringFormat("%s/%s/%s", $LangFrom, $LangTo, $sConvert) ; Seitenaufruf ShellExecute($sCmd) Func _DeepL_Convert($s) ; Annehmen, dass $s UTF8 ist und in ANSI wandeln (falls $s ASCII/ANSI ist, schadet es nicht) Local $sAnsi = BinaryToString(StringToBinary($s, 4), 1) Local $aData = StringSplit($sAnsi, "") Local $sRet = '', $asc For $i = 1 To $aData[0] $asc = Asc($aData[$i]) Switch $asc Case 32, 35 To 38, 43, 44, 58, 59, 61, 63, 91, 93, 94, 96, 123, 125 $sRet &= '%' & Hex($asc,2) Case 47, 92, 124 $sRet &= '%5C%' & Hex($asc,2) Case Else $sRet &= $aData[$i] EndSwitch Next ; wieder von ANSI in UTF8 wandeln Return BinaryToString(StringToBinary($sRet, 1), 4) EndFunc - Skript an einen (globalen) Hotkey eurer Wahl binden (für Maus-Freunde geht natürlich auch ein Button auf der Schnellstartleiste
-
Vielleicht kann man ja mit einem kleinen Tool zur Mithilfe animieren.

Das folgende Skript kompilieren und an einen Hotkey eurer Wahl binden.
Anwendung:
- zu übersetzenden Text markieren und in die Zwischenablage einfügen
- Hotkey aufrufen
- Website (DeepL) öffnet sich mit eurem Text und der Übersetzung
- von der Webseite (ggf. noch händisch korrigiert) über den Copy-Button die Übersetzung holen
- Einfügen >> Fertig!
Grundsätzlich braucht auf DeepL nicht angegeben werden, welche Ausgangssprache übergeben wird (automatische Erkennung). Ich habe EN-DE als Voreinstellung. Mit dem Tool kann aber über Parameteraufruf festgelegt werden, falls andere Sprachen Verwendung finden sollen. Ist aus dem Code ersichtlich, wie die Parameter zu nutzen sind.
Da DeepL eine von üblicher url Maskierung abweichende Schreibweise verwendet, wird das im Skript konvertiert.
EDIT
Da hatte ich doch noch im Parameterblock einen Fehler. Bitte korrigieren - ich habs markiert.
EDIT 2:
Ich habe die aktuelle Version eingefügt.
AutoIt
Alles anzeigen;-- TIME_STAMP 2020-07-29 13:56:30 Opt('MustDeclareVars', 1) #cs Liste zu maskierender Zeichen Zeichen Ascii DeepL-Zeichen ' ' 32 '%20' '#' 35 '%23' '$' 36 '%24' '%' 37 '%25' '&' 38 '%26' '+' 43 '%2B' ',' 44 '%2C' '/' 47 '%5C%2F' ':' 58 '%3A' ';' 59 '%3B' '=' 61 '%3D' '?' 63 '%3F' '[' 91 '%5B' '\' 92 '%5C%5C' ']' 93 '%5D' '^' 94 '%5E' '`' 96 '%60' '{' 123 '%7B' '|' 124 '%5C%7C' '}' 125 '%7D' #ce #cs Verfügbare Sprachen de Deutsch en Englisch fr Französisch sp Spanisch pt Portugiesisch it Italienisch nl Niederländisch pl Polnisch ru Russisch ja Japanisch zh Chinesisch #ce Global $LangFrom = "en" Global $LangTo = "de" Global $sConvert = _DeepL_Convert(ClipGet()) Global $sCmd = "https://www.deepl.com/translator#" Switch $CMDLINE[0] Case 0 ; Standard: EN-->>DE ; nichts Case 1 If $CMDLINE[1] = "switch" Then ; Wechsel zwischen From/To, aber Standardsprachen bleiben $LangFrom = "de" $LangTo = "en" ElseIf StringLeft($CMDLINE[1], 2) = "to" Then ; From bleibt EN, nur To wird gesetzt $LangTo = StringTrimLeft($CMDLINE[1], 3) ; Param übergeben als: "to_" & Language Else ; anderer Parameter für "From" übergeben, "To" bleibt "DE" $LangFrom = $CMDLINE[1] EndIf Case 2 ; sowohl From als auch To erhalten andere Sprache zugewiesen $LangFrom = $CMDLINE[1] $LangTo = $CMDLINE[2] EndSwitch ; sicher gehen, dass Sprachkürzel als Kleinbuchstaben verwendet werden $LangFrom = StringLower($LangFrom) $LangTo = StringLower($LangTo) ; Befehl zum Aufruf der Website bilden $sCmd &= StringFormat("%s/%s/%s", $LangFrom, $LangTo, $sConvert) ; Seitenaufruf ShellExecute($sCmd) Func _DeepL_Convert($s) ; Annehmen, dass $s UTF8 ist und in ANSI wandeln (falls $s ASCII/ANSI ist, schadet es nicht) Local $sAnsi = BinaryToString(StringToBinary($s, 4), 1) Local $aData = StringSplit($sAnsi, "") Local $sRet = '', $asc For $i = 1 To $aData[0] $asc = Asc($aData[$i]) Switch $asc Case 32, 35 To 38, 43, 44, 58, 59, 61, 63, 91, 93, 94, 96, 123, 125 $sRet &= '%' & Hex($asc,2) Case 47, 92, 124 $sRet &= '%5C%' & Hex($asc,2) Case Else $sRet &= $aData[$i] EndSwitch Next ; wieder von ANSI in UTF8 wandeln Return BinaryToString(StringToBinary($sRet, 1), 4) EndFuncTweaky Du kannst ja in deinem Startpost hierauf verlinken.
-
Neue Dateien 08
Erledigt.
@Alle - vor allem auch an Anfänger:
Kaum etwas bietet einen größeren Lerneffekt als eine Übersetzung:
- Man muss jedes Wort lesen
- Man muss jedes Wort verstehen
- Man lernt eine Vielzahl von Funktionen kennen, deren Existenz einem sonst u.U. verborgen bleibt.
Das Übersetzen ist kein Hexenwerk. Es gibt außer Google auch noch höherwertige Übersetzungsseiten (https://www.deepl.com/translator). Und wenn dann noch Unsicherheiten sind, kann man den Part ja markieren und hier posten mit der Bitte, dass noch jemand anders drauf schaut.
Unabhängig davon, dass ich selbst die deutsche Hilfe nicht nutze, halte ich sie dennoch für sinnvoll und möchte somit eine Lanze dafür brechen, dass sich der Eine oder Andere doch mal ein paar Minuten nimmt für diese (zugegeben oft etwas trockene) Fleißarbeit.
Übrigens, was den Zeitaufwand angeht: Für die Übersetzung des hier geposteten Parts habe ich ca. 20 Minuten benötigt. (Die meiste Zeit geht fürs Entpacken/Packen drauf
). -
Neue Dateien 08
Neue Dateien 09
Neue Dateien 10
OK, habe mir das mal reserviert.
-
Was meinst du mit "COM bis Error zusammenpacken"
Wenn du in die Hilfe schaust, sind Untergliederungen bei WinAPI mit COM beginnend (Ordnername).
Und alles, was bis inkl. Error-Ordner ist würde ich erst mal nehmen.
-
Falls du eine bestimmte Funktion bzw. Beispiel übersetzen willst, welches ich nicht hochgeladen habe, einfach melden.
Ja, reich mal einen Block WinAPI rüber. Kannst ja erst mal alle Funktionen von COM bis Error zusammenpacken.
-
Bei "DllStructGetPtr" habe ich deine Anmerkugnen gelesen und verstanden. In der au3-Datei ist das Beispiel jedoch nicht mehr vorhanden. Kannst du eis noch ergänzen?
Ooops, da hatte es bei mir einen falschen Verweis im Dateisystem gegeben - eine Premiere. Da habe ich glatt die Configdatei meines FTP-Clients geladen.
Aber den anderen 2 Usern, die die Datei auch heruntergeladen haben kann ich mitteilen: Keine der dort gespeicherten Zugangsdaten ist gültig.

Ich hänge das Bsp. nochmal an.
Schön, dass du deinen 10.000 Post für die Deutsche Hilfe aufgehoben hast

Selbstredend, dauernd habe ich auf den Counter geschielt und gewartet, dass ich endlich eine Übersetzung posten kann.

EDIT:
GuiGetMsg hatte ich vergessen anzuhängen