Die Pascal-Fehler sind wohl langsam abgegrast, jetzt kommt .Net an die Reihe
.
Delphi-Quellcode:
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Borland.Vcl.Menus, System.ComponentModel, Borland.Vcl.XPMan,
Borland.Vcl.ComCtrls, Borland.Vcl.StdCtrls, System.Xml.Serialization,
System.IO, Borland.Vcl.ExtCtrls, Borland.Vcl.StrUtils, IdBaseComponent,
IdComponent, IdTCPServer;
Puh... Solange du nicht gerade eine große bestehende Anwendung auf .Net übertragen willst (was ich nicht glaube), solltest du die Finger von diesem
VCL.Net-Zeugs nehmen. Die Dateigröße wirds dir danken, Mono ebenfalls, ich will gar nicht wissen, wie viele versteckte P/Invokes und andere Artefakte darin lauern und verspreche dir, dass du für jede einzelne Klasse der
RTL/
VCL ein Äquivalent in der
FCL finden wirst, das zudem meistens auch noch objektorientierter ist.
Delphi-Quellcode:
type
TDialogType = (dtOpen, dtSave);
Den T-Präfix darfst du ab nun reinen Gewissens wegsperren. Ein Enum-Präfix ist ungewöhnlich und in anderen .Net-Dialekten überflüssig, aber da diese mit Delphi.Net wohl weiterhin mit
dtOpen
statt mit
DialogType.Open
angesprochen werden können, kann man das wohl gelten lassen.
Delphi-Quellcode:
Tserver_mainform_form = class(TForm)
MainMenu1: TMainMenu;
geg1: TMenuItem;
Beenden1: TMenuItem;
Einstellungen1: TMenuItem;
[...]
Erstmal durch ein Winform ersetzen, dann die entsprechenden Framework-Komponenten benutzen.
Delphi-Quellcode:
TProfilDetails = class
public
Name: String;
end;
Ein öffentliches Feld? Das ist sowhl in unmanaged als auch managed Code pöse
.
Delphi-Quellcode:
var
server_mainform_form: Tserver_mainform_form;
Profil: TProfil;
TcpServerPreferences: TTcpServerPreferences;
Log: TLog;
ServerBefehle: TServerBefehle;
Dito. entweder in die Mainform oder eine statische Klasse.
resourcestring
Ich weiß nicht, was der Compiler damit macht, aber es ist auf jeden Fall veraltet. Dafür gibt es Resourcendateien und die ResourceManager-Klasse.
Sender.Lines.Add(timetostr(now) + ' : ' + TextMessage);
Wie Robert schon sagte: Format. Ohne
VCL.Net ist es dann
String.Format.
Delphi-Quellcode:
TLog = class
private
procedure ClearLog(Sender: TMemo);
procedure AddMessageToLog(Sender: TMemo; TextMessage: string);
end;
TServerBefehle = class
private
procedure StopServer;
end;
Da die Klassen keine Felder besitzen, nimm Klassenmethoden. Allerdings würde ich eher die Log-Klasse den Log verwalten lassen, z.B. in einer StringCollection. Dazu noch eine Methode zum Ausgeben in eine TextBox.
for i := 0 to length(TcpServerPreferences.Bindings) - 1 do
Verabschiede dich von diesen hässlichen for-Schleifen, es gibt nun for-in-Schleifen
.
.Free;
Du willst massenweise Objekte freigeben, die überhaupt nicht IDisposable einbinden, was soll da passieren?
Garbage Collection
if FileExists(AFilename) = False then
if not File.Exists(aFileName) then
RightStr(AFilename, 4)
String.SubString bzw. Path.GetExtension
function Tserver_mainform_form.CopyFile(AFileFrom: string; AFileTo: string): boolean;
File.Copy
Die restlichen Ersetzungen von
VCL-Klassen/Prozeduren liste ich nicht auf, die kannst du mithilfe des SDKs selbst ziemlich schnell korrigieren.