Delphi-Quelltext nach C++Builder



  • Hallo !

    Ich möchte eine kleine Delphi-Procedure in C++ Builder nachbauen.
    Hab aber überhaupt keine Ahnung von Delphi.

    Kann jemand bitte diese Delphi-Procedure in C++ übersetzen .

    Vielen Dank !

    procedure TStampForm.BitBtnClick(Sender: TObject);
    var
      time, date, datetime: TDateTime;
      setTime, setDate: Boolean;
      ifile: Integer;
      fs: TFileStream;
    begin
      setTime := TimeCB.Checked;
      if setTime then
      // auf gültige Zeit prüfen
      try
        time := StrToTime(TimeMaskEdit.Text);
      except
        ShowMessage('Ungültige Zeit!');
        TimeMaskEdit.SetFocus;
        Exit;
      end;
      setDate := DateCB.Checked;
      if setDate then
      // auf gültiges Datum prüfen
      try
        date := StrToDate(DateMaskEdit.Text);
      except
        ShowMessage('Ungültiges Datum!');
        DateMaskEdit.SetFocus;
        Exit;
      end;
      // alle Dateien in der Liste durchlaufen
      for ifile := 0 to FileList.Items.Count - 1 do
      with FileList.Items[ifile] do begin
        // zu setzendes Datum/Zeit entsprechend
        // angekreuzten Optionen bestimmen
        if setDate then datetime := date
        else datetime := StrToDate(SubItems[0]);
        if setTime then datetime := datetime + time
        else datetime := datetime + StrToTime(SubItems[1]);
        // Datei öffnen und Datum schreiben
        try
          fs := TFileStream.Create(Caption, fmOpenWrite);
          try
            FileSetDate(fs.Handle, DateTimeToFileDate(datetime));
            SubItems[0] := DateToStr(datetime);
            SubItems[1] := TimeToStr(datetime);
          finally
            fs.Free;
          end;
        except
          ShowMessage('Konnte Datum in Datei ' + Caption +
                      'nicht setzen - Datei ist eventuell ' +
                      'schreibgeschützt oder geöffnet!');
        end;
      end;
    end;
    

    .
    .
    .



  • Ich bezweifel das dies einer macht. Du solltest wenigstens soviel Vorarbeit leisten und die Stellen die dir unklar sind entsprechend markieren. Ist ja wohl nen Witz deine Tipparbeit auf andere abzuwälzen.



  • Übrigens ist C++Builder in der Lage, in Delphi geschriebene .PAS-Dateien zu kompilieren; er generiert dir dann Headerdateien, mithilfe derer du aus einem C++-Unit heraus das Delphi-Unit benutzen kannst. Warum also übersetzen?



  • Erstmal vielen Dank!

    Es geht auch gar nicht darum, die Arbeit auf anderen zu schieben.
    Ich hab leider nur null Ahnung, was Delphi angeht. Mir genügt es schon, eine grobes Gerüst, so das ich im Builder nachbauen kann.

    Wenn jemand helfen kann, ist das gut. Wenn nicht, ist auch OK.

    Vielen Dank !



  • audacia hat dir doch schon geschrieben, was zu tun ist... hast du das überlesen oder ignorierst du es?



  • naja, eigentlich unterscheidet sich Delphi garnicht so sehr, zumindest nicht bei der Verwendung der VCL. hier mal ein paar Hinweise:

    [b]Delphi[/b]     [b]C++[/b]
    -----------------
    :=           =
    .            ->
    '            "
    begin        {
    end          }
    

    Wie if-Abfragen, For-Schleifen und try-Blöcke in C++ funktionieren weißt du ja hoffentlich. Statt free verwendet man im BCB delete. Nur with gibt es in C++ nicht. Da mußt du in dem betreffenden Abschnitt immer den kompletten Komponenten-/Variablennamen verwenden.

    Da wir die verwendeten Komponenten nicht genau kennen, ist es etwas schwierig die entsprechenden Funktionen in C++/VCL dafür zu finden.



  • Nimm mal das hier als Anfang

    void __fastcall TStampForm::BitBtnClick(TObject *Sender)
    {
      bool setTime = TimeCB->Checked;
      TDateTime time, date, datetime;
      if( setTime)
      {
      // auf gültige Zeit prüfen
         try
         {
            time = StrToTime(TimeMaskEdit.Text);
         }
         catch(...)
         {
            ShowMessage("Ungültige Zeit!");
            TimeMaskEdit->SetFocus();
            return;
         }
      }
      bool setDate = DateCB->Checked;
      if( setDate)
      {
      // auf gültiges Datum prüfen
         try
         {
            date = StrToDate(DateMaskEdit->Text);
         }
         catch(...)
         {
            ShowMessage("Ungültiges Datum!");
            DateMaskEdit->SetFocus();
            return;
         }
      }
      // alle Dateien in der Liste durchlaufen
      for( int ifile = 0; i<FileList->Items->Count; ++i)
      {
        // zu setzendes Datum/Zeit entsprechend
        // angekreuzten Optionen bestimmen
        if( setDate) datetime = date;
        else datetime = StrToDate(FileList->Items[ifile]->SubItems[0]);
        if( setTime) datetime = datetime + time;
        else datetime = datetime + StrToTime(FileList->Items[ifile]->SubItems[1]);
        // Datei öffnen und Datum schreiben
        try
        {
          std::auto_ptr<TFileStream> fs(new TFileStream(Caption, fmOpenWrite));
          FileSetDate(fs->Handle, DateTimeToFileDate(datetime));
          FileList->Items[ifile]->SubItems[0] = DateToStr(datetime);
          FileList->Items[ifile]->SubItems[1] = TimeToStr(datetime);
        }
        catch(...)
        {
          ShowMessage(AnsiString("Konnte Datum in Datei ") + Caption +
                      AnsiString("nicht setzen - Datei ist eventuell ") +
                      AnsiString("schreibgeschützt oder geöffnet!"));
        }
      }
    }
    


  • Ja !

    Vielen Dank !

    Das ist supper von Euch. Damit bin ich schon sehr zufieden und kann weiter lernen.

    Vielen Dank nochmals !
    .


Log in to reply