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 !
.