Seite 1 von 1

DCBROWSECOL und Width [ERLEDIGT]

Verfasst: Fr, 25. Jan 2019 16:44
von Manfred
zu meiner Schande muß ich zugeben, das ich gerade zum erstenmal die Anleitung genauer gelesen habe zu DCSAY und DCGET. Eigentlich suchte ich was ganz anderes. Bin dabei aber darauf gestossen, das man bei SIZE 0,einenwert erreicht, das die Länge des GET oder SAY automatisch berechnet wird in Abhängigkeit von der Schrift und der Schriftgröße. Tja, jede Menge Arbeit für nix gemacht. Aber egal. Jetzt würde mich mal interessieren, ob das für DCBROWSCOL auch geht? Gibt es da einen Parameter, oder so, der dafür sorgt, das die Breite der Spalte automatisch berechnet wird, je nach Schrift und Größe usw.? Nur bevor ich jetzt wieder anfange zu stricken und dann wieder feststellen muß´, das Roger das alles schonerschlagen hat. Welche Funktion ist es denn, mit der er die Werte für Länge und Höhe bei SAY und GEt ermittelt? Vieleicht kann man ja damit was erreichen?

Re: DCBROWSECOL und Width [ERLEDIGT]

Verfasst: Fr, 25. Jan 2019 19:50
von Manfred
tja, Roger scheint wirklich an alles gedacht zu haben. Ich habe einfach mal den Parameter WIDTH weggelassen und siehe da, die Breite wird automatisch angepaßt. So wollte ich es haben. Super. :blob8:

Re: DCBROWSECOL und Width [ERLEDIGT]

Verfasst: Fr, 25. Jan 2019 20:20
von Manfred
OK, einen kleinen Haken hat die Sache. Wenn man anfänglich ein leeres Browse erzeugt, dann werden die Spalten recht schmal erzeugt. Wenn man dann daten nachschickt, werden die Spalten nicht angepaßt. Mit dc_getrefresh() erreicht man da nichts. Mal sehen, ob ich was dazu finde.

Re: DCBROWSECOL und Width [ERLEDIGT]

Verfasst: Sa, 26. Jan 2019 10:23
von Koverhage
Ich mache das so (keine Ahnung ob das richtig ist)
oBrowse:refreshall(), oBrowse:forcestable(),

Re: DCBROWSECOL und Width [ERLEDIGT]

Verfasst: Sa, 26. Jan 2019 11:05
von Manfred
:rfereshall() ist schon drin und :forcestable() paßt nicht die Breite an, wenn vorher alles leer war.
Also werde ich mal Dummies da rein schreiben. Bis mir was besseres einfällt.

Re: DCBROWSECOL und Width [ERLEDIGT]

Verfasst: Sa, 26. Jan 2019 11:37
von Tom
Nein, wenn man die Konfiguration eines Browses oder seiner Elemente ändern will, erreicht man mit oBrowse:RefreshAll() oder gar oBrowse:ForceStable() überhaupt nichts. Refresh(All/Current) evaluiert die Daten-Codeblöcke der Spalten/Zellen erneut, aktualisiert das Browse also bezogen auf die Datenquelle (nicht bezogen auf das Layout!), und ForceStable() stabilisiert das Browse, sorgt also dafür, dass die Anzeige den Daten entspricht und der Cursor an der gewünschten Stelle steht usw.

Maßgeblich bei Spaltenbreiten ist übrigens auch der Header - kleiner als passend für den Header können Spalten in aller Regel nicht werden!

Um die Spaltenbreite nachträglich zu setzen, muss man mit oColum:SetSize() arbeiten. Anschließend ist oBrowse:Configure() hilfreich - das ist auch das Mittel der Wahl, wenn man die Presentation Parameter nachträglich geändert hat (Achtung! DC_PresAdd() verwenden!) und etwa die Zeilenhöhe variieren will.

Re: DCBROWSECOL und Width [ERLEDIGT]

Verfasst: Sa, 26. Jan 2019 13:00
von Manfred
Hi Tom,
das Problem ist ja, wenn direkt was drin steht in den Spalten, dann wird alles so von der Breite her angepaßt, wie es sein soll. Also dynamisch. Schrift ändert sich, Größe der Schrift ändert sich. Alles kein Problem. Nur wenn die DAtenquelle nach dem Erstellen keine DAten geliefert hat, aber dann geändert wird und dann Daten vorhanden sind, dann wird die einstige Breite für die leeren Spalten genommen und die ist dann zu klein. Das habe ich jetzt erstmal so gelöst, das ich entpsrechende Zeichenmengen schreibe und den Hinweis, das keine DAten vorhanden sind. So habe ich zumindest bei einem Wechsel von leeren Spalten auf gefüllte Spalten die Breite immer richtig.

Re: DCBROWSECOL und Width [ERLEDIGT]

Verfasst: Sa, 26. Jan 2019 13:28
von Tom
Hallo, Manfred.

Wenn die Datenquelle noch leer ist, kannst Du, wenn Du Spalten mit DATA-Codeblöcken verwendest, ja zunächst die entsprechende Menge Leerzeichen anzeigen:

Code: Alles auswählen

DCBROWSECOL DATA {||IF((MyTable)->(EoF()),Space(30),(MyTable)->name)} .... PARENT oBrowse
oder eleganter.

Oder Du verwendest in diesem Fall dann doch die WIDTH-Klausel. :wink:

Re: DCBROWSECOL und Width [ERLEDIGT]

Verfasst: Sa, 26. Jan 2019 14:02
von Manfred
So ähnlich mache ich das auch. Fülle es entsprechend auf. DAmit kann ich leben. Ich hatte nur den Verdacht, das es da evtl. noch andere Lösungen gibt und ich wieder im Trüben fische.

Re: DCBROWSECOL und Width [ERLEDIGT]

Verfasst: Sa, 26. Jan 2019 16:34
von Tom
Wenn die Spaltenbreite auf Basis der Füllung des Inhalts errechnet wird und es gibt anfangs keinen Inhalt - was soll Roger dann machen?

Wenn Du eine Tabelle braust, kannst Du auch simpel formatieren, und weil es Phantomdatensätze gibt, geht das immer, auch bei EoF(). Also ein PadR() bei Strings usw.

Re: DCBROWSECOL und Width [ERLEDIGT]

Verfasst: Di, 05. Feb 2019 12:06
von Manfred
hat eigentlich jemand eine Ahnung/Vermutung, mit welcher Funktion Roger die Berechnung durchführt für die optimale Breite Länge Höhe usw.? Mich würde dann mal interssieren, was er da so alles benutzt und einsetzt. Gibt es da überhaupt eine DC_ Funktion für?

Re: DCBROWSECOL und Width [ERLEDIGT]

Verfasst: Di, 05. Feb 2019 15:13
von AUGE_OHR
Manfred hat geschrieben: Di, 05. Feb 2019 12:06 Gibt es da überhaupt eine DC_ Funktion für?
in \exp20\Source\Dclipx\_dcfunct.prg gibt es

Code: Alles auswählen

FUNCTION DC_GraQueryTextBox( cCaption, cFont, nOption, nMode )
was natürlich GraQueryTextBox() nutzt.

wenn du nun viele Anfragen hast dann siehe dir mal GetTextExtentPoint32() von Günter Beyes an.
GraTest.zip
C Source mit OBJ
(8.66 KiB) 207-mal heruntergeladen

Re: DCBROWSECOL und Width [ERLEDIGT]

Verfasst: Sa, 09. Feb 2019 15:42
von Manfred
ich fasse es nicht. Ich habe jetzt ellenlang herumgebastelt um herauszufinden, wie ich (auto) SIZE für browse und Say und Get usw. vernünftig hinkriege. Nichts hat geklappt. Nur Murks. Dann habe ich einfach mal in einem lichten Moment unter DCGETOPTIONS GETFONT UND FONT angegeben. Und jetzt sieht es so aus, als wenn alles berücktsichtigt wird. Sogar die individuell eingestellten Werte für die DPI Zahl, die man von-bis durchgehend angeben kann. Manmanman, was für ein Drama... Mal schauen, wie es nun beim Andwender vor Ort klappt.

Re: DCBROWSECOL und Width [ERLEDIGT]

Verfasst: Mo, 11. Feb 2019 10:09
von Manfred
OK, der Morgen fängt nicht so gut an. Wie kann es sein, das ein System klappt und das andere wieder nicht? Ich habe verschiedene Win 10 Konfigs getestet und bei denen klappt alles wie gewollt. Dann kommt ein weiteres Win10 OS und da klappt es wieder nicht. Einmal ist es eins, welches größer als FHD ist, dann klappt ein anderes wieder nicht in dem die DPI Zahl von hand auf 115% eingestellt wurde.

Re: DCBROWSECOL und Width [ERLEDIGT]

Verfasst: Di, 26. Feb 2019 16:52
von Manfred
Hallo Tom,
ich muß Dich leider korrigieren. Wenn ich WIDTH weglasse, dann wird nicht der Header als Mindestbreite genommen. Wonach sich Roger richtig, erschließt sich mir nicht derzeit. Aber es klappt doch nicht so, wie erhofft. Irgendwas mache ich noch falsch.

Re: DCBROWSECOL und Width [ERLEDIGT]

Verfasst: Di, 26. Feb 2019 16:58
von Tom
Wenn Du WIDTH weglässt, dann nicht, stimmt. Aber wenn Du eine Breite angibst, gelingt es Dir nicht, unter die nötige Breite der Spaltenüberschrift zu gehen. Das schaffst Du dann erst mit einem direkten :SetSize() oder mit der Maus.

Re: DCBROWSECOL und Width [ERLEDIGT]

Verfasst: Di, 26. Feb 2019 17:53
von Manfred
bei einer WIDTH von 0 dreht die Spalte total am Rad und erzeugt nur Linien in kleinen Abständen und bei 1 wird tatsächlich die Headerbreite als min gewählt.