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 »

@Hex0r

Es ist alles gut, auch dein Dark-Theme funktioniert und man kann Text eingeben.
Also ich brauche kein Disable beim Theme.

Das einzige was man unbedingt unter MacOs beachten muss ist der Dateipfad von der App.
Hierbei muss man erst alle Ressourcen in den Mac-Ordner des erstellten App-Archives kopieren.
(Ansonsten z.B. zum Debuggen/Testen lieber einen extra Verzeichnisflag anlegen und diesen dann mit GetCurrentDirectory() behandeln. Beim "Release" können die jetzige Pfadangaben aber so bleiben.)
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 »

Für macOS ein PB IDE-Tool um alle Daten in den Contents Ordner automatisch zu kopieren.
Dazu im Projekt Ordner ein Ordner "MyAppData" erstellen und in diesen den Ordner "Resources" und bei bedarf den Ordner "Library" erstellen.
Zwei mal in Werkzeug konfigurieren. Nach dem Kompilieren und Starten, Nach dem Erstellen der Executable.

PB IDE-Tool MyAppdata

PathHelper

Code: Alles auswählen

;- TOP

; Comment: PathHelper v1.01 by mk-soft

Macro GetParentPath(Path)
  GetPathPart(RTrim(Path, #PS$))
EndMacro

Procedure.s GetProgramPath()
  Protected r1.s
  r1 = GetPathPart(ProgramFilename())
  CompilerIf #PB_Compiler_OS = #PB_OS_MacOS
    r1 = GetParentPath(r1)
    r1 = GetParentPath(r1)
  CompilerEndIf
  ProcedureReturn r1
EndProcedure

Procedure.s GetResourcesPath()
  Protected r1.s
  r1 = GetPathPart(ProgramFilename())
  CompilerIf #PB_Compiler_OS = #PB_OS_MacOS
    r1 = GetParentPath(r1)
  CompilerEndIf
  r1 + "Resources" + #PS$
  ProcedureReturn r1
EndProcedure

Procedure.s GetLibraryPath()
  Protected r1.s
  r1 = GetPathPart(ProgramFilename())
  CompilerIf #PB_Compiler_OS = #PB_OS_MacOS
    r1 = GetParentPath(r1)
  CompilerEndIf
  r1 + "Library" + #PS$
  ProcedureReturn r1
EndProcedure

CompilerIf #PB_Compiler_IsMainFile
  Debug GetProgramPath()
  Debug GetResourcesPath()
  Debug GetLibraryPath()
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
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 »

Nun gut... und wie genau hilft das dem DD?
Kann das nicht einer der MacOS-Jünger in den Source basteln?
Ist doch alles da!

(Sehr cleveres Macro übrigens!)
Benutzeravatar
mk-soft
Beiträge: 3312
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: DialogDesign0R V1.64

Beitrag von mk-soft »

Bei MacOS ist eine APP ein Ordner. Das PB IDE-Tool kümmert sich darum, das die Daten OnFly in dem APP Ordner kopiert wird.
Also nur für MacOS um sich die Arbeit mit dem Resources zu vereinfachen.

Im Code muss nur noch per CompilerIF der path zu dem Resources angepasst werden.
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 »

Ich habe die Bugs beseitigt.

Vorgehensweise:
IDE-Menü->Bearbeiten->Suchen in Dateien->Suche: GetPathPart(ProgramFilename()) (in *.pb und *.pbi) ->Ersetzen gegen: GetProgramPath()

Code: Alles auswählen

(Modifiziert)
Macro GetParentPath(Path)
  GetPathPart(RTrim(Path, #PS$))
EndMacro

Procedure.s GetProgramPath()
  Protected r1.s
  CompilerIf #PB_Compiler_OS = #PB_OS_MacOS
    r1 = GetParentPath(r1)
    r1 = GetParentPath(r1)
  CompilerEndIf
  ProcedureReturn r1
EndProcedure
und dann kommt bei Theme "Keins" immer noch der ERROR:
[ERROR] *** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[0]

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

Wenn man in dieser Procedure:

Code: Alles auswählen

Procedure _NoTheme()                                 ;Preset values for non set theme
	
	If DisableThemeing = #False
		With THEME
			\WinBackColor        = #PB_Default
			\WinFontColor        = #PB_Default
			\LogFont\Name        = "Arial"
			\TreeFont\Name       = "Arial"
			\MainFont\Name       = "Arial"
			\LogBackColor        = #PB_Default
			\LogFontColor        = #PB_Default
			\TreeBackColor       = #PB_Default
			\TreeFontColor       = #PB_Default
			\TreeMarkedColor     = $0AD7F3
			\TreeMarkedBackColor = $241524
			\TreeLineColor       = #PB_Default
			\MainBackColor       = #PB_Default
			\MainFontColor       = #PB_Default
			\CommentColor        = #PB_Default
		EndWith
	
		_SetTheme()
	Else
		THEME\TreeMarkedBackColor = $241524
		THEME\TreeMarkedColor     = $0AD7F3
		THEME\TreeBackColor       = #PB_Default
		THEME\TreeFontColor       = #PB_Default
		THEME\CommentColor        = #PB_Default
	EndIf
EndProcedure
...die Namen mit einem Font-Namen belegt funktioniert es unter MacOS und der ERROR ist weg.

Damit läuft es problemlos mit dem Theme "Keins" und "Dark" und es kommt keine Fehlermeldung mehr und man kann Text eingeben.

Anbei:
Hier die 1 gegen eine 2 zu ersetzen hat zwar auch den Bug behoben, aber dann wurde die Schrift nicht mit im Theme eingebunden.

Code: Alles auswählen

For i = 2 To XMLChildCount(*Node)
	  If ChildXMLNode(*Node, i) <> #Null
	    _SetMainGadgets(Dialog, ChildXMLNode(*Node, i))
	  EndIf
	Next i
(Also die i = 2 war doch noch nicht ganz korrekt)
->Hier kann i = 1 bleiben.
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 »

Vielen Dank, werde ich bei Gelegenheit einbauen!

Dir ist aber schon klar, dass das hier gar nichts zurückgibt? ;)

Code: Alles auswählen

Procedure.s GetProgramPath()
  Protected r1.s
  CompilerIf #PB_Compiler_OS = #PB_OS_MacOS
    r1 = GetParentPath(r1)
    r1 = GetParentPath(r1)
  CompilerEndIf
  ProcedureReturn r1
EndProcedure
ccode_new
Beiträge: 1074
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: DialogDesign0R V1.64

Beitrag von ccode_new »

HeX0R hat geschrieben: Dir ist aber schon klar, dass das hier gar nichts zurückgibt?
ja :mrgreen:
Aber diese Procedure kann ja als globale Procedure für zu ersetzenden Pfadangaben dienen.
In die Procedure können evtl. weitere CompilerIf rein und die normale Pfadangabe wie bisher vorhanden. (Nur eben mit einer Außnahne: Ausführen von MacOs-Apps über die IDE.)
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 »

Irgendwas scheint in Deinen Ausführungen falsch zu sein.
Es gibt keine SetGadgetFont-Aufrufe mit einem leeren String!
Überall wird geprüft, ob der Fontname = "" ist, und falls ja, wird der Font mit #PB_Default gesetzt (siehe _SetTheme() in DD_internalProcedures.pbi).
Also kann es eigentlich gar nix bringen, einfach irgendwelche Fontnamen zu vergeben, es sei denn MacOS unterstützt kein #PB_Default??

Desweiteren habe ich mal genauer nach den Instanzen von ProgramFilename() gesucht.
Wenn da ein falscher Pfad zurückgegeben wird, würden einfach keine Themes zur Auswahl stehen, keine alternativen Definitionen (wie SpiderBasic) und keine anderen Sprachen als Englisch.
Aber funktionieren müsste der Designer dennoch (habe das einfach mal unter Windows getestet, indem ich den Haken bei "temp Source im Sourceordner erstellen" abgehakt hatte).

Mir scheint das alles nicht schlüssig zu sein, so kann ich das nicht einbauen.
ccode_new
Beiträge: 1074
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: DialogDesign0R V1.64

Beitrag von ccode_new »

Hi Hex0r,
ich kann dich gut versehen und es kommt mir selber sehr seltsam vor, aber es ist wirklich so.
Kann das bitte auch mal ein anderer Mac-User bezeugen?

Hier ein Beweisvideo:
https://workupload.com/file/n7WPyYzKDB4

Anbei:
Ich habe extra noch mal ein komplett neues Zip heruntergeladen, entpackt und (fast) alle Vorkommen von "GetPathPart(ProgramFilename())" ersetzt (in *.pb/*pbi). Danach habe ich dieses Video aufgenommen. (Sonst wurde nix geändert.)
Ich habe in meinem Video bemerkt, dass ich zweimal den Pfadnamen nicht ersetzt habe.
Hier:
If FileSize(GetProgramPath() + "save_template.json") = -1 And FileSize(GetProgramPath() + "default_save_template.json") > 0
CopyFile(GetProgramPath() + "default_save_template.json", GetProgramPath() + "save_template.json")
Aber das ändert nichts an der Tatsache.
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 »

Die Änderung von ccode_new mit Rückgabe von einem Leerstring ist natürlich Blödsinn (Sorry ccode_new)
Es müsste die Funktion GetResourcesPath eingesetzt werden und diese nach bedarf an den Ordner und OS angepasst werden,
um auf die eigenen Programm Dateien zugriff zu haben.

Somit funktioniert es auch auf allen OS, auch mit dem Tool MyAppData für macOS.

P.S
Hatte deinen gelöschten Beitrag in "plistTool" noch gelesen :wink:

Eine Hochachtung, das du macOS als VM zum laufen bekommen hast. Auch wenn du macOS als %@$ empfindet.
Für macOS muss man bereit sein. Ich war so weit als mich Windows mit seinen Änderungen genervt hatte (Muss jeden Tag damit Arbeiten)

Was mir an macOS gefällt ist der Unix basierte Kernel (Darwin) und nach dem einschalten ohne zusätzliche Software alles funktioniert.
Was mir an Apple nicht gefällt ist der viel zu hohe Preis und das nicht auf Kundenwünsche besonders eingegangen wird.

Noch gibt es Macs mit Intel Prozessoren, was ich auch noch Brauche für die VMs. Mal schauen wie neuen Prozessoren auf die Zukunft von Windows und Linux auswirkt.
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
Antworten