Form von einer bestehenden ableiten und implementieren
-
Hallo zusammen,
hab ein kleines Problem. Naja vielmehr ein großes

Ich setze die ExpressScheduler Komponenten von DevExpress ein.
Dort versuche ich nun die EventEditor Form zu modifizieren und in mein Projekt zu integrieren. Das hinzufügen zum Projekt und die modifizierung der Form ist dabei kein Problem. Ich bekomm das einfach nicht hin, dass anschließend meine modifizierte Form aufgerufen wird, wenn versucht wird ein Neues Ereignis zu erfassen.Es gibt zwar in der KnowledgeBase von DevExpress einen Eintrag, wie man dies bewerkstelligt aber damit komm ich nicht wirklich klar. Ist für Delphi und ich habe keine Ahnung wie ich das auf C++ portiere.
Wär super, wenn jemand einen Tipp für mich hätte.
Hier der Link zum Knowledgebase Eintrag. Vielleicht versteht das jemand von euch.
https://www.devexpress.com/kb=A2352
Es geht mir einfach nur darum, wie bekomme ich denn folgenden Delphi Code nach C++
[Delphi] unit CustomizedEventEditorForm; // ... type TcxSchedulerEventEditorCustomized = class(TcxSchedulerEventEditor) gbClient: TcxGroupBox; lbFirstName: TcxLabel; teFirstName: TcxTextEdit; lbLastName: TcxLabel; teLastName: TcxTextEdit; lbGender: TcxLabel; cbGender: TcxComboBox; private { Private declarations } protected procedure LoadEventValuesIntoControls; override; procedure UpdateEventValuesFromControls; override; public { Public declarations } end; var cxSchedulerEventEditorCustomized: TcxSchedulerEventEditorCustomized; implementation uses cxSchedulerDialogs; {$R *.dfm} procedure TcxSchedulerEventEditorCustomized.LoadEventValuesIntoControls; begin // call the parent’s method to load the data into the inherited editing controls // located on the form inherited LoadEventValuesIntoControls; try // load the data into the custom editing controls // no checking for a null value is needed. // The null value is automatically replaced with empty string in the editing controls teFirstName.EditValue := Event.GetCustomFieldValueByName('FName'); teLastName.EditValue := Event.GetCustomFieldValueByName('LName'); cbGender.EditValue := Event.GetCustomFieldValueByName('Gender'); except on E: Exception do ShowMessage('Can''t load data' + #13#10 + E.Message); end; end; procedure TcxSchedulerEventEditorCustomized.UpdateEventValuesFromControls; begin // call the parent’s method to post the data from the inherited editing controls // located on the form inherited UpdateEventValuesFromControls; try // post the data from the custom editing controls Event.SetCustomFieldValueByName('FName', teFirstName.EditValue); Event.SetCustomFieldValueByName('LName', teLastName.EditValue); Event.SetCustomFieldValueByName('Gender', cbGender.EditValue); FModified := True; except on E: Exception do ShowMessage('Can''t post data' + #13#10 + E.Message); end; end; initialization // to use the cxEventEditorClass constant include the cxSchedulerDialogs unit in the uses clause // indicate that the new Event modal dialog will be invoked at runtime cxEventEditorClass := TcxSchedulerEventEditorCustomized;Danke schonmal vorab
mfg
bopp2
-
Hallo
Ich versuch mal eine Konvertierung
// Header class TcxSchedulerEventEditorCustomized : public TcxSchedulerEventEditor { private : TcxGroupBox *gbClient; TcxLabel* lbFirstName; TcxTextEdit* teFirstName; TcxLabel* lbLastName; TcxTextEdit* teLastName; TcxLabel* lbGender; TcxComboBox* cbGender; protected : virtual void LoadEventValuesIntoControls(); virtual void UpdateEventValuesFromControls; public : }; // Unklar ob Stack oder Heap, Initialisierung muß in die Implementation TcxSchedulerEventEditorCustomized cxSchedulerEventEditorCustomized; // Implementation #include "cxSchedulerDialogs.h" void TcxSchedulerEventEditorCustomized::LoadEventValuesIntoControls() { TcxSchedulerEventEditor::LoadEventValuesIntoControls(); try { // Event hier unbekannt?! teFirstName->EditValue = Event.GetCustomFieldValueByName("FName"); teLastName->EditValue = Event.GetCustomFieldValueByName("LName"); cbGender->EditValue = Event.GetCustomFieldValueByName("Gender"); } catch(Exception e) { ShowMessage(AnsiString("Can't load data\r\n") + e.Message()); } } void TcxSchedulerEventEditorCustomized::UpdateEventValuesFromControls() { TcxSchedulerEventEditor::UpdateEventValuesFromControls(); try { // Event auch hier unbekannt? Event.SetCustomFieldValueByName("FName", teFirstName->EditValue); Event.SetCustomFieldValueByName("LName", teLastName->EditValue); Event.SetCustomFieldValueByName("Gender", cbGender->EditValue); FModified = true; } catch(Exception& e) { ShowMessage(AnsiString("Can't post data\r\n") + e.Message()); } } // Sinn unklar, Variable heißt hier anders als in der Headerdatei? cxEventEditorClass = TcxSchedulerEventEditorCustomized();bis bald
akari
-
Hallo,
vielen Dank für deine Antwort. Werde es nachher ausprobieren und berichten, ob es funktioniert hat. Vielen Dank nochmal.
mfg
bopp2
-
Hab das jetzt mal getestet, funktioniert aber nicht wirklich.
Bekomme den Fehler, dassvoid TcxSchedulerEventEditorCustomized::LoadEventValuesIntoControls()kein Element von TcxSchedulerEventEditorCustomized ist.
Vielleicht kennt noch jemand diese Komponente und hat dies schon erfolgreich umgesetzt. Bin für jeden Tipp dankbar.
Gruss
bopp2
-
Hallo
dann überprüf den Header, wo die Deklaration von TcxSchedulerEventEditorCustomized sein muß. Und zwar in so einer Form innerhalb des class-Scopes
virtual void LoadEventValuesIntoControls();bis bald
akari
-
Hab ich gemacht aber sobald das wie folgt deklariert wird,
virtual void LoadEventValuesIntoControls();gibt folgenden Fehler:
[C++ Fehler] formEventForm.h(40): E2113 Virtuelle Funktion 'TcxSchedulerEventEditorCustomized::LoadEventValuesIntoControls()' verursacht Konflikte mit der Basisklasse 'TcxSchedulerEventEditorForm'
-
So bin schon mal etwas weiter.
Wenn ich aber versuche die initialisierung vorzunehmen....
__fastcall TcxSchedulerEventEditorCustomized::TcxSchedulerEventEditorCustomized(TComponent* Owner) : TcxSchedulerEventEditorForm(Owner) { cxEventEditorClass = TcxSchedulerEventEditorCustomized; }Bekomme ich den Fehler:
[C++ Fehler] formEventForm.cpp(36): E2108 Ungültige Verwendung von typedef 'TcxSchedulerEventEditorCustomized'Hat diesbezüglich vielleicht noch jemand einen Tipp für mich ?
-
Hallo
wie und wo genau hast du denn cxEventEditorClass deklariert?
Desweiteren bist du dir hoffentlich im klaren, das du da semantischen Unsinn schreibst.
In dem Konstruktor von TcxSchedulerEventEditorCustomized soll ein weitere Instanz von TcxSchedulerEventEditorCustomized erstellt werden, für die natürlich auch der Konstruktor aufgerufen wird...
Das ist ein klarer Flaa von Stack-Overflow. Das steht garantiert nicht so im Delphi-Quellcode.bis bald
akari
-
Also ich versuche folgendes aus dem Delphi Code umzusetzen:
initialization // to use the cxEventEditorClass constant include the cxSchedulerDialogs unit in the uses clause // indicate that the new Event modal dialog will be invoked at runtime cxEventEditorClass := TcxSchedulerEventEditorCustomized;Die cxEventEditorClas ist im cxSchedulerDialogs.hpp deklariert, welche inkludiert ist.
Zur meiner Verteidigung muss ich sagen, dass ich bisher nicht wirklich was mit Klassen etc. gemacht habe. Steh da noch am Anfang. Mir wär für den Anfang schon geholfen, wenn ich wüsste wie ich das ganze initialisiere.