xbpstatic und :setcaption()

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

xbpstatic und :setcaption()

Beitrag von Manfred »

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 Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Beitrag von Jan »

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 »

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: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

@ 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 Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Beitrag von Jan »

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 »

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: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

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: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

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 Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Beitrag von Jan »

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: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

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 Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Rolf
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 258
Registriert: Do, 27. Apr 2006 12:28
Wohnort: Görlitz

Beitrag von Rolf »

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: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

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: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

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: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

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 Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

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 Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

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

@Hubert,

was ich meinte, war, Erhaben, bzw. Eingedrückt.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Rolf
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 258
Registriert: Do, 27. Apr 2006 12:28
Wohnort: Görlitz

Beitrag von Rolf »

@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: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

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 Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Rolf
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 258
Registriert: Do, 27. Apr 2006 12:28
Wohnort: Görlitz

Beitrag von Rolf »

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: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Hi Rolf,

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

Danke.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

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 Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Rolf
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 258
Registriert: Do, 27. Apr 2006 12:28
Wohnort: Görlitz

Beitrag von Rolf »

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: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

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 Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

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: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

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 Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Antworten