PDA

View Full Version : Wie kann ich ein Objekt in einer Property speichern?



Roman Köhler
11-Aug-2011, 10:56 AM
Hallo,

ich versuche gerade die cDbCJGridColumn an meine Bedürfnisse anzupassen. Im Moment arbeite ich daren, ganze Zeilen, in Abhängigkeit bestimmter Werte in dieser Zeile (in einer beliebigen Spalte) einzufärben.
D.h. Ist der Betrag >= 100, soll die Schrift rot werden. Ist auf Objektebene auch ganz einfach, ich möchte aber eine columnKlasse schaffen, in welcher der Vergleich ganz allgemein definiert wird.

Die folgenden Beispiele basieren auf der Order.vw
1. Beispiel funktioniert auf Objektebene:
In diesem Beispiel wird die Schrift rot, wenn der Wert der Spalte 'oOrderDtl_Extended_Price' < 100 ist.

Object OrderDtl_DD is a OrderDtl_DataDictionary
Set DDO_Server to OrderHea_DD
Set DDO_Server to Invt_DD
Set Constrain_File to OrderHea.File_Number

Function Schriftfarbe String sValue Returns String
If (sValue >= 100) Function_Return clBlack
Else Function_Return clRed
End_Function

End_Object // OrderDtl_DD

...
Object oInvt_Item_ID is a cDbCJGridColumn
Entry_Item Invt.Item_ID
Set piWidth to 90
Set psCaption to "Item ID"
Set psImage to "ActionPrompt.ico"

Procedure OnSetDisplayMetrics Handle hoGridItemMetrics Integer iRow String sValue
Number nPrice
String sCellValue

Get RowValue of oOrderDtl_Extended_Price iRow to sCellValue
Set ComForeColor of hoGridItemMetrics to (Schriftfarbe(OrderDtl_DD, sCellValue))
End_Procedure

End_Object



2. Jetzt versuche ich das Ganze in eine Klasse zu schreiben.
D.h. ich muss alle fsten Objektbezeichnungen variabel machen. In diesem Fall z.B. 'oOrderDtl_Extended_Price'
Das sieht bei mir so aus:

Class mycDbCJGridColumn is a cDbCJGridColumn
Procedure Construct_Object
Forward Send Construct_Object
Property Handle phObjectIDToCompare
End_Procedure

Procedure OnSetDisplayMetrics Handle hoGridItemMetrics Integer iRow String sValue
String sCellValue
Handle hObjectIDToCompare

Move (phObjectIDToCompare(Self)) to hObjectIDToCompare

Get RowValue of hObjectIDToCompare iRow to sCellValue
Set ComForeColor of hoGridItemMetrics to (Zeilenfarbe(OrderDtl_DD, sCellValue))
End_Procedure
End_Class

Object oInvt_Description is a mycDbCJGridColumn
Entry_Item Invt.Description
Set piWidth to 211
Set psCaption to "Description"
Set phObjectIDToCompare to (oOrderDtl_Extended_Price(Self))
End_Object


Nun bringt mir aber das Programm genau an der ersetzten Stelle einen Fehler:

Get RowValue of hObjectIDToCompare iRow to sCellValue

Hat jemand eine Idee, wie ich eine Objektbezeichnung in einer Property speichern kann, um sie später abzurufen?
Komme irgendwie nicht weiter.

Vielen Dank schonmal im Voraus.
Roman

FrankValcarcel
11-Aug-2011, 02:21 PM
Hier ist ein bieschpiel. cCoveCJGridColumn ist unsere normale GridColumn Classe.


Class cCovePopupCJGridColumn is a cCoveCJGridColumn
Procedure Construct_Object
Forward Send Construct_Object
Set piWidth to 100
Set pbVisible to True
Set pbShowInFieldChooser to True
Set pbResizable to True
Set peHeaderAlignment to xtpAlignmentCenter
End_Procedure
Procedure OnSetDisplayMetrics Handle hoMetrics Integer iRow String ByRef sValue
Handle hoFont hoCol
String sHold
Variant vFont

Get ColumnObject 0 to hoCol
If (Self = hoCol) Begin
Get Create (RefClass(cComStdFont)) to hoFont
Get ComFont of hoMetrics to vFont
Set pvComObject of hoFont to vFont
Set ComBold of hoFont to True
If (iRow = 0) Begin
Set ComItalic of hoFont to True
Set ComBackColor of hoMetrics to clYellow
End
Send Destroy of hoFont
End
If (Right(sValue,1) = "~") Begin // Comment
Set ComBackColor of hoMetrics to clLime
End
End_Procedure
End_Class

Roman Köhler
12-Aug-2011, 04:30 AM
Hallo Frank,

erst einmal vielen Dank für Deine Antwort.
Leider kann ich in ihr nicht die Lösung meines Problems erkennen.
Vielleicht sehe ich sie nicht, vielleicht habe ich mich auch nicht verständlich ausgedrückt. Ich versuche es daher nochmals:

Ich möchte eine Column-Klasse erstellen, die sich automatisch einfärbt, wenn ein anderes Column-Objekt einen gewissen Wert hat. Da ich zum Zeitpunkt der Klassenerstellung aber nicht weiß, wie der spätere Objektname meiner VergleichsColumn heißt, müsste ich ihn irgendwie als Property speichern, um ihn später während der Laufzeit auswerten zu können.

Ich hoffe, das ist irgendwie verständlich.

Viele Grüße
Roman Köhler