Von Delphi zu C++ Builder



  • Hallo,
    ich habe einen existirenden Form der wurde schon programmiert und ich möchte diesen Form ableiten und bunutzen damit ich mit meinem Form am Enden behalten kann mit allen was schon in den existierenden Form ist . aber ich habe eine Hilfe Datei dabei und die bitten nur einen Code unter Delphi. es sieh so aus(Siehe Unten). und ich möchte jetzt wissen ob mir Jemand diesen Code in C++ Builder umwandeln kann.
    Danke.
    Die Hilfe Datei findet man unter ExpressScheduler.(developerExpress)

    Here is the code, which implements the custom Event modal dialog:
    // 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
      inherited LoadEventValuesIntoControls; // call the parent’s method to load the data into the inherited editing controls located on the form
      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
      inherited UpdateEventValuesFromControls; // call the parent’s method to post the data from the inherited editing controls located on the form 
    
      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
      cxEventEditorClass := TcxSchedulerEventEditorCustomized; // indicate that the new Event modal dialog will be invoked at runtime
    


  • // TcxSchedulerEventEditorCustomized.h
    class TcxSchedulerEventEditorCustomized : public TcxSchedulerEventEditor
    {
        gbClient TcxGroupBox;
        lbFirstName TcxLabel;
        teFirstName TcxTextEdit;
        lbLastName TcxLabel;
        teLastName TcxTextEdit;
        lbGender TcxLabel;
        cbGender TcxComboBox;
      private:
      //  { Private declarations }
    
      protected:
        void LoadEventValuesIntoControls();
        void UpdateEventValuesFromControls();
      public:
       // { Public declarations }
    }
    
    TcxSchedulerEventEditorCustomized cxSchedulerEventEditorCustomized; //Dont know what you mean here?
    
    /// TcxSchedulerEventEditorCustomized.cpp
    #include "TcxSchedulerEventEditorCustomized.h"
    #include "cxSchedulerDialogs.h" //??? not sure
    
    void TcxSchedulerEventEditorCustomized::LoadEventValuesIntoControls()
    {
      try
      {
        teFirstName.EditValue = Event.GetCustomFieldValueByName("FName");
        teLastName.EditValue = Event.GetCustomFieldValueByName("LName");
    
        cbGender.EditValue = Event.GetCustomFieldValueByName("Gender");
      }
      catch( Exception E ) //?? Your exceptions class
      {
          ShowMessage(); //TODO String? Or Char? Or Ansistring?
      }
    }
    
    void TcxSchedulerEventEditorCustomized.UpdateEventValuesFromControls()
    {
      try
      {
        Event.SetCustomFieldValueByName("FName", teFirstName.EditValue);
        Event.SetCustomFieldValueByName("LName", teLastName.EditValue);
        Event.SetCustomFieldValueByName("Gender", cbGender.EditValue);
        FModified = True;
      }
      catch( Exception E ) 
      {
         ShowMessage(); //TODO String? Or Char? Or Ansistring?
      }
    }
    
    // in your maincode
      cxEventEditorClass = TcxSchedulerEventEditorCustomized;
    

    Nicht getestet und sicher noch Fehler drin.



  • Ich denke mal, dass diese ganzen Tcx-Klassen von VCL-Klassen abgeleitet sind. Das bedeutet aber, das man unter C++ hier nur mit Pointern arbeiten kann. Das macht alles etwas komplizierter.
    Warum soll das eigentlich in C++ umgewandelt werden? Der Builder enthält auch einen Pascal-Compiler und kann das somit auch direkt übersetzen.



  • die Tatsache ist , dass ich noch nie ein Pascal Buch aufgesclagen habe und was es nicht womit ich anfangen soll, deswegen ist für mich denke ich mal besser wenn ich die Hilfe Datei die unter Delphi in c++ umwandel und vertehe , vielleicht ist einfacher: Vielleicht.



  • Deswegen sage ich ja, übersetze deine Pascal-Datei direkt mit dem C++Builder.
    Wenn du es wirklich umschreiben (lassen) willst, wäre es nützlich die Deklaration der Klasse TcxSchedulerEventEditor zu kennen (die dazugehörige Headerdatei). Du willst ja immerhin von dieser Klasse ableiten.



  • Ich habe keine Pascal Datei die ich im C++ Builder übersetzen soll, ausser die Datei von cxSchedulerEventEditor , aber in dieser Datei wenn ich diesen Code dort schreibe zeigt er mir 1000 Fehler.



  • Hallo, ich hab die Datei umgestezt(umgeschrieben) aber nach der Ausführung zeigt er mir folgende Fehler:

    [C++ Fehler] cxSchedulerEventEditorCustomized.h(42): E2113 Virtuelle Funktion 'TcxSchedulerEventEditorForm1::LoadEventValuesIntoControls()' verursacht Konflikte mit der Basisklasse 'TcxSchedulerEventEditorForm'
    Er weist auf diese Stelle in die Header Datei(

    Void  LoadEventValuesIntoControls();
    

    [C++ Fehler] cxSchedulerEventEditorCustomized.h(43): E2113 Virtuelle Funktion 'TcxSchedulerEventEditorForm1::UpdateEventValuesFromControls()' verursacht Konflikte mit der Basisklasse 'TcxSchedulerEventEditorForm'

    und hier ist

    void UpdateEventValuesFromControls();
    

    [C++ Fehler] VersuchMainForm12.cpp(207): E2303 Typname erwartet

    cxEventEditorClass =(diese Stelle) TcxSchedulerEventEditorForm1;
    

    [C++ Fehler] VersuchMainForm12.cpp(207): E2108 Ungültige Verwendung von typedef 'TcxSchedulerEventEditorForm1'

    cxEventEditorClass =TcxSchedulerEventEditorForm1(hier am Ende);
    

    Bei mir ist TcxSchedulerEventEditorForm1; TcxSchedulerEventEdiorCustomized;



  • Hallo

    verursacht Konflikte mit der Basisklasse 'TcxSchedulerEventEditorForm'

    bedeutet das die Funktion in der abgeleiteten Klasse nicht wie erfordert den selbten Prototyp (Parameter, Rückgabewert) hat wie die gleichlautende virtuelle Funktion der Basisklasse

    [C++ Fehler] VersuchMainForm12.cpp(207): E2303 Typname erwartet

    Ungültige Verwendung von typedef 'TcxSchedulerEventEditorForm1'

    Ich vermute richtig wäre es so

    TcxSchedulerEventEditorForm1 *cxEventEditorClass = new TcxSchedulerEventEditorForm(??);
    

    Aber ich schließe mich Braunstein an, so ein paar aus dem Kontext gerissene Brocken reichen nicht aus. Sowohl die Deklaration der Basisklasse TcxSchedulerEventEditor als auch die der TcxSchedulerEventEditorCustomized sind dazu notwendig. Und wenn du offenbar so wenig Ahnung von den Grundlagen der OOP sowohl in Delpi als auch in C++ hast, solltest du lieber erstmal die Grundlagen lernen.

    bis bald
    akari


Anmelden zum Antworten