Textfeld wert zuweisen

Eigentlich ist mir die Frage peinlich, aber es kann sonst niemand helfen ... :)

Moderator: Moderatoren

Antworten
Alfred
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 476
Registriert: Do, 03. Mai 2007 12:37
Wohnort: München

Textfeld wert zuweisen

Beitrag von Alfred »

Hallo,

ich habe mir mit dem Formdesigner ein Formular erstellt und dieses
beinhaltet ein Textfeld und einen Pushbutton.

Der Funktioncode wird ohne Fehler compiliert und gelinkt(Dank an Hubert
für sein XB.file).

Wenn ich auf den Pushbutton drücke möchte ich dass sich der Text im
Textfeld ändert.

oXbp:activate :={||oStatic1:caption := "Hello World!"}

reicht offensichtlich nicht aus. Wo liegt mein Denkfehler?

Der Formulardisgner sagt sowohl beim Pushbutton als auch bei
dem Staticfeld oXbp := ...... . Wie weist man der Caption des Staticfeldes
dann einen Wert zu?

Gruß

Alfred
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Textfeld wert zuweisen

Beitrag von brandelh »

Alfred hat geschrieben:ich habe mir mit dem Formdesigner ein Formular erstellt und dieses beinhaltet ein Textfeld und einen Pushbutton.
...
oXbp:activate :={||oStatic1:caption := "Hello World!"}
Das Zuweisen an die Instanzvariable :caption reicht aus, wenn danach ein :create() oder :configure() folgt, im Programm selbst nimmt man eine spezielle Methode

Code: Alles auswählen

oXbp:activate :={||oStatic1:setCaption("Hello World!")}
bei einem SLE - das man eher für Eingaben nutzt - wäre es :setData() ...

Im Handbuch stehen die Instanzvariablen unterteilt in KONFIGURATION, das ist alles in INIT und :create() wird noch ausgeführt und in Laufzeit oder Callback (Reaktion auf Ereignisse) unterteilt. Nur letztere können Änderungen direkt bewirken.
Zuletzt geändert von brandelh am Mi, 16. Mai 2007 13:01, insgesamt 1-mal geändert.
Gruß
Hubert
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16509
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Alfred,
ist es ein XbpStatic? Dann oStatic1:SetCaption("Hello World!" ).
Oder ist es ein XbpSle (weil Du auch "Textfeld" geschrieben hast)? Dann oStatic1:SetData("Hello World!")

Viele Grüße,
Martin
Zuletzt geändert von Martin Altmann am Mi, 16. Mai 2007 13:01, insgesamt 1-mal geändert.
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9358
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Beitrag von Tom »

Hallo, Alfred.

Ich bin nicht sicher, was Du mit Textfeld meinst. Ich würde eher ein XbpSLE als Textfeld bezeichnen, wohingegen ein Static TYPE TEXT eine statische Textanzeige ist. Jedenfalls läßt sich bei letzterem der "Inhalt" so setzen:

oXbp:SetCaption('Hallo, Welt')

wohingegen bei einem SLE (also einem Single Line Edit, einem Eingabefeld) mit :SetData() gearbeitet werden muß.

Übrigens auch von mir ein verspätetes "Herzlich willkommen im Forum!"
Herzlich,
Tom
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Heute läufts aber mit den Antworten :D
Gruß
Hubert
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9358
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Beitrag von Tom »

2D1G. :lol:

@Alfred: Der Form-Designer und diese Art, sich mit den XbParts zu beschäftigen, ist ein steiniger Weg. Schau Dir doch mal Tools wie eXpress++ oder TopDown an, die erleichtern den Umstieg auf GUI wirklich sehr, und man kann trotzdem nach und nach eine Menge über Objekte und Anzeigeelemente lernen.
Herzlich,
Tom
Alfred
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 476
Registriert: Do, 03. Mai 2007 12:37
Wohnort: München

Beitrag von Alfred »

Hallo,

vielen Dank an alle, es läuft wie gewünscht

@tom
Kann ich denn davon ausgehen, dass xbase 1.9 und express++ richtig zu-
sammen arbeiten? Dass die Demo nach 6 Monaten immer noch nicht
korrigiert ist und keine Antwort auf meine e-mail erfolgt, hat mich bislang
vom Kauf abgeschreckt.

Welche von beiden(express++ oder topdown) macht denn in meinem Fall
am meisten Sinn:

Ich programmiere eigentlich meistens folgende Abläufe:

Wert in ein Maskenfeld eingeben, beim Verlassen wird ein kleines
Programm(Foxpro: Valid-Clause; Access: Afterupdate_Ereignis)
aufgerufen, um z.B. den Kundennamen anzuzeigen.

Gruß

Alfred
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9358
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Beitrag von Tom »

Hallo, Alfred.

Ich benutze eXpress++ seit 1998 und wir liefern seit fast einem Jahr eine mit Xbase++ 1.9 und eXpress++ erzeugte Version unserer Software an viele hundert Kunden aus. Der Link auf Rogers Site verweist auch auf eine 1.9-Demo. Sollte also funktionieren.

Code: Alles auswählen

#include 'dcdialog.ch'

@ 1,1 DCSAY "Name:" GET cName SAYSIZE ... GET SIZE ... SAYTOOLTIP .. GETTOOLTIP .. WHEN .. EDITPROTECT .. PICT .. VALID .. POPUP ... LOSTFOCUS {||MyCheckValue(cName)}

DCREAD GUI
Feddisch. (Die ganzen Optionen mit den zwei Punkten sind nur ein Abriß dessen, was mit eXpress++ innerhalb einer Zeile möglich ist, ohne sich durch tonnenweise immer gleichen Objektcode quälen zu müssen.)
Herzlich,
Tom
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hallo,

wenn du es nur für dich machst und nichts gegen den Clipper Look hast,
würde ich bei den @ say get bleiben. Da brauchst du von Clipper kaum umlernen, und kannst dennoch alle 32 bit Vorteile nutzen (drucken, Dateinamen etc.).

Der Einwand mit den Versionen und der Zukunftssicherheit hält mich
auch vom Einsatz von allzuviel Fremdsoftware ab (habe nur SQL Express).

Ich habe damals mit dem MDI Beispiel angefangen und dieses ausgebaut.
Heute ist man aber ja wieder von MDI abgekommen und SDI ist auch nicht schlecht, solange es einfache Programme bleiben. Der XppFD ist halt recht schwach, besonders beim REDO und auch mit der Maus macht man öffters was was man eigentlich nicht wollte.
Also oft zwischenspeichern.

Hier ist z.B. eine Vorlage für eigenen Programme:

C:\ALASKA\XPPW32\SOURCE\samples\apps\SdiDemo
Gruß
Hubert
Alfred
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 476
Registriert: Do, 03. Mai 2007 12:37
Wohnort: München

Beitrag von Alfred »

Hallo,

wenn mein Programm sich öffnet, habe ich 2 Fenster offen

1) hello_world_2b.exe
2) Mein erstes Alaskaformular.

Kann mich erinnern, dass ich bei einem VFP-Artikel gelesen habe, dass dies
für eine Windowsprogrammierung notwendig ist und man aber das 1.
Formular unsichtbar machen kann.

Gruß

Alfred
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hallo Alfred,

was ist 'mein erstes Alaska Formular' ?

Meinst du das schware Fenster, das wie eine CMD-Box aussieht in dem die @say get Clipper Programme erscheinen ?

Dieses braucht man NUR wenn man Clipperstyle programmieren will.

Wenn nicht wird es abgeschaltet, indem man einen AppSys() Prozedur einfügt und somit die standard Prozedur ersetzt. So zum Beispiel:

Code: Alles auswählen

procedure AppSys()
return
Aber jetzt muss man sich natürlich auch um alles kümmern.
Eventuell ist es sinnvoller eine AppSys.PRG anzupassen. Näheres steht in der Hilfe wenn man nach AppSys() sucht. In dem SDI Beispiel steht z.B. eine angepaßte, die kein schwarzes Fenster mehr liefert.
Kann mich erinnern, dass ich bei einem VFP-Artikel gelesen habe, dass dies für eine Windowsprogrammierung notwendig ist und man aber das 1. Formular unsichtbar machen kann.
Ich kenne mich zwar mit VFP nicht aus, aber ich entwickle z.b. auch CGI-Webanwendungen. Diese haben überhaupt kein Fenster, obwohl sie teilweise mit PM Schalter gelinkt sind weil sie grafische Elemente nutzen (Drucken, XbpBitmap). Nur macht das in einem 'normalen' Programm wenig Sinn, da man ja nichts sieht.
Ein weiteres Beispiel für 'echte' Windowsprogramme ohne Oberfläche sind die ganzen Systemdienste, man sieht sie nicht aber sie arbeiten doch :D
Gruß
Hubert
Alfred
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 476
Registriert: Do, 03. Mai 2007 12:37
Wohnort: München

Beitrag von Alfred »

Hallo Hubert,

Code: Alles auswählen

procdure AppSys()
return
ist die Lösung für mein kleines Programm.

Das SDI-Beispiel werde ich mir in den nächsten Tagen mal in Ruhe ansehen.

Gruß

Alfred
Daniel

Beitrag von Daniel »

brandelh hat geschrieben: Heute ist man aber ja wieder von MDI abgekommen und SDI ist auch nicht schlecht, solange es einfache Programme bleiben.
Der XppFD ist halt recht schwach, besonders beim REDO ...
Hallo Hubert

darf ich dazu auch was fragen?
Wieso ist man von MDI wieder abgekommen (was hiess nochmal MDI / SDI?)
Was sind denn da Vor- und Nachteile?

Meine Erfahrung: mit dem XppFD kann man leben, so lange es nichts besseres gibt ...
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16509
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Daniel,
MDI heißt Multi Document Interface (z.B. Word: Du hast in dem Fenster von Word beliebig viele Dokumente in einzelnen (Unter-)Fenstern offen).
SDI heißt Single Document Interface (z.B. der alte Internet Explorer: In Deinem Browser hast Du immer nur eine Webseite angezeigt).

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Martin Altmann hat geschrieben:MDI ... z.B. Word
die neueren Word Versionen verwenen wieder ein SDI Konzept. ;-)

Ein älteres Word (bzw. MDI Program) ist unten in der Taskleiste einmal zu sehen und schaltet intern von Child-Fenster zu Child-Fenster (Brief...). Das hat den Vorteil, dass man mit einem Klick alles vom Bildschirm weg bekommt um z.B. mit einem anderen Programm Zwischenergebnisse zu berechnen. Allerdings wird der Platz für die Child Fenster immer kleiner, da diese ja in dem MDI Container gebunden sind. Das MDI Child Fenster kann den Rahmen der Anwendung nicht verlassen.
Nun wurden die Rahmen außen bei XP größer, die Anzahl der Hilfsleisten in den Programmen wurde stark erhöht (ich meine Word ist schon bei 4 ...) und somit der Platz für den Text immer kleiner.

Heute wird dies als getrennte Fenster angezeigt, da kann man leichter von einem zum Text über die Taskleiste schalten, allerdings wird diese auch immer voller. Ich selbst verwende MDI für komplexere Programme. Z.B. Programm zur Rentenberechnung darin kann man dann unzählige Childfenster öffnen um die Renten für verschiedene Personen zu berechnen. Das macht natürlich so keiner, aber wenn z.B. gerade die Daten in einem Fall eingegeben werden ruft jemand an und will Auskunft zu seinen Daten. Dann wird einfach ein neues Child aufgemacht und das alte geht in den Hintergrund.
Im MDI Beispiel von Xbase++ kann man auch verschiedene Fensterarten (Artikel, Rechnung etc.) sehen.

Einfachere Programme wie z.B. ein Taschenrechner ... macht man SDI.

Ist natürlich auch eine Frage des persönlichen Geschmacks.
Gruß
Hubert
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Beitrag von Rolf Ramacher »

Hallo Alfred,

anfangs habe ich auch den Formdesigner verwendet. Da ich mit
static, sle, pushbutton im xbpdialog eigentlich nur arbeite kopiere ich die entsprechenden Fenster in meine PRG und passe die Größe und Inhalte an.
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Antworten