Re: Aufbau von mit NAME erzeugter Objekte
From: Jürgen Wondzinski (woody_at_prolib.de)
Date: 01/06/05
- Next message: Christoph Dreßler: "Re: EDIFACT-Schnittstelle"
- Previous message: Jürgen Wondzinski: "Re: Wie füllt man ein Memofeld aus einer Ecel Tabelle"
- In reply to: Winfried Wolf: "Re: Aufbau von mit NAME erzeugter Objekte"
- Next in thread: Winfried Wolf: "Re: Aufbau von mit NAME erzeugter Objekte"
- Reply: Winfried Wolf: "Re: Aufbau von mit NAME erzeugter Objekte"
- Messages sorted by: [ date ] [ thread ]
Date: Thu, 6 Jan 2005 16:00:55 +0100
Hi Winfried,
du hast da nen etwas falschen Ansatz. Die WINDOW Klausel bei
EDIT/BROWSE/CHANGE sagt aus, dass das EDIT-Fenster einige Eigenschaften der
angegebenen Fenster-Definition übernimmt, es heisst nicht, dass dieses
Fenster tatsächlich ins Leben gerufen wird! Daher reicht es vollkommen aus,
mittels DEFINE WINDOW das Fenster quasi als "XBase-Klassendefinition" zu
beschreiben.
Um auf die EDIT bezogenen Ereignisse zu reagieren, musst du dem EDIT selbst
mittels der NAME Klausel eine Objektreferenz zuweisen:
EDIT WINDOW PreviewWin NAME oTest
Nun könntest du mit oTest.Caption zB den Titel verändern. Oder die Position
und die Grösse... Wobei man dann zum Schluss kommt, dass man dann die WINDOW
Option gar nicht mehr braucht, eidieweil diese paar Fensterdefinitionen auch
direkt über die Objektreferenz einstellbar sind! Also besser so:
EDIT Name oEdit FOR .....
Nun kannst du zumindest im Befehlsfenster mittels oEDIT drauf zugreifen und
am lebenden Objekt (dank Intellisense) drin rumgurken. Dabei stellst du
dann fest, dass EDIT/BROWSE/CHANGE eigentlich nix anderes als ein GRID ist,
d.h. mit
oEdit.Column1.Header1.Caption = "Woody wars!"
kannst du die Spaltenüberschrift ändern usw.
Ganz nebenbei beweist dies ausserdem, dass VFP intern komplett
objektorientiert ist, und die klassischen xBase Befehle über Wrapper auf die
Objekte mappt. Die NAME Option kann man übrigens bei vielen xBase
interface-Objekten angeben, so zb auch bei SAY und GETs, und kann so auf die
zugrunde liegende Textbox zugreifen. Diese Technik ist besonders
interessant, wenn man alten 2.x Code in VFP Stück für Stück hochpäppeln
will: Trotz altem @GET / READ CYCLE hast du auch nen durchgängigen
Objektzugriff und kannst so Sachen einstellen, die es im alten 2.x Modus
nicht gab (zB Listbox-Spalten etc.)
Das funktioniert so schon seit der VFP3, und wenn man sich den alten
GENSCREEN.PRG so umbaut, dass er beim Generieren der SPRs gleich die NAME
Option dazugeneriert kann die Original 2.x Programme direkt in VFP
einbinden...
Aber zurück zum Thema: Ein Problem hast du noch: Im normalen Programm-Modus
ist der BROWSE/EDIT ja ein "modaler" Befehl, und der Objektzugriff auf oEdit
würde ja erst zum Tragen kommen, wenn du den EDIT schon wieder beendet
hast... Ein Ausweg wäre EDIT NOWAIT, aber dann bräuchtest du irgend nen
anderen Wartezustand im Programmlauf. Ne andere Lösung ist, sich einen
Prozeduraufruf in der BROWSE/EDIT Engine zu suchen, der beim Start vom
Browse ausgeführt wird..
Dazu bietet sich der BROWSE WHEN an, dem d eine Prozedur unterjubelst, die
beim ersten Mal (Flag setzen!) deine ganzen Objekteigenschaften setzt, die
BindEvents durchführt, und danach immer nur ein .T. zurückgibt.
Auf die Weise kann man auch nem klassischen BROWSE den durchgehenden
Selektionsbalken unterjubeln:
*********************************************
USE (_samples + "\data\customer.dbf")
BROWSE WHEN BrowseTest() NAME oShit
PROCEDURE BrowseTest
WITH oShit as Grid
IF EMPTY(.Comment)
.DeleteMark= .F.
.HighlightStyle = 2
.AllowCellSelection = .F.
.SetAll("DynamicBackColor", ;
"IIF(MaxOrdAmt > 5000, 16777175, 16758783)",;
"Column")
.Comment = "wOOdy wars!"
ENDIF
.AutoFit()
ENDWITH
*********************************************
Servus
wOOdy
|\_/| ------ ProLib - programmers liberty -----------------
(.. ) Unsere MVPs und MCPs bringen den Fuchs zum Laufen....
- / Besuchen Sie uns auf www.prolib.de und www.AFPages.de
-----------------------------------------------------------
- Next message: Christoph Dreßler: "Re: EDIFACT-Schnittstelle"
- Previous message: Jürgen Wondzinski: "Re: Wie füllt man ein Memofeld aus einer Ecel Tabelle"
- In reply to: Winfried Wolf: "Re: Aufbau von mit NAME erzeugter Objekte"
- Next in thread: Winfried Wolf: "Re: Aufbau von mit NAME erzeugter Objekte"
- Reply: Winfried Wolf: "Re: Aufbau von mit NAME erzeugter Objekte"
- Messages sorted by: [ date ] [ thread ]
Relevant Pages
|