xbpstatic und :setcaption()

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 18144
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

xbpstatic und :setcaption()

Beitrag von Manfred » Mo, 22. Mai 2006 14:11

Hi,

ich habe gerade ein wenig ausprobiert und wollte ein Fenster im GUI Modus erstellen, in dem sich ändernde Daten angezeigt werden sollen. Das klappt auch ganz gut, solange die Daten sich nicht ändern.

Also habe ich mir Anfangs gedacht, ich baue jedesmal das Fenster mit den Inhalten neu auf. Ist aber blöde, weil dann immer alles :create() und :destroy() gemacht werden muß. Dann habe ich im Handbuch nachgeblättert und bin auf :setcaption() gestoßen. Das macht schon das was ich will, nur überschreibe ich mir dann in der Maske den Text, der links vor dem sich ändernden Wert steht. Wird denn nicht die eingestellte Größe des Static übernommen, die ich Anfangs eingestellt habe?

Code: Alles auswählen

local oDlg
local oStatic1, oStatic2

oDlg := XbpDialog():new(SetAppWindow(),,{4,30},(1000,170})
oDlg:create()

oStatic1 := XbPStatic():new(oDlg,,{1,10},{50,20})
oStatic2 := XbpStatic():new(oDlg,,{30,10},{100,20})

oStatic1:caption := "Wert1:"
oStatic1:option  := XBPSTATIC_TEXT_RIGHT+XBP_STATIC_TEXT_VCENTER
oStatic1:create()

oStatic2:caption := "11111"
oStatic2:option  := XBPSTATIC_TEXT_RIGHT+XBP_STATIC_TEXT_VCENTER
oStatic2:create()

oStatic2:setCaption("22222")
Die Zahlen für die Größe und der Position sind jetzt blind gewählt, um es darzustellen.

(ich habe die Lösung mal so probiert, weil ich nichts besseres kenne.)
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite

Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 13137
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Kontaktdaten:

Beitrag von Jan » Mo, 22. Mai 2006 14:30

Manfred,

warum machst Du nicht ein

oStatic2:caption := "22222"
oStatic2:configure()

? Mit :configure() werden Änderungen, die erst nach dem :create() durchgeführt wurden, aktualisiert.

Jan

Rolf
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 258
Registriert: Do, 27. Apr 2006 12:28
Wohnort: Görlitz

Beitrag von Rolf » Mo, 22. Mai 2006 14:31

Hallo Manfred

So wie ich das sehe überzeichnet das oStatic1 bei Änderung das oStatic2.

Das oStatic1 ist an Position X=1 und Y=10 und hat eine Breite von 50 und eine Höhe von 20 Pixel.

Das oStatic2 beginnt aber schon wieder bei X=30 und müsste eigentlich erst bei X=1+50 beginnen

Achte auch auf die Reihenfolge der Create()'s.

Gruß Rolf

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 18144
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Beitrag von Manfred » Mo, 22. Mai 2006 14:38

@ Rolf,

das habe ich mir gedacht, deshalb schrieb ich drunter, das die Werte nur pauschal sind um etwas stehen zu haben.

Die Abstände sind im Original schon richtig, denn beim :caption wird alles richtig angezeigt. Erst beim :setcaption() wird links überschrieben.
Und dafür habe ich im Moment keine Erklärung.

@Jan

da passiert das gleiche. Merkwürdig, zumal ich das :setcaption() woanders schon mit Erfolg einsetze.....
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite

Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 13137
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Kontaktdaten:

Beitrag von Jan » Mo, 22. Mai 2006 14:46

Manfred,

noch mal zum Verständnis: Was meinst Du mit links überschreiben? Hast Du vielleicht mal einen Bildschirmausdruck oder so etwas ähnliches?

Jan

Rolf
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 258
Registriert: Do, 27. Apr 2006 12:28
Wohnort: Görlitz

Beitrag von Rolf » Mo, 22. Mai 2006 14:49

Hallo Manfred

steht irgendwo oStatic1:autoSize := .T., damit wird auch die Größe angepasst. Im Defaultfall ist das auf .F..

1. hast du noch andere Objekte die sich überdecken?
2. bitte führe mal nach dem setCaption() ein oDlg:invalidateRect() aus.
3. oder experimentiere mal mit oStatic1:clipSiblings
4. verschieb oder dreh die create-Reihenfolge mal um


Gruß
Rolf

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14590
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Beitrag von brandelh » Mo, 22. Mai 2006 14:51

Hallo,

:setCaption()

ist das gleiche wie

:caption()
:configure

nur wenn man mehrere Infos ändern will, soll man dies auf die zweite Art machen, da es dann schneller ist. Was die Breite angeht, eigentlich dürfte sich die Ausdehnung des statics nicht ändern. Wenn der Text zu breit wird müßte dieser abgeschnitten werden. ABER wenn er vorher schon überlagert hat, könnte das erneute setCaption die Zeichenreihenfolge ändern.

22222 müßte aber gleich groß wie 11111 sein.
Gruß
Hubert

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 18144
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Beitrag von Manfred » Mo, 22. Mai 2006 15:19

Yepp,

Fehler gefunden.

Ich sage es mal ganz salopp, der rechte Wert hat den linken Wert nicht überlagert, sondern unterlagert und das wurde dann zu einer Überlagerung beim :setcaption(). merkwürdig, wo doch der linke TExt zuerst angezeigt wird. Da müßte doch dieser dann auch überschrieben werden, wenn der rechte Wert erst danach erzeugt und angezeigt wird?

So was blödes aber auch. Wie kann man denn so was überhaupt anzeigen lassen, ohne den XPPFD zu benutzen?

Aber wo wir gerade dabei sind, habe ich überhaupt eine Chance den rechten Wert, oder egal welchen, irgendwie vertieft, oder erhöht anzeigen zu lassen? Ich hatte das mal versucht, aber es gab nur eine Erhöhung, oder Vertiefung, die keinen Text anzeigte.

Das kostet alles Nerven.......
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite

Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 13137
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Kontaktdaten:

Beitrag von Jan » Mo, 22. Mai 2006 15:21

sondern unterlagert und das wurde dann zu einer Überlagerung beim :setcaption().
Wovon redet der Mann??? Muß ich das verstehen?

Jan

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 18144
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Beitrag von Manfred » Mo, 22. Mai 2006 15:28

Neeneenee,

wer soll das verstehen?

Was ich meinte war folgendes:

Ich habe einen Text erzeugt, der links am Rand anfängt. Am Ende dieses Textes sollte ein Wert erscheinen, der immer wieder aktualisiert wird.

Text: Wert

Dieser Wert wird anfangs mit :caption := "11.11.1111" belegt und erscheint dann so:

Text: 11.11.1111

Dann habe ich das mit :setcaption("22.22.2222") geändert

und das sah dann so aus

_____22.22.2222 (den Unterstrich muß man wegdenken, ich kriege mit Leerzeichen den Abstand nicht so hin)

Links war der Text weg.

Jetzt war ich aber bis vorhin der Meinung, dass, wenn der Text zuerst steht und der Wert "unsichtbar, weil zu breit" nach dem TExt angezeigt wird, dann sofort den TExt überschreiben müßte. Dem war aber nicht so. Es ist erst nach dem :setcaption() passiert.

PS: Ja, war etwas sehr unglücklich erklärt......
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite

Rolf
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 258
Registriert: Do, 27. Apr 2006 12:28
Wohnort: Görlitz

Beitrag von Rolf » Mo, 22. Mai 2006 15:31

Ja Manfred

Nimm einfach 2 Statics eins erhöht (XBPSTATIC_TYPE_RAISEDRECT) und ein normales. Siehe xbpStatic:type

und in der Xbase-Hilfe zu xbpStatic:caption steht:

Wenn ein XbpStatic-Objekt zur Anzeige von Linien, Rahmen oder Boxen verwendet wird, wird die Caption nicht angezeigt. Die Ausnahme bildet der Typ XBPSTATIC_TYPE_GROUPBOX, bei dem ein Rahmen mit einem Titel (Caption) links oben angezeigt wird.

Gruß Rolf
Zuletzt geändert von Rolf am Mo, 22. Mai 2006 15:31, insgesamt 1-mal geändert.

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14590
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Beitrag von brandelh » Mo, 22. Mai 2006 15:31

Hallo Manfred,

Wenn autosize := .f. ist, gilt:

PosX + SizeX Werte (jeweils im Array verpackt) eines Controls müssen kleiner sein als der PosX Wert des folgenden. Die Reihenfolge im Create bestimmt die Anzeigereihenfolge (Z-Order heißt das glaube ich), ein neues Configure kann diese jedoch ändern, was bei setCaption passiert, daher am besten nicht überlagern lassen !

Wenn du mit Tiefstellen sowas meinst 22 etc. geht das nicht, da eine Caption immer nur eine Schriftart und Größe haben kann - denke ich jetzt mal.
Gruß
Hubert

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14590
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Beitrag von brandelh » Mo, 22. Mai 2006 15:33

Hallo Manfred,

NIE mit Leerzeichen positionieren !

Nimm mehrere unabhängige Statics wenn du sowas brauchst, oder versuche mit chr(9) einen Tabsprung.
Gruß
Hubert

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 18144
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Beitrag von Manfred » Mo, 22. Mai 2006 15:35

brrrrrrrrrr,

wenn man einmal mit dem Gedöns angefangen hat, dann findet man kein Ende mehr. Eigentlich wollte ich ja nur im Textmodus alles programmieren, aber mit jedem neuen Abschnitt versucht man den nächsten usw. usw. Und dann raucht einem der Kopf.
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 18144
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Beitrag von Manfred » Mo, 22. Mai 2006 15:37

brandelh hat geschrieben:Hallo Manfred,

NIE mit Leerzeichen positionieren !

Nimm mehrere unabhängige Statics wenn du sowas brauchst, oder versuche mit chr(9) einen Tabsprung.
?

Hubert, die Leerzeichen waren gerade nur für das Forum. Ich formatiere im Programm nicht mit Leezeichen. (glaube ich jedenfalls)
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 18144
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Beitrag von Manfred » Mo, 22. Mai 2006 15:41

Habe das Teil wieder entfernt, war zu groß...

@Hubert,

was ich meinte, war, Erhaben, bzw. Eingedrückt.
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite

Rolf
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 258
Registriert: Do, 27. Apr 2006 12:28
Wohnort: Görlitz

Beitrag von Rolf » Mo, 22. Mai 2006 16:31

@Manfred

zu deinem Quelltext

Meine Anfänge mit GUI sahen auch so aus, alles sehr Funktionsorientiert.
Die ganzen Wiederholungen von einzelnen Zeilen kann man eigentlich nur über Schleifen (+Arrays) ,den &Makro-Operator oder durch geziehlte benutzerdefinierte Funktionen umgehen.

Ich würde dir mal eine E-Mail mit einem einfachen Objekorientierten Dialog schicken. Wenn du möchtest sag bescheid.

Aller Anfang ist schwer. :wink:

Rolf

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 18144
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Beitrag von Manfred » Mo, 22. Mai 2006 16:35

Rolf hat geschrieben:@Manfred

zu deinem Quelltext

Meine Anfänge mit GUI sahen auch so aus, alles sehr Funktionsorientiert.
Die ganzen Wiederholungen von einzelnen Zeilen kann man eigentlich nur über Schleifen (+Arrays) ,den &Makro-Operator oder durch geziehlte benutzerdefinierte Funktionen umgehen.

Ich würde dir mal eine E-Mail mit einem einfachen Objekorientierten Dialog schicken. Wenn du möchtest sag bescheid.

Aller Anfang ist schwer. :wink:

Rolf
Hi Rolf,

das wäre nett. Ich muß jetzt irgendwie Beispiele sammeln und anhand derer ausprobieren.
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite

Rolf
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 258
Registriert: Do, 27. Apr 2006 12:28
Wohnort: Görlitz

Beitrag von Rolf » Mo, 22. Mai 2006 16:49

So geschehen

gesendet :arrow:

Hoffe es hilft mehr als das es verwirrt. Ist auch noch nicht das optimale aber ich arbeite daran.

Gruß Rolf
Zuletzt geändert von Rolf am Mo, 22. Mai 2006 16:54, insgesamt 1-mal geändert.

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 18144
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Beitrag von Manfred » Mo, 22. Mai 2006 16:51

Hi Rolf,

danke erhalten, aber könntest Du die Mailadresse hier wieder entfernen....

Danke.
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 18144
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Beitrag von Manfred » Mo, 22. Mai 2006 17:04

Ich habe jetzt einmal die 1. Felder und Texte Erhaben anzeigen lassen um überhaupt einmal sehen zu können, wie groß ich die dimensioniert habe. Also das haut mich noch vom Hocker. Wie formatiert man denn überhaupt GUI Felder? Nach der neuen Anzeige mußte ich feststellen, das etliches überschrieben wird/wurde, was man so gar nicht erkennen kann.
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite

Rolf
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 258
Registriert: Do, 27. Apr 2006 12:28
Wohnort: Görlitz

Beitrag von Rolf » Mo, 22. Mai 2006 17:25

Hi Manfred

hab die Frage nicht wirklich verstanden. Meinst du mit Formatieren die Größe festlegen.

Im Gegensatz zu DOS ist bei GUI die Größe von Steuerelemente abhängig von der aktuellen Auflösung also

Code: Alles auswählen

aSize := AppDesktop():currentSize()
. Kann allerdings auch von der Schriftart abhängen wenn :autosize:=.T.

Ich zeichne meine Dialoge meist kurz in Paint vor und setze sie dann um.

Bei Überschneidungen von Statics kann man auch :setColorBG() verwenden.

Die Reihenfolge der Create()'s entspricht auch der TabStop-Reihenfolge.

Gruß
Rolf

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 18144
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Beitrag von Manfred » Mo, 22. Mai 2006 17:38

Hi Rolf

verflixt, ich muß mich langsam daran gewöhnen, dass die ganzen Parts auch noch von anderen erben und somit Methoden haben, die man nur in der Superklasse findet und nicht in der geerbten.

Danke nochmals für den Tipp.

PS: Ich habe groß die ganze Klassenhirarchie vor mir hängen und vergesse regelmäßig darauf zu schauen.....

Mit dem Formatieren meinte ich Größe festlegen...
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14590
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Beitrag von brandelh » Mo, 22. Mai 2006 17:41

Manfred hat geschrieben:Ich muß jetzt irgendwie Beispiele sammeln und anhand derer ausprobieren.
Hallo Manfred,

wenn du im XppFD einen Dialog erstellst und als Class-Code speicherst, erhälst du schöne Beispiele, so habe ich auch angefangen.
Auch das MDI Beispiel war sehr nützlich.
Dann gibt es noch eines mit den Fenstereigenschaften.
Gruß
Hubert

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 18144
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Beitrag von Manfred » Mo, 22. Mai 2006 17:43

Hi Hubert,

da habe ich auch schon die ganze Zeit drüber nachgedacht, aber irgendwie habe ich eine leichte Abneigung gegenüber dem FD. Frage mich nicht warum....
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite

Antworten