DialogDesign0R V1.72

Anwendungen, Tools, Userlibs und anderes nützliches.
ccode_new
Beiträge: 1074
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: DialogDesign0R V1.64

Beitrag von ccode_new »

mk-soft hat geschrieben: Die Änderung von ccode_new mit Rückgabe von einem Leerstring ist natürlich Blödsinn (Sorry ccode_new)
Das war auch nicht der eigentliche Sinn.
Der Sinn war eine anpassbare Funktion für die Pfadangaben zu haben und keine fixe Ausgabe von:
GetPathPart(ProgramFilename())

Wie der Name dieser "Pfadanpassungsfunktion" heißt ist mir eigentlich Latte.
In diesen Fall kling aber "GetProgramPath()" ganz brauchbar.

Für Debugging ist eine leere Zeichenkette aber unter MacOS funktionsfähig.

Das eigentliche Problem war aber das:

[ERROR] *** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[0]

BUG:
Unter MacOS darf der Font-Name nicht "" sein.

...weil dadurch ständig das Programm abstürzte und man keine Eingaben in Textfelder vollführen konnte.
Betriebssysteme: MX Linux 19 / Windows 10 / Mac OS 10.15.7 / Android 7.0 ;)

Manchmal muß das Rad neu erfunden werden.
Benutzeravatar
mk-soft
Beiträge: 3312
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: DialogDesign0R V1.64

Beitrag von mk-soft »

Mit leeren Font Name funktioniert es, oder ich habe deine Aussage nicht verstanden.

Code: Alles auswählen

If OpenWindow(0, 0, 0, 222, 130, "SetGadgetFont", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  ;If LoadFont(0, "Arial", 16)
  If LoadFont(0, "", 16)
    SetGadgetFont(#PB_Default, FontID(0))   ; geladenen Arial 16 Zeichensatz als neuen Standard festlegen
  EndIf
  ButtonGadget(0, 10, 10, 200, 30, "Button - Arial 16")
  SetGadgetFont(#PB_Default, #PB_Default)   ; Zeichensatzeinstellungen auf den originalen Standard zurücksetzen
  ButtonGadget(1, 10, 50, 200, 30, "Button - standard")
  If LoadFont(1,"Courier",10, #PB_Font_Bold | #PB_Font_Underline)
    SetGadgetFont(#PB_Default, FontID(1))   ; geladenen Courier 10 Zeichensatz als neuen Standard festlegen
  EndIf
  TextGadget(2, 10, 90, 200, 40, "Bold + underlined Courier 10 Text", #PB_Text_Center)
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
P.S. Underline funktioniert nicht (Bug)
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.7x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf My Webspace
ccode_new
Beiträge: 1074
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: DialogDesign0R V1.64

Beitrag von ccode_new »

mk-soft hat geschrieben:Mit leeren Font Name funktioniert es, oder ich habe deine Aussage nicht verstanden.
Ja, ich verstehe meine Aussage eigentlich auch nicht so richtig.
Dein Beispiel funktioniert.

Ich fasse es noch mal zusammen und deklariere es als BUG.

Wenn ich bei:
\MainFont\Name = ""
den Schriftname weg lasse ist der Bug weg und alles ist gut.

Der Bug lautet:
Unter MacOS darf der Font-Name nicht "" sein. (Nur beim DialogDesign0r von Hex0r)

->Der Fehler wird durch dieser Procedure:
SetGadgetFont(DialogGadget(#Dialog_Main, "LAN_001"), #PB_Default)
in der Else-Verzweigung bei _SetTheme() -> If \MainFont\Name
ausgelöst.

\ MainFont \ Name = ""
Bug with missing font names

The bug is:
Under MacOS the font name must not be "". (Only with DialogDesign0r from Hex0r)

-> The error is caused by this procedure:
SetGadgetFont (DialogGadget (#Dialog_Main, "LAN_001"), #PB_Default)
in the Else branch at _SetTheme () -> If \ MainFont \ Name
triggered.
Betriebssysteme: MX Linux 19 / Windows 10 / Mac OS 10.15.7 / Android 7.0 ;)

Manchmal muß das Rad neu erfunden werden.
Benutzeravatar
HeX0R
Beiträge: 2800
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
2x16Gig Ram
NVIDIA GEFORCE GTX 1060/6Gig
Win10 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2
Kontaktdaten:

Re: DialogDesign0R V1.64

Beitrag von HeX0R »

Ich konnte das zwar nachstellen, aber verstehe immer noch nicht, wieso das überhaupt auftritt.
Leider ist meine macOS VM so unbeschreiblich trääääge (ich habe leider nur AMD Prozessoren, da muss der Intel auch noch emuliert werden...), da macht das Fehlersuchen nicht wirklich Spaß.
Daher habe ich im Moment tatsächlich erst mal die Fontnamen mit Arial ersetzt (den Source gibt's aber noch nicht online).
Die Pfade habe ich auch schon angepasst, aber ich möchte meine ganze Source-Struktur nicht nur wegen mac umbasteln und hoffe noch, dass dieses plistTool das kann.
(Weil dann kann ich einfach entsprechende Kommentare in den Source pflanzen und jeder macOS User muss es nur noch kompilieren).
mk-soft hat geschrieben:P.S
Hatte deinen gelöschten Beitrag in "plistTool" noch gelesen :wink:
Ähm ja, ich hatte im Nachhinein entschieden meine Meinung besser für mich zu behalten ;)
ccode_new
Beiträge: 1074
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: DialogDesign0R V1.64

Beitrag von ccode_new »

HeX0R hat geschrieben:Ich konnte das zwar nachstellen, aber verstehe immer noch nicht, wieso das überhaupt auftritt.
Du glaubst gar nicht wie sehr ich auf so eine Antwort gehofft habe.

Beheben kann ich es ja, aber ich will diesen Fehler eigentlich auch verstehen.
Das Ganze ist mir zu mysteriös.

Anbei:

Guten Rutsch, Gesundheit, Schaffenskraft, ... und was man sich sonst noch so wünscht.
Betriebssysteme: MX Linux 19 / Windows 10 / Mac OS 10.15.7 / Android 7.0 ;)

Manchmal muß das Rad neu erfunden werden.
Benutzeravatar
HeX0R
Beiträge: 2800
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
2x16Gig Ram
NVIDIA GEFORCE GTX 1060/6Gig
Win10 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2
Kontaktdaten:

Re: DialogDesign0R V1.64

Beitrag von HeX0R »

SO!
Damit keiner von uns doof ins nächste Jahr übergehen muss, hab ich mir hier in einer elendlangen Zeitlupenaktion (mag gar nicht an die verschwendete Lebenszeit denken) dem Problem angenommen und den Bug auch gefunden!
Murphys Gesetz hat leider auch noch zugeschlagen, es war der allerletzte GadgetType, den ich getestet hatte... das ComboBoxGadget!
Es mag offensichtlich kein #PB_Default im SetGadgetFont.
Siehe Code hier, einfach einmal auf die ComboBox klicken und große Augen bekommen.

Code: Alles auswählen

OpenWindow(0, 0, 0, 200, 200, "ComboBox macOS")
ComboBoxGadget(0, 5, 5, 190, 24)
SetGadgetFont(0, #PB_Default)
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
...und nun lass ich's krachen, wünsche guten Rutsch und gutes (viel besseres!) neues Jahr.

Bug Report dürfen gerne die macOS-Jünger machen, bei Rückfragen muss ich sonst wieder tauchen gehen...
ccode_new
Beiträge: 1074
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: DialogDesign0R V1.64

Beitrag von ccode_new »

Vielen Dank für deine Mühe! :praise:

Aber das:
HeX0R hat geschrieben:Murphys Gesetz hat leider auch noch zugeschlagen, es war der allerletzte GadgetType, den ich getestet hatte... das ComboBoxGadget!
Es mag offensichtlich kein #PB_Default im SetGadgetFont.
stimmt irgendwie auch nur teilweise.

Ich habe einen Trick gefunden wie es doch geht.

Mit #PB_ComboBox_Editable geht es und es ist dann auch plötzlich nicht mehr editierbar, aber das StringGadget bleibt editierbar.
(Das ist zwar nicht das erwartete Verhalten, aber irgendwie ist es das benötigte Verhalten.)

Code: Alles auswählen

OpenWindow(0, 0, 0, 200, 200, "ComboBox macOS")
ComboBoxGadget(0, 5, 5, 190, 32, #PB_ComboBox_Editable)
AddGadgetItem(0, -1, "Eingabe 1")
AddGadgetItem(0, -1, "Eingabe 2")
SetGadgetState(0, 0)
StringGadget(1, 5, 50, 190, 30, "Eingabe-Test")

LoadFont(0, "Comic Sans MS", 12)
If IsFont(0)
  SetGadgetFont(0, FontID(0))
EndIf
SetGadgetFont(0, #PB_Default)

Repeat : Until WindowEvent() = #PB_Event_CloseWindow
Guten Rutsch!
Betriebssysteme: MX Linux 19 / Windows 10 / Mac OS 10.15.7 / Android 7.0 ;)

Manchmal muß das Rad neu erfunden werden.
Benutzeravatar
mk-soft
Beiträge: 3312
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: DialogDesign0R V1.64

Beitrag von mk-soft »

Mal ein Bugfix

Code: Alles auswählen

;-TOP

; Comment: Fix Set default font on macOS
; Version: v1.0.0
; Author : mk-soft
; Create : 1.1.2021

CompilerIf #PB_Compiler_OS = #PB_OS_MacOS
  
  Macro _PB_(Function)
    Function
  EndMacro
  
  Procedure FixSetGadgetFont(Gadget, FontID)
    Static SystemFontID
    Protected FontSize.CGFloat
    If FontID = #PB_Default
      If Not SystemFontID
        CocoaMessage(@FontSize, 0, "NSFont systemFontSize") : FontSize - 1
        SystemFontID = CocoaMessage(0, 0, "NSFont systemFontOfSize:@", @FontSize) 
      EndIf
      _PB_(SetGadgetFont)(Gadget, SystemFontID)
    Else
      _PB_(SetGadgetFont)(Gadget, FontID)
    EndIf
  EndProcedure
  
  Macro SetGadgetFont(Gadget, FontID)
    FixSetGadgetFont(Gadget, FontID)
  EndMacro
  
CompilerEndIf

CompilerIf #PB_Compiler_IsMainFile
  OpenWindow(0, 0, 0, 200, 200, "ComboBox macOS")
  ComboBoxGadget(0, 5, 5, 190, 30, #PB_ComboBox_Editable)
  StringGadget(1, 5, 40, 190, 30, "Test 1")
  AddGadgetItem(0, -1, "Test 1")
  AddGadgetItem(0, -1, "Test 2")
  SetGadgetFont(0, #PB_Default)
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
CompilerEndIf
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.7x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf My Webspace
ccode_new
Beiträge: 1074
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: DialogDesign0R V1.64

Beitrag von ccode_new »

Nett!

Anbei:
Ich habe mir gerade echt mal den ganzen Beitragsverlauf von Anfang an durchgelesen.
Dabei bin ich kurz vor Ende auf diese Aussage von mk-soft gestoßen.
Was mir an macOS gefällt ist der Unix basierte Kernel (Darwin) und nach dem einschalten ohne zusätzliche Software alles funktioniert.
Ja man muss für MacOS bereit sein.
Aber die Aussage das nach dem Einschalten alles ohne zusätzliche Software funktioniert ist auch ziemlich MacOS freundlich daher gesagt.

Unter MacOS hat man zum Beispiel per Standard noch nicht mal Zugriff auf NTFS formatierte Festplatten.
Diese Feature liefern die meisten modernen Linux-Distributionen schon mit.
Betriebssysteme: MX Linux 19 / Windows 10 / Mac OS 10.15.7 / Android 7.0 ;)

Manchmal muß das Rad neu erfunden werden.
Benutzeravatar
HeX0R
Beiträge: 2800
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
2x16Gig Ram
NVIDIA GEFORCE GTX 1060/6Gig
Win10 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2
Kontaktdaten:

Re: DialogDesign0R V1.69

Beitrag von HeX0R »

V1.69

Für macOS muss immer noch etwas Handarbeit erledigt werden, ich bin einfach nicht bereit, die Struktur der zusätzl. Dateien zu verändern, nur weil Apple das so mag.

Neuerungen, soweit ich das noch weiss:
  • Statusbar/Menüs/Toolbars können (durch einen Hack) in den Dialogen untergebracht werden
  • Zuletzt geöffnete Dateien werden gespeichert
  • Ein paar Schönheitsreparaturen
  • Linux sollte mit qt Subsystem kompiliert werden
  • kleinere macOS Verbesserungen
  • ein paar Programmschalter hinzugefügt (-nothemes, -nomenus, -portable (wird /portable demnächst ersetzen))
  • ...hab ich vergessen
Antworten