Aktuelle Zeit: 03.04.2020 18:55

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 59 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4, 5, 6  Nächste
Autor Nachricht
 Betreff des Beitrags: Re: DynamicDialogs - komplexe dynamische GUIs einfach erstel
BeitragVerfasst: 02.03.2016 01:11 
Offline
PureBasic Team
Benutzeravatar

Registriert: 11.09.2004 16:35
Wohnort: Saxony / Deutscheinsiedel
@PureLust: Planst du eigentlich auch eine Unterstützung von verschiedenen Fonts in den Dialogen? (für mich z.B. nützlich bei TextGadgets, die ich als Überschriften oder Beschriftung von weiteren GUI-Elementen verwende)

Wenn ja, gibt es ja evtl. die Möglichkeit einen optionalen Parameter 'FontID' einzuführen. Und wenn dieser Wert gültig, d.h. ein abweichender Font angegeben, ist, dann könnte der Dialog-Generator automatisch den notwendigen XML-Code ergänzen.

Ansonsten ist dies sicher auch "händisch" durch Befüllung des 'XMLParam$' Parameters möglich, habe es noch nicht probiert.

Aktuell nutze ich in meinem händisch erstelltem XML-Code die folgenden selbst erstellten "Hilfs"-Funktionen. Vielleicht sind dir diese nützlich, falls du Unterstützung abweichender Fonts tatsächlich einbauen möchtest.... :allright:

Der nachfolgende Code ist nicht direkt lauffähig, da ich "nur" die Funktionen aus meinem Projekt zusammenkopiert habe:
Code:
; First we create the 1x1 pixel image for later testing the text width with GetTextWidth()....
If Not CreateImage(#Image_GetTextSize, 1, 1)
  Debug "Can't create 1x1 image for testing text width later..."
EndIf

Procedure GetTextWidth(text$, FontID = #Font_Standard, AddAdditionalGadgetPixels = #True)
  ; This function has the purpose to check, how the width (in pixel) of a given text is.
  ; As the 2nd and 3rd parameters are optional, as standard the regular system-font
  ; (FontID = #Font_Standard) will be used, and there will be added an additional
  ; pixel size to the calculated text-width for using the returned value with gadgets.
  ; The standard of this parameter is #True, as in most cases the needed width of a
  ; gadget (TextGadget, HyperlinkGadget,...) is needed. In other cases (e.g. for
  ; calculating the pure text-width a listicon column need to have...) this parameter
  ; need to be set to #False.
  Protected width
  If StartDrawing(ImageOutput(#Image_GetTextSize))
    If FontID <> #Font_Standard
      DrawingFont(FontID(FontID))
    Else
      DrawingFont(GetGadgetFont(#PB_Default))
    EndIf
    width = TextWidth(text$)
    StopDrawing()
  Else
    Debug "StartDrawing() failed - can't check for text width!"
  EndIf
  If AddAdditionalGadgetPixels = #True
    ;CompilerIf #PB_Compiler_OS = #PB_OS_MacOS
    ;  width * 1.05
    ;CompilerEndIf
    width + 15    ; currently (Aug. 201%) this value if for testing only, it need to be adapted for each OS and probably a factor is needed...
  EndIf
  ;Debug text$ + "==> width = " + Str(width)
  ProcedureReturn width
EndProcedure
 
Procedure GetTextHeight(text$, FontID = #Font_Standard)
   Protected height
   If StartDrawing(ImageOutput(#Image_GetTextSize))
     If FontID <> #Font_Standard
       DrawingFont(FontID(FontID))
     Else
       DrawingFont(GetGadgetFont(#PB_Default))
     EndIf
     height = TextHeight(text$)
     StopDrawing()
   Else
     Debug "StartDrawing() failed - can't check for text width!"
   EndIf
   ProcedureReturn height
EndProcedure 

Procedure.s DialogGadgetTextSize(text$, FontID, margin=0)
  ; This function is a combination of the two other functions, and will give
  ; a XML containing both width and height parameters!
  Protected width, height
  width = GetTextWidth(text$, FontID) + margin     ; we use another self-written function to calculate the width value
  height = GetTextHeight(text$, FontID) + margin     ; we use another self-written function to calculate the height value
  ; ... and now we return a XML string with both values:
  ProcedureReturn " width='"+Str(width)+"' height='"+Str(height)+"' "
EndProcedure

;-------------------------------

; eine exemplarische Zeile aus dem XML-Code:
         "          <text name='WHNameTitle' text='WHeritageName'" + DialogGadgetTextSize(Language("WHeritageName"), #Font_SmallBold, 3) + " />" + LF$ +

;-------------------------------

Procedure SetDialogGadgetTitleFont(Dialog, GadName$, FontType = #Font_SmallBold)
  ; The purpose of this function is, to check if a gadget - created via XML dialog - is available,
  ; and if yes set the smaller 'title' font for it. This is used to shorten code like this example:
  ;   gad = DialogGadget(dialog, "WHNameTitle")
  ;   SetGadgetFont(gad, FontID(#Font_SmallBold))
  ;
  ; Parameters:
  ;  dialog   = dialog number previously got (to be given as parameter from calling procedure)
  ;  GadName$ = name of the gadget created in the XML description
  ;  FontType = can be given as parameter (e.g. for bigger fonts like #Font_Middle or #Font_Big),
  ;             or the standard (#Font_SmallBold) like used for all section titles will be used
  ;
  Protected gad
  gad = DialogGadget(Dialog, GadName$)
  If gad > -1
    SetGadgetFont(gad, FontID(FontType))
  EndIf 
EndProcedure


; nach der erfolgreichen Dialog-/GUI-Erstellung verwendete Funktion:
  SetDialogGadgetTitleFont(dialog, "WHNameTitle")



Was für mich weniger interessant, sind besondere Makro-Funktionen o.ä., die das Einrücken erleichtern.
Ich komme gut und ausreichend mit dem händischen Einrücken der "DynamicDialogs-Befehle" zurecht, und bin schon froh, dass im generierten XML-Code dem Testen/Debuggen wegen ordentliche Einrückung automatisch dabei ist... :D

Ich kann mich nur wiederholen: herzlichen Dank für deine Mühe! :mrgreen:

PS: Wo bleibt eigentlich die Veröffentlichung im engl. Forum? 8)

_________________
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: DynamicDialogs - komplexe dynamische GUIs einfach erstel
BeitragVerfasst: 03.03.2016 02:12 
Offline
Benutzeravatar

Registriert: 21.07.2005 00:02
Wohnort: am schönen Niederrhein
matbal hat geschrieben:
PureLust hat geschrieben:
- Modul: DynamicDialogs_suffixed_IDonly
- Modul: DynamicDialogs_suffixed_NameOnly
Die Idee finde ich gut. Das macht den Code auch noch etwas übersichtlicher.
Hab ich jetzt mal umgesetzt. Es gibt jetzt also die Varianten '..._suffixed', '..._suffixed_IDonly' und '..._suffixed_NameOnly' die ich mal als "AddOns" bezeichnen würde.
In diesem Zusammenhang hab ich gleich noch ein kleines ReDesign vorgenommen:

Ich hab jetzt das Haupt-Modul "DynamicDialogs" und die AddOns '..._suffixed', '..._suffixed_IDonly' und '..._suffixed_NameOnly' in separate pbi-Dateien aufgeteilt.
Somit hat man also nicht mehr eine einzige große Include-Datei, sondern kann sich die AddOns je nach Geschmack selber hinzu fügen.
Noch als Hinweis: Die 'AddOns' inkludieren das 'Haupt'-Modul automatisch, so dass man also z.B. nur die Datei "DynamicDialogs_suffixed_IDonly' inkludieren muss um, wenn man die ID-only Version nutzen möchte.

Weiterhin hab ich die 'AddOns' verschlankt und die Funktionen, die exakt identisch zu denen im Haupt-Modul waren, gestrichen.
Das hat jetzt zur Folge, dass Ihr zuerst mit 'UseModul DynamicDialogs' das Haupt-Modul aktivieren müsst und dann z.B. zusätzlich mit "UseModul DynamicDialogs_suffixed_IDonly" noch die von Euch gewünschten Funktionen des AddOns.
matbalschrieb: Die Konstante fehlt noch im zweiten Modul "DynamicDialogs_suffixed".
Genau das war ein Grund für die Verschlankung.
Da die 'suffixed'-Variante bisher den kompletten Funktionsumfang des Haupt-Moduls hatte, musste ich fast alle Änderungen im Haupt-Modul dann auch in der suffixed-Version durchführen - da konnte es schon mal zu Flüchtigkeitsfehler kommen. Mit den neuen '..._IDonly' und '..._NameOnly' AddOns wären dann sogar vier Varianten zu pflegen gewesen - Fehlerquellen pur.
Nun habe ich in den AddOns keine redundanten Funktionen zum Haupt-Modul mehr drin und die AddOns bieten nun nur noch Zusatz-Funktionen.

Andre hat geschrieben:
Planst du eigentlich auch eine Unterstützung von verschiedenen Fonts in den Dialogen? (für mich z.B. nützlich bei TextGadgets, die ich als Überschriften oder Beschriftung von weiteren GUI-Elementen verwende)
Gute Idee. :allright:
Da ich die Funktionen aber nicht mit noch mehr Parametern überladen möchte, hab ich mir überlegt das mit einer Font()-Funktion zu lösen.
(Im SourceCode des Haupt-Moduls hab ich da mal ein paar Ideen zu hingekitzelten. Kannst da ja mal reinschauen wenn Du magst.)

Einen Font='...' Parameter im XML-Code unterstützt die PureBasic Dialog-Library meines Wissens ja nicht - oder doch?

André schrieb: Was für mich weniger interessant, sind besondere Makro-Funktionen o.ä., die das Einrücken erleichtern.
Ich komme gut und ausreichend mit dem händischen Einrücken der "DynamicDialogs-Befehle" zurecht, ...

Probier die suffixed-Varianten doch einfach mal aus. Also ich möchte das automatische Einrücken in der IDE nicht mehr missen. :mrgreen:

André schrieb: Ich kann mich nur wiederholen: herzlichen Dank für deine Mühe!

Abba jerne doch. :wink:

André schrieb: PS: Wo bleibt eigentlich die Veröffentlichung im engl. Forum?

Wollte hier erst mal ein wenig Feedback sammeln, Bugs beseitigen und auch den idealen Stil für die Umsetzung finden (wie z.B. die heutige Auslagerung der AddOns).
Englisches Forum kommt bestimmt noch.

Ach ja .... neue Version mit Bug-fixes, den nun augelagerten AddOns und abgeänderten Demos wieder unter dem gleichen LINK online. :D

_________________
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: DynamicDialogs - komplexe dynamische GUIs einfach erstel
BeitragVerfasst: 03.03.2016 17:51 
Offline

Registriert: 30.03.2011 20:53
Danke für die neue Version. Ich habe es gleich mal ausprobiert. Mein Favorit ist "DynamicDialogs_suffixed_IDonly.pbi".

Dadurch, daß man auch das Modul DynamicDialogs einbinden muß, hat man jetzt zwar fast alle Befehle doppelt in der Autovervollständigung (mit und ohne __), aber damit kann ich mich gut arrangieren.

Übrigens finde ich es genial, wie du die gut lesbaren Tips für die Statuszeile hinbekommen hast. Auf den Trick mit dem CompilerIf #False und den Dummy-Declarations muß man erst einmal kommen... 8)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: DynamicDialogs - komplexe dynamische GUIs einfach erstel
BeitragVerfasst: 03.03.2016 21:37 
Offline
Benutzeravatar

Registriert: 21.07.2005 00:02
Wohnort: am schönen Niederrhein
matbal schrieb: Dadurch, daß man auch das Modul DynamicDialogs einbinden muß, hat man jetzt zwar fast alle Befehle doppelt in der Autovervollständigung (mit und ohne __), aber damit kann ich mich gut arrangieren.

Ist mir natürlich auch schon aufgefallen und fand ich jetzt auch nicht sooo dramatisch - aber unschön isses schon.
Um das noch abzustellen könnte ich auch noch die nicht-suffix Varianten auslagern, so dass man also immer (auch für die normalen nicht-suffix Befehle) ein AddOn wählen müsste.
Wäre vielleicht gar nicht so schlecht, da das die Nutzung konsistenter machen würde (da man dann immer 2 UseModul Befehle nutzen müsste), aber würde natürlich dann für User wie z.B. André bedeuten, dass er eine Zeile mehr im Code schreiben müsste. :mrgreen:
@André: was meinst Du ... wäre das ein Problem für Dich?

matbal schrieb: Übrigens finde ich es genial, wie du die gut lesbaren Tips für die Statuszeile hinbekommen hast. Auf den Trick mit dem CompilerIf #False und den Dummy-Declarations muß man erst einmal kommen... 8)

Jo, ... man muss sich halt irgendwie zu helfen wissen. :mrgreen:
Ich hatte zwar im englischen Forum mal ein Feature-Request bzgl. der Help-Texte geschrieben - das dümpelt aber bislang wohl unbeachtet vor sich hin.

_________________
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: DynamicDialogs - komplexe dynamische GUIs einfach erstel
BeitragVerfasst: 04.03.2016 00:38 
Offline
PureBasic Team
Benutzeravatar

Registriert: 11.09.2004 16:35
Wohnort: Saxony / Deutscheinsiedel
Ich komme vor morgen abend leider nicht zu irgendwelchen Tests, sorry...

Im Moment nur mal 2 kurze Statements:
- einen <font> Tag für XML Dialog Definitionen gibt es bisher leider nicht, existiert aber als Wunsch im englischen Forum: http://www.purebasic.fr/english/viewtop ... =3&t=57272
Weitere Unterstützung dafür wäre wünschenswert ; -)
- das mit dem zusätzlichen UseModule stört mich nicht, wenn das die entsprechenden Vorteile bringt und jeder dadurch das nutzen kann, was er möchte. .. :-)

_________________
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: DynamicDialogs - komplexe dynamische GUIs einfach erstel
BeitragVerfasst: 04.03.2016 03:24 
Offline
Benutzeravatar

Registriert: 21.07.2005 00:02
Wohnort: am schönen Niederrhein
Sooo ... neue Version online.

Änderung:
- Basis-Modul wurde nun umbenannt in 'DynamicDialogs_MainModul.pbi' (muss im Grunde nie eigenständig eingebunden werden).
- die 'normalen' Funktionen für die XML-Elemente (also die ohne Suffix) wurden nun in ein eigenes AddOn ausgelagert: 'DynamicDialogs_plain.pbi".
(Info: Auch vom neuen '..._plain'-AddOn wird das Basis-Modul 'DynamicDialogs_MainModul.pbi' automatisch mit inkludiert.)

Für die Standard-Funktionen sowie den Zugriff auf die Konstanten müsst Ihr also nun das Main-Modul nutzen:

UseModul DynamicDialogs

und für die Funktionen zum Aufbau des XML-Codes eines der AddOn:

UseModul DynamicDialogs_plain
UseModul DynamicDialogs_suffixed
UseModul DynamicDialogs_suffixed_IDonly
UseModul DynamicDialogs_suffixed_NameOnly

_________________
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)


Zuletzt geändert von PureLust am 06.03.2016 05:05, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: DynamicDialogs - komplexe dynamische GUIs einfach erstel
BeitragVerfasst: 04.03.2016 22:49 
Offline

Registriert: 30.03.2011 20:53
Nochmal Danke für die Änderungen. Jetzt ist es richtig komfortabel, keine doppelten Einträge mehr in der Autovervollständigung. Ich bin damit vollauf zufrieden.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: DynamicDialogs - komplexe dynamische GUIs einfach erstel
BeitragVerfasst: 05.03.2016 01:06 
Offline
PureBasic Team
Benutzeravatar

Registriert: 11.09.2004 16:35
Wohnort: Saxony / Deutscheinsiedel
Ich habe nun auch die neue (auf 2 Includes aufgeteilte) Version erfolgreich in mein Projekt integriert.
Verwende die 'plain' Variante und alles ist bestens, danke! :D

_________________
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: DynamicDialogs - komplexe dynamische GUIs einfach erstel
BeitragVerfasst: 06.03.2016 11:32 
Offline

Registriert: 30.03.2011 20:53
Ich habe deine Includes unter Linux und OSX ausprobiert. Deine Includes funktionieren da auch gut. Ich mußte aber die Konstante #Blue noch definieren. Die scheint es nur unter PB-Win zu geben.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: DynamicDialogs - komplexe dynamische GUIs einfach erstel
BeitragVerfasst: 06.03.2016 11:39 
Offline
Benutzeravatar

Registriert: 21.07.2005 00:02
Wohnort: am schönen Niederrhein
matbal hat geschrieben:
Ich habe deine Includes unter Linux und OSX ausprobiert. Deine Includes funktionieren da auch gut. Ich mußte aber die Konstante #Blue noch definieren. Die scheint es nur unter PB-Win zu geben.
Oh super, danke für's Testen und den Hinweis. :allright:
In der nächsten Version ersetze ich #Blue dann mal durch $FF0000, dann sollte es keine Probleme mehr geben.

@André: Font-Funktionen sind in der Mache. :wink:

_________________
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 59 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4, 5, 6  Nächste

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye