#Vorschlag: #PB_Auto

Fragen und Bugreports zur PureBasic 4.0-Beta.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

#Vorschlag: #PB_Auto

Beitrag von AND51 »

Hallo!

Ich weiß nicht so recht wohin mit diesem Beitrag, in der Hilfe habe ich nichts gefunden.

Wie wäre es, wenn es zum Beispiel für das TextGadget) das zusätzliche Flasg #PB_Auto geben würde? Da ssoll bewirken, dass das gadget vom Compiler oder zur Laufzeit automatisch auf die nötigste Größe verkleinert wird, sodass aber der Inhalt noch sichtbar ist.

Warum? Mich nervt das immer, wenn ich eine GUI erstellen möchte und jedesmal die Maße des TextGaadgets ausprobieren muss. Entweder ist es zu dünn oder zu breit und überlappt andere Gadgets.

Vielleicht kann es dieses Flag, sollte es umgesetzt werden, auch für andere Gadgets geben, beispielsweise ImageGadget(), um damit (ohne die beiden speziellen Funktionen nutzen zu müssen), das Gadget auf die richtige Größe zu bringen.
Oder für ButtonImageGadget(). Oder aber auch für Checkboxen und Optionsfelder, damit diese auf die Mindestlänge gekürzt werden, sodass sie nebenstehende und nachfolgende Elemente nicht überlappen.

Findet ihr die Idee gut oder meint ihr, dss sie auch umgesetzt werden könnte?
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Zur Laufzeit ist es nicht sinnvoll, aber als Option in einem Visuell-Designer ist sowas sinnvoll einsetzbar.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Ob zur Laufzeit oder nicht, da habe ich keine genauen Informationen drüber, was man da alles machen kann, denn PB soll ja möglichst optimal und shcnell laufen.

Wir man dann das Flag auch manuell setzen können, wenn man (so wie ich) die GUI auch noch mit der Hand erstellt?

AND51 - Hier läuft die GUI nicht vom Band,
hier schafft man noch mit Herz und Hand!
;-)
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Ich finde, dass das mit dem Flag nicht machbar ist.

Wenn du nicht willst, dass ein anderes Gadget ein TextGadget überlappen
soll, dann musst du dieses Gadget auch selbst so positionieren, dass es
passt. Das Textgadget ändert nicht die Position eines anderen Gadgets.
Außerdem kann man den Text in einem TextGadget auch nochmal
ändern, sodass es sich ja wiede resizen müsste. Das sind sicherlich nur
zwei von mehreren Problemen.

Also ich sehe es als unnütz an, so ein Flag einzubauen.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

OK, du hast Recht, das man den Text auch nachträglich ändern kann. Aber ich kann ja schließlich auch ein eigens positioniertes Gadget den Text davon ändern, und wenn dieser zu lang ist, dann wird der Text auch abgeschnitten.

Es geht ja in erster Linie darum, dass bei der Erstkompilierung die Maße (nicht die Position!) des Gadgets stimmen. Der User muss sich im klaren darüber sein, dass ein nachträgliches Ändern mit diesem Risiko verbunden ist. Er muss sich aber auch im klaren darüber sein, wenn er das Flag nicht verwendet. Oder man baut den Vorschlag so ein, dass man es nicht als zusätzliches Flag nehmen kann, wie ich erst dachte, sondern man kann es statt Width und Height einsetzen.

Auf diese Weise wäre ein nachträgliches, automatisches ändern der Größe mitttels ResizeGadget() möglich.

Außerdem, NickTheQuick, denke ich dabei ja nicht nur an TextGadgets, sondern auch an ImageGadgets, Checkboxe, HyperLinkGadgets, Optionsfelder, ComboBoxen...
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Sven
Beiträge: 374
Registriert: 23.09.2004 12:01

Beitrag von Sven »

Das geht sofort schief, wenn das Programm auf einem anderen Rechner mit anderen Schriftarten läuft. Um ein Gadget wirklich genau abzustimmen, müßtest Du die Schriftart und -größe mit festlegen und hoffen, dass die auf anderen Rechnern auch vorhanden ist. Also lieber immer großzügig dimensionieren...

Sven
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

@ Sven: Dann darf es aber auch die Funktion TextLen() nicht geben; diese Funktion, im Bereich 2DDrawing, ermittelt, wie breit ein Text ist und berücksichtigt dabei die aktuell benutzte Schriftart!

Und wenn es jetzt #PB_Auto gäbe, dann braucht sie nicht nur gucken, wie breit die längste Zeile des Textes ist, sondern guckt auch, wie hoch das gadget dann sein muss, einfach so: Höhe der Schriftart * Anzahl der im Text enthaltenen Chr(10) (Zeilenumbrüche).
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

:? Wozu haben wir einen VD?
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
Konne
Beiträge: 764
Registriert: 30.03.2005 02:20
Kontaktdaten:

Beitrag von Konne »

Dann schreib ddir halt ein progamm das ausmisst wie breit ein text ist und die zahl gibst du dann ein. Wenn du languagesupport haben willst solltest du aber eh immer mehr platzt einplanen als du vielleicht im deutschen braucht.
Sven
Beiträge: 374
Registriert: 23.09.2004 12:01

Beitrag von Sven »

>>Dann darf es aber auch die Funktion TextLen() nicht geben

Was hat die denn damit zu tun? Freilich kannst Du vor jedem GadgetBefehl ein StartDrawing aufrufen und die Länge des Textes ermitteln, um dann die Gadgets entsprechend anzupassen.

Kann aber erstens trotzdem schiefgehen, und zweitens: Was machst Du, wenn der Text wirklich zu breit ist? Alle anderen Gadgets verschieben? Das Fenster breiter machen, wenn's nicht reicht?

TextLen() ist wohl eher dazu da, Text in Grafik ordentlich (z.B. zentriert oder rechtsbündig) zu platzieren.

Sven
Gesperrt