1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. Oscar

Beiträge von Oscar

  • [Nim] Gibt es sowas wie @GUI_CtrlId in Nim

    • Oscar
    • 4. Mai 2020 um 15:11
    Zitat von BugFix

    Du kannst jedem Ctrl bei Erstellung eine ID zuweisen. (mit enum, erster Wert wIdUser)

    Für den Frame kannst du einen Event Handler erstellen mit Parameter wEvent.

    Im Handler kannst du dann wEvent.Id abfragen.

    Äh...ja...

    Ich fürchte, ohne Beispiel bin ich da aufgeschmissen.


    Zitat von BugFix

    Da du auf Tastatur reagieren möchtest

    Nee, nix Tastatur. Soll ja eben eine Bildschirm-Tastatur sein (reine Mausbedienung).

  • [Nim] Tooltip für StaticBitmap möglich?

    • Oscar
    • 4. Mai 2020 um 15:08

    Ich hab's selbst rausgefunden.

    Das ist schon peinlich, wie einfach das ist: closeBmp.setToolTip("Fenster schliessen").

    :whistling:

  • Kann mein eigenes Programm nicht löschen - von Avira keine Unterstützung...

    • Oscar
    • 4. Mai 2020 um 11:12
    Zitat von Mars

    Ich schiebe inzwischen einen richtigen Hass auf Antivirenhersteller. Man schreibt für irgendwen ein Tool weil irgendwer unbedingt einen Viewer für auf der Festplatte liegende Binärdaten einer float16 Matrix braucht. Kein Problem, dauert nicht lange. Tool gebaut -> Tool verschickt -> Beim Empfänger wird das Internet deinstalliert, der Atombunker einsatzbereit gemacht, Klopapier gekauft und die Notstromversorgung mit roter Alarmleuchte + Sirene springt an.

    Volle Zustimmung!

    Ich hasse mittlerweile auch alle Antivirenhersteller.

    Ich habe einige meiner AutoIt-Programme an Freunde/Bekannte weitergegeben und nun rufen sie alle Nase lang bei mir an und erzählen mir, dass mein Programm nicht mehr startet.

    Ich sehe (per TeamViewer) nach und entdecke, dass Windows (Defender) mein Programm (ohne Nachfrage) gelöscht hat, weil es der Meinung ist, dass es sich um einen Virus handelt.

    Der Benutzer wird gar nicht mehr gefragt. Einfach löschen und weg. Dem Benutzer wird dann ganz stolz erzählt, vor welchen "Bedrohungen" man ihn wieder beschützt hat. Ganz toll! :cursing::thumbdown:

    Mittlerweile packe ich meine Programme bei meinen Freunden in Unterverzeichnisse von einem Hauptverzeichnis und füge das Hauptverzeichnis zu den Ausnahmen hinzu. Damit der Defender die Programme in Ruhe lässt.

    Das ist sowas von nervig.

  • [Nim] Gibt es sowas wie @GUI_CtrlId in Nim

    • Oscar
    • 4. Mai 2020 um 10:47

    Ich programmiere gerade eine Bildschirm-Tastatur. Für jede "Taste" möchte ich die selbe Prozedur aufrufen und innerhalb der Prozedur dann entsprechend der angeklickten "Taste" unterschiedlich verfahren.

    Dazu brauche ich aber sowas wie @GUI_CtrlId in AutoIt. Gibt es sowas oder wie kann man das Problem sonst lösen?

    Edit: Hier noch ein Testprogramm, wie ich es versucht habe zu lösen (geht nicht):

    Code
    import wNim
    
    const aKeys = [
                  ["Q", "W", "E", "R", "T", "Z", "U", "I", "O", "P", "<-"],
                  ["A", "S", "D", "F", "G", "H", "J", "K", "L", "_", "<-'"],
                  ["Y", "X", "C", "V", "B", "N", "M", ",", ".", "-", "+"]
                  ]
    
    var
      aKeyBtn: array[0..32, wButton]
      iX, iY, iW: int
    
    let app = App()
    let frame = Frame(title="Test", size=(1200, 340))
    let panel = Panel(frame)
    
    proc keyEvent(keyID: int) =
      echo keyID
    
    for i in 0..2:
      iY = 10 + i * 80
      for j in 0..10:
        iX = 10 + i * 30 + j * 100
        case i * 11 + j
        of 10: iW = 150
        of 21: iW = 120
        else: iW = 90
        aKeyBtn[i * 11 + j] = Button(panel, label=aKeys[i][j], pos=(iX, iY), size=(iW, 70), style=wBorderDouble)
        aKeyBtn[i * 11 + j].font = Font(32, faceName="Source Code Pro", weight=wFontWeightBold)
        aKeyBtn[i * 11 + j].wEvent_Button do ():
          keyEvent(i * 11 + j)
    
    frame.center()
    frame.show()
    app.mainLoop()
    Alles anzeigen
  • Kann mein eigenes Programm nicht löschen - von Avira keine Unterstützung...

    • Oscar
    • 4. Mai 2020 um 08:32
    Zitat von autoiter

    Das sagt ja noch nicht viel. Die kompilierten Nim Applikationen weiter zu geben oder zu virsutotal hochzuladen, würde mehr Aufschluss geben.

    Hier mal das Ergebnis von VirusTotal.com:

    virustotal.png

  • Kann mein eigenes Programm nicht löschen - von Avira keine Unterstützung...

    • Oscar
    • 3. Mai 2020 um 19:13
    Zitat von Musashi

    Ich werde momentan wohl leider noch nicht dazu kommen, mich mit Nim auseinanderzusetzen, aber :

    "Wie reagieren die Virenscanner denn auf diese Programme ?"

    Bisher habe ich keinerlei Probleme mit den Exe-Dateien, die mit Nim compiliert wurden (Win 10, Defender).

    Bei AutoIt musste ich mein ganzes AutoIt-Verzeichnis als Ausnahme eintragen. Sogar der Temp-Ordner, der beim compilieren mit AutoIt benutzt wird muss als Ausnahme eingetragen sein, weil der Defender sonst die Datei löscht.

  • MsgBox verlangsamt den Skriptablauf unter Win 10

    • Oscar
    • 3. Mai 2020 um 08:23

    Bei mir sieht das so aus:

    AutoIt
    ;-- TIME_STAMP   2020-05-01 20:50:32
    
    #AutoIt3Wrapper_UseX64=n ; <<<=== Change it to y/n and press <Alt + F5> to start the patched Beta!
    
    ;~ https://autoit.de/thread/86867-msgbox-verlangsamt-den-skriptablauf-unter-win-10/?postID=699015#post699015
    ;~ https://www.autoitscript.com/forum/topic/202270-script-becomes-way-slower-after-a-msgbox-moved/
    ;~ https://www.autoitscript.com/autoit3/files/beta/autoit/win10slow/
    
    ConsoleWrite(StringFormat(';~ %-55s %-10s\n', @AutoItExe, @AutoItVersion))
    
    _Test(False, 0)
    _Test(False, 1)
    _Test(True, 0)
    _Test(True, 1)
    
    Func _Test($bMsgBox = False, $iGUIOnEventMode = 0)
        Local Static $iMsgBox = False
        Local $x = 0, $hTimer = TimerInit()
        AutoItSetOption('GUIOnEventMode', $iGUIOnEventMode)
        If $bMsgBox And $iMsgBox = False Then
            $iMsgBox = True
            MsgBox(0, "", TimerDiff($hTimer), 1, WinGetHandle('[ACTIVE]'))
        EndIf
        For $i = 1 To 500000
            $x += 1
        Next
        ConsoleWrite(StringFormat(';~ Diff = %15s, GUIOnEventMode = %i, $iMsgBox = %i\n', TimerDiff($hTimer), $iGUIOnEventMode, $iMsgBox))
        If $iGUIOnEventMode Then AutoItSetOption('GUIOnEventMode', 0)
    EndFunc
    
    ;~ C:\Program Files (x86)\AutoIt3\autoit3.exe              3.3.14.5  
    ;~ Diff =         79.5305, GUIOnEventMode = 0, $iMsgBox = 0
    ;~ Diff =        206.2244, GUIOnEventMode = 1, $iMsgBox = 0
    ;~ Diff =       1603.9906, GUIOnEventMode = 0, $iMsgBox = 1
    ;~ Diff =        661.7479, GUIOnEventMode = 1, $iMsgBox = 1
    
    ;~ C:\Program Files (x86)\AutoIt3\autoit3_x64.exe          3.3.14.5
    ;~ Diff =         67.9558, GUIOnEventMode = 0, $iMsgBox = 0
    ;~ Diff =        180.7731, GUIOnEventMode = 1, $iMsgBox = 0
    ;~ Diff =       1454.8677, GUIOnEventMode = 0, $iMsgBox = 1
    ;~ Diff =         500.135, GUIOnEventMode = 1, $iMsgBox = 1
    
    ;~ C:\Program Files (x86)\AutoIt3\Beta\autoit3.exe         3.3.15.1
    ;~ Diff =         66.4233, GUIOnEventMode = 0, $iMsgBox = 0
    ;~ Diff =         74.5954, GUIOnEventMode = 1, $iMsgBox = 0
    ;~ Diff =       1161.4274, GUIOnEventMode = 0, $iMsgBox = 1
    ;~ Diff =         73.1219, GUIOnEventMode = 1, $iMsgBox = 1
    
    ;~ C:\Program Files (x86)\AutoIt3\Beta\autoit3_x64.exe     3.3.15.1
    ;~ Diff =         60.8905, GUIOnEventMode = 0, $iMsgBox = 0
    ;~ Diff =         61.1673, GUIOnEventMode = 1, $iMsgBox = 0
    ;~ Diff =       1108.0753, GUIOnEventMode = 0, $iMsgBox = 1
    ;~ Diff =          62.398, GUIOnEventMode = 1, $iMsgBox = 1
    Alles anzeigen
  • [Nim] Tooltip für StaticBitmap möglich?

    • Oscar
    • 2. Mai 2020 um 18:29

    Kann man für ein StaticBitmap irgendwie einen Tooltip setzen?

    Beispiel:

    Code
    import wNim
    
    let app = App()
    let frame = Frame(title="Test")
    let panel = Panel(frame)
    
    let closeImg = Image(r"prog.ico").scale(64, 64)
    let closeBmp = StaticBitmap(panel, bitmap=Bitmap(closeImg), pos=(20, 20))
    closeBmp.wEvent_CommandLeftClick do ():
      frame.close()
    
    frame.center()
    frame.show()
    app.mainLoop()
    Alles anzeigen

    Oder muss man da mit MouseHover etwas Eigenes basteln?

  • [Nim] Kompilieren dauert lange

    • Oscar
    • 1. Mai 2020 um 18:22
    Zitat von BugFix

    Wenn ich mir Videos zu nim ansehe, ist die Kompilierzeit dort sehr kurz. Bei mir dauert selbst ein echo "Hallo Welt!" nicht unter 10 Sekunden.

    Ich hab's gerade mal getestet echo "Hallo Welt!":

    Zitat


    [Done] exited with code=0 in 1.238 seconds

    Also, wenn VSCode wirklich compiliert.

    Achso, ich habe VSCodium, aber da ist ja nur das "nach Hause telefonieren" abgeschaltet.

  • [Nim] und die BASS-Dll

    • Oscar
    • 1. Mai 2020 um 08:20
    Zitat von Bitnugger

    So funktioniert es nicht!
    let sMp3File = "F:\Audio\MP3\CD\Top 3000-4ever\Top 3000-4ever 0401-0500\0458. Albert Hammond - The Free Electric Band (1973).mp3"

    Wenn Du in Nim einen String mit Backslashes hast, dann einfach ein "r" (RawString) davorsetzen:

    let sMp3File = r"F:\Audio\MP3\CD\Top 3000-4ever\Top 3000-4ever 0401-0500\0458. Albert Hammond - The Free Electric Band (1973).mp3"

  • [Nim] und die BASS-Dll

    • Oscar
    • 30. April 2020 um 18:56

    Um mit Nim die BASS-Dll nutzen zu können, ist der Wrapper "Nimbass" von "genotrance" erforderlich (https://github.com/genotrance/nimbass).

    Dort gibt es auch eine Anleitung zum installieren per Nimble.

    Im Prinzip benötigt man aber nur die "bass.dll" und "bass.nim". Im ZIP-Archiv (Anhang) habe ich diese beiden Dateien in den Ordner "nimbass" kopiert.

    Das Nim-Programm zum abspielen einer MP3-Datei sieht dann so aus:

    Code
    import os
    import nimbass/bass
    
    discard BASS_Init(cint(-1), cast[DWORD](44100), cast[DWORD](0), cast[DWORD](0), nil)
    discard BASS_SetVolume(0.9)
    
    var 
        iActive: DWORD
        iLen: QWORD
        iSeconds, iSecondsNow: cdouble
    
    let sMp3File = "Albert Hammond - The Free Electric Band.mp3"
    let cMp3File: cstring = sMp3File
    let hChannel = BASS_StreamCreateFile(false, cMp3File, 0, 0, BASS_STREAM_PRESCAN or BASS_STREAM_AUTOFREE)
    discard BASS_ChannelPlay(hChannel, false)
    iLen = BASS_ChannelGetLength(hChannel, BASS_POS_BYTE)
    iSeconds = BASS_ChannelBytes2Seconds(hChannel, iLen)
    
    while true:
        iActive = BASS_ChannelIsActive(hChannel)
        if iActive != BASS_ACTIVE_PLAYING: break
        iLen = BASS_ChannelGetPosition(hChannel, BASS_POS_BYTE)
        iSecondsNow = BASS_ChannelBytes2Seconds(hChannel, iLen)
        echo "Play: " & $int(iSecondsNow) & " / " & $int(iSeconds)
        sleep(1000)
    discard BASS_ChannelStop(hChannel)
    discard BASS_Free()
    Alles anzeigen

    BASS_StreamCreateFile erwartet einen Pointer auf den Dateinamen, weshalb man den String erst in einen C-String (Char-Array) umwandeln muss.

    Da ich mich mit Nim erst seit ein paar Tagen beschäftige, war da ziemlich viel "trial and error" nötig, aber so funktioniert es zumindest. :)

    Edit: Hier noch eine überarbeitete Version. Die benutzt noch ein paar mehr Funktionen der BASS-dll und ist kommentiert:

    Code
    import os
    import strformat
    import nimbass/bass
    
    # Audiogeraet initialisieren
    discard BASS_Init(cint(-1), cast[DWORD](44100), cast[DWORD](0), cast[DWORD](0), nil)
    
    # Gesamtlautstaerke aendern (0 - 1.0)
    discard BASS_SetVolume(1.0)
    
    # die BASS-dll ist in C geschrieben, deswegen die C-Variablen
    var 
        iLen: QWORD
        iSeconds, iSecondsNow: cdouble
        fBitrate, fVolume: cfloat
    
    # BASS_StreamCreateFile erwartet einen Pointer auf den Dateinamen, deswegen ein C-String (Char-Array)
    let pMp3File: cstring = r"f:\neue MP3s\Bryan Adams - Summer Of 69.mp3"
    
    # MP3-File als Stream in den Speicher laden (wird am Ende automatisch freigegeben)
    let hChannel = BASS_StreamCreateFile(false, pMp3File, 0, 0, BASS_STREAM_PRESCAN or BASS_STREAM_AUTOFREE)
    
    # Lautstaerke (0 - 1.0) fuer den Stream aendern
    discard BASS_ChannelSetAttribute(hChannel, BASS_ATTRIB_VOL, 0.9)
    
    # die durchschnittliche Bitrate auslesen (Pointer auf fBitrate)
    if BASS_ChannelGetAttribute(hChannel, BASS_ATTRIB_BITRATE, fBitrate.addr()):
        echo "Bitrate: " & $int(fBitrate) & " kBit/s"
    
    # so kann man die Laufstaerke fuer den Stream wieder auslesen (Pointer auf fVolume)
    if BASS_ChannelGetAttribute(hChannel, BASS_ATTRIB_VOL, fVolume.addr()):
        echo "Volume: " & fmt"{fVolume:<2.1f}"
    
    # die Laufzeit des Streams auslesen (in Bytes)
    iLen = BASS_ChannelGetLength(hChannel, BASS_POS_BYTE)
    echo "Laenge in Bytes: " & $iLen
    
    # die Laufzeit in Sekunden umrechnen
    iSeconds = BASS_ChannelBytes2Seconds(hChannel, iLen)
    echo "Laenge in Sekunden: " & $int(iSeconds)
    
    if BASS_ChannelPlay(hChannel, false):
        while true:
            case BASS_ChannelIsActive(hChannel) # liefert ein DWORD zurueck
            of BASS_ACTIVE_PLAYING:             # Player noch aktiv
                iLen = BASS_ChannelGetPosition(hChannel, BASS_POS_BYTE)
                iSecondsNow = BASS_ChannelBytes2Seconds(hChannel, iLen)
                echo "Position: " & $int(iSecondsNow) & " / " & $int(iSeconds)
                sleep(1000)                     # eine Sekunde warten 
            of BASS_ACTIVE_STOPPED: break       # Player Stop
            of BASS_ACTIVE_PAUSED: break        # Player Pause
            of BASS_ACTIVE_PAUSED_DEVICE: break # Device Pause
            of BASS_ACTIVE_STALLED: break       # Datenstrom unterbrochen
            else: break                         # ansonsten die While-Schleife beenden
    discard BASS_ChannelStop(hChannel)
    discard BASS_Free()
    Alles anzeigen

    Dateien

    BASStest.zip 164,87 kB – 314 Downloads
  • [Nim] Fragen zu einem Frame (Window)

    • Oscar
    • 30. April 2020 um 11:56

    Nachtrag: Ich habe jetzt einen Wrapper für die BASS-Library gefunden: https://nimble.directory/pkg/nimbass

    Das sieht mir recht vielversprechend aus. Zumal ich mit der BASS-Library schon unter AutoIt gearbeitet habe.

    Da werde ich mich mal reinknien...

  • [Nim] Fragen zu einem Frame (Window)

    • Oscar
    • 30. April 2020 um 11:30
    Zitat von BugFix

    Dafür gibt es das Font Objekt:

    Ok! Also kann man alle im System registrierten Fonts benutzen. Habe "faceName" übersehen.

    Zitat von BugFix

    Standard Anlaufstelle für Module ist: Curated Packages

    Danke, für den Link!

    Ja, Nim ist deutlich umfangreicher/komplexer und natürlich auch leistungsfähiger als AutoIt, aber auch deutlich schwerer zu lernen.

    Man bekommt das nicht alles auf dem Silbertablett serviert (wie bei AutoIt), sondern muss sich alles zusammensuchen.

    Aber meine Fragen sind keineswegs nur so zum lernen. Ich habe mir vorgenommen, mein AutoIt-Galgenraten jetzt in Nim neu zu programmieren.

    Wobei mir auch schon wieder neue Fragen einfallen:

    1. Kann man benötigte Ressourcen (Bilder, Icons, Sounds, Dlls, etc.) mit in die Exe einbinden (ähnlich FileInstall oder "File to Base64 String Code Generator" von UEZ)?

    2. Im Netz habe ich gelesen, dass man ein Programm-Icon für die Exedatei nur mit "rcedit" nachträglich hinzufügen kann (funktioniert). Stimmt das?

    3. Wenn mein Programm fertig ist und ich nichts mehr debuggen will, reicht es dann den Compiler so aufzurufen: nim c -d:release --app:gui MeinProgramm.nim?


    Zitat von water

    Kann ich Foren, die mich sicher nie interessieren werden, ausblenden. Damit ich meinen Käse nur dort poste, wo er auch hingehört

    In einer alten Version der Forensoftware konnte man die (Unter-)Foren noch auswählen (AFAIR).

    Aber jetzt finde ich keine Einstellung dafür mehr.

  • [Nim] Fragen zu einem Frame (Window)

    • Oscar
    • 30. April 2020 um 10:41
    Zitat von water

    Schau mal hier nach: https://www.autoitscript.com/wiki/User_Defined_Functions#Sound

    Äh, nein! Nicht so ganz. :)

    Das ist hier das "Nim"-Unterforum. Ich meinte also eine Sound-UDF für die Programmiersprache "Nim".

  • [Nim] Fragen zu einem Frame (Window)

    • Oscar
    • 30. April 2020 um 04:57
    Zitat von BugFix

    Wie bei Verwendung von DC in AutoIt ist dieser anschliessend wieder freizugeben.

    Ok!

    Ich hab's bei mir auch geändert. Danke!

    Noch drei andere Fragen:

    Kann man bei den Fonts auch einen Monospaced-Font auswählen?

    Und welche Fonts stehen überhaupt zur Verfügung?

    Gibt es eine Sound-UDF?

  • [Nim] Fragen zu einem Frame (Window)

    • Oscar
    • 28. April 2020 um 19:30
    Zitat von BugFix

    Du mußt refresh für das Panel aufrufen. Wenn du nur das Text-Ctrl neuzeichnest bleibt dafür der alte Inhalt noch bestehen, erst mit Neuzeichnen des Panel wird auch das Ctrl neu berechnet.

    Ah, ok!

    Ja, das funktioniert! Danke! :thumbup:

  • [Nim] Fragen zu einem Frame (Window)

    • Oscar
    • 28. April 2020 um 19:14
    Zitat von BugFix

    Oh man, das Standardverfahren zum Erkennen der Events funktioniert ja. Es ist der Dialog, der sich nicht starten ließ!

    Ich wollte Dir auch gerade schreiben, dass das Label jetzt doch als Button funktioniert.

    Ich hatte hier Verschiedenes ausprobiert, verschoben, gelöscht, wiederhergestellt und plötzlich ging es dann.

    Obwohl ich der Meinung bin, dass ich das so schon mal hatte und es nicht funktionierte.

    Hier jetzt mal die Version, die bei mir funktioniert:

    Code
    import wNim
    
    const sTitle = "My Gui-Window"
    
    let app = App()
    let frame = Frame(title=sTitle, size=(640, 480))
    
    frame.icon = Icon(r"prog.ico")
    
    frame.dpiAutoScale:
      frame.minSize = (480, 320)
      frame.maxSize = (1024, 768)
    
    
    let menuBar = MenuBar(frame)
    let statusBar = StatusBar(frame)
    
    let menu = Menu(menuBar, "&File")
    menu.append(wIdExit, "E&xit\tAlt-F4", "Close window and exit program.")
    
    let accel = AcceleratorTable(frame)
    accel.add(wAccelAlt, wKey_F4, wIdExit)
    
    let panel = Panel(frame)
    
    const myJpg = staticRead(r"test.jpg")
    let myImage = Image(myJpg).scale(640, 480)
    let staticbitmap = StaticBitmap(panel, bitmap=Bitmap(myImage))
    
    let staticText = StaticText(staticbitmap, label="Hello, World!", pos=(10, 80))
    staticText.font = Font(14, family=wFontFamilySwiss, weight=wFontWeightBold)
    staticText.cursor = wHandCursor
    staticText.fit()
    
    let button = Button(staticbitmap, label="Font", pos=(0, 80))
    button.cursor = wHandCursor
    
    let button2 = Button(staticbitmap, label="Test", pos=(0, 10))
    button2.cursor = wHandCursor
    
    proc layout() =
      panel.autolayout """
        HV:|-[staticbitmap]-|
        H:|-[staticText]->[button]-|
        H:|-[staticText]->[button2]-|
      """
    
    staticText.wEvent_Paint do ():
      var
        dc = PaintDC(staticText)
        rect = (0, 0, staticText.getBestSize().width, staticText.getBestSize().height)
    
      dc.backgroundTransparent = true
      dc.font = staticText.getFont()
      dc.drawLabel(staticText.label, rect, wCenter)
    
    
    staticText.wEvent_CommandLeftClick do ():
      let textEntryDialog = TextEntryDialog(frame, value=staticText.label,
        caption="Change The Text")
    
      if textEntryDialog.showModal() == wIdOk:
        staticText.label = textEntryDialog.value
        staticText.fit()
        staticText.refresh()
    
    button.wEvent_Button do ():
      let fontDialog = FontDialog(frame, staticText.font)
      fontDialog.color = staticText.foregroundColor
      fontDialog.enableSymbols(false)
      fontDialog.range = 0..72
    
      if fontDialog.showModal() == wIdOk:
        staticText.font = fontDialog.chosenFont
        staticText.foregroundColor = fontDialog.color
        staticText.fit()
        staticText.refresh()
    
    frame.wIdExit do ():
      frame.close()
    
    frame.wEvent_Close do (event: wEvent):
      statusBar.setStatusText("Das Programm wirklich beenden?")
      let dlg = MessageDialog(frame, "Das Programm wirklich beenden?",
        sTitle, wYesNo or wIconQuestion)
    
      if dlg.showModal() != wIdYes:
        event.veto()
      
    panel.wEvent_Size do ():
      layout()
    
    layout()
    frame.center()
    frame.show()
    app.mainLoop()
    Alles anzeigen

    Wobei mir jetzt noch etwas aufgefallen ist, was ich nicht verstehe.

    Wenn ich den Text anklicke, kann ich ihn ja ändern. Wenn ich einen anderen Text eingebe, dann erscheint wieder der weiße Hintergrund. Trotz staticText.refresh(). Wird da nicht die "wEvent_Paint" ausgeführt?

    Und wenn ich die Fontgröße ändere, dann bleibt die Schrift in der kleinen Variante bestehen und es wird die große Variante zusätzlich geschrieben. Ändere ich dann aber die Größe des Fenster bewirkt der Refresh das löschen der kleinen Variante (erwünscht).

    Bei "wEvent_Size" wird ja eigentlich nur die Proc "layout()" aufgerufen. Wenn ich das aber nach der Änderung der Fontgröße manuell tue, dann bleibt es bei der falschen Darstellung. Wahrscheinlich macht "wEvent_Size" wohl noch mehr (im Hintergrund).

    Wie kann ich den Event denn manuell aufrufen?

  • [Nim] Fragen zu einem Frame (Window)

    • Oscar
    • 28. April 2020 um 11:17
    Zitat von BugFix

    So, Resizen und Transparenz konnte ich lösen. Ich habe die Prozedur zum Zeichnen des StaticText-Ctrl überschrieben. Nur Klickevent geht damit (noch) nicht:

    Vielen Dank für Deine Mühe!

    Das sieht schon sehr gut aus. :) :thumbup:

  • [Nim] Fragen zu einem Frame (Window)

    • Oscar
    • 28. April 2020 um 05:03
    Zitat von BugFix

    So, Antwort vom Autor:

    "You can deal with wEvent_Paint event and try to paint what you want. For example:"

    Ein "neu malen" bei WM_PAINT ist jetzt irgendwie nicht das, was ich mir vorgestellt habe. :/

    Dann lässt sich der StaticText nicht mehr als "Button" gebrauchen und man muss das resizen selbst übernehmen.

    Bei AutoIt funktioniert das doch auch einfach durch setzen der "Hintergrundfarbe": GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT).

  • [Nim] Fragen zu einem Frame (Window)

    • Oscar
    • 26. April 2020 um 19:09
    Zitat von BugFix

    Das ist ausnahmsweise einfach. Wir müssen nicht wie in AutoIt denken. Hier ist alles auch ein Fenster. D.h. die Referenz für die Button und alle Ctrl, die über dem Bild liegen sollen, muss dann auch das Bild sein:

    Ah, ok! Das funktioniert! Danke! :thumbup:


    Zitat von BugFix

    Ich habe es mal versucht mit: style=wTransparentWindow und staticText.setTransparent() - beides ohne Erfolg. Bsp. habe ich dazu auch nicht entdecken können.

    Da es wohl nicht trivial ist, habe ich eine Anfrage an den Autor gestellt: https://github.com/khchen/wNim/issues/55

    Oh! Da habe ich wohl etwas aufgedeckt.

    Das mit dem "style=wTransparentWindow" hatte ich auch ausprobiert, aber da das nicht funktionierte, dachte ich, ich frage mal nach.

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™