![]() |
Re: Mein Programmierstyl
Die Pascal-Fehler sind wohl langsam abgegrast, jetzt kommt .Net an die Reihe :twisted: :mrgreen: .
Delphi-Quellcode:
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.
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;
Delphi-Quellcode:
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
type
TDialogType = (dtOpen, dtSave);
Delphi-Quellcode:
statt mit
dtOpen
Delphi-Quellcode:
angesprochen werden können, kann man das wohl gelten lassen.
DialogType.Open
Delphi-Quellcode:
Erstmal durch ein Winform ersetzen, dann die entsprechenden Framework-Komponenten benutzen.
Tserver_mainform_form = class(TForm)
MainMenu1: TMainMenu; geg1: TMenuItem; Beenden1: TMenuItem; Einstellungen1: TMenuItem; [...]
Delphi-Quellcode:
Ein öffentliches Feld? Das ist sowhl in unmanaged als auch managed Code pöse ;) .
TProfilDetails = class
public Name: String; end;
Delphi-Quellcode:
Dito. entweder in die Mainform oder eine statische Klasse.
var
server_mainform_form: Tserver_mainform_form; Profil: TProfil; TcpServerPreferences: TTcpServerPreferences; Log: TLog; ServerBefehle: TServerBefehle;
Delphi-Quellcode:
Ich weiß nicht, was der Compiler damit macht, aber es ist auf jeden Fall veraltet. Dafür gibt es Resourcendateien und die ResourceManager-Klasse.
resourcestring
Delphi-Quellcode:
Wie Robert schon sagte: Format. Ohne VCL.Net ist es dann
Sender.Lines.Add(timetostr(now) + ' : ' + TextMessage);
![]()
Delphi-Quellcode:
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.
TLog = class
private procedure ClearLog(Sender: TMemo); procedure AddMessageToLog(Sender: TMemo; TextMessage: string); end; TServerBefehle = class private procedure StopServer; end;
Delphi-Quellcode:
Verabschiede dich von diesen hässlichen for-Schleifen, es gibt nun for-in-Schleifen :D .
for i := 0 to length(TcpServerPreferences.Bindings) - 1 do
Delphi-Quellcode:
Du willst massenweise Objekte freigeben, die überhaupt nicht IDisposable einbinden, was soll da passieren?
.Free;
![]()
Delphi-Quellcode:
if FileExists(AFilename) = False then
Delphi-Quellcode:
if not File.Exists(aFileName) then
Delphi-Quellcode:
String.SubString bzw. Path.GetExtension
RightStr(AFilename, 4)
Delphi-Quellcode:
File.Copy
function Tserver_mainform_form.CopyFile(AFileFrom: string; AFileTo: string): boolean;
Die restlichen Ersetzungen von VCL-Klassen/Prozeduren liste ich nicht auf, die kannst du mithilfe des SDKs selbst ziemlich schnell korrigieren. |
Re: Mein Programmierstyl
Hab noch einen:
Delphi-Quellcode:
besser:
if fileExists(ExtractFilePath(ParamStr(0)) + '\FDS_Server_profiles.xml') = True then
Delphi-Quellcode:
Ist a) Plattformunabhängig und b) falls irgendwann doch die Methode 'ExtractFilePath' den '\' dranhängen lässt (spätere Delphi Version) hast Du sonst zwei '\' unddannhängterisichauf :angel: .
if FileExists(IncludeTrailingPathDelimiter(ExtractFilePath(ParamStr(0)))+'FDS_Server_profiles.xml') Then
|
Re: Mein Programmierstyl
Noch besser diesen Zusammenbau eines programmspezifischen Pfades in eine Methode auslagern.
ProfilePathName und PreferencesPathName oder aehnliche Namen. Das sollte man selbst dann machen wenn man die Methode nur einmal benutzt. Indem man das Programm aus solchen genau spezifizierten Elementen zusammenfuegt, bleibt es naemlich les- und wartbar. In diesem Fall hat ein Copy & Paste Code einen Namen bekommen und man versteht was der Code macht, anstatt das man das jedesmal aufs neue herausbekommen muss. |
Re: Mein Programmierstyl
Zitat:
Path.Combine :zwinker: [edit]Und dazu noch Roberts Anmerkung, dann ist es perfekt :mrgreen: [/edit] |
Re: Mein Programmierstyl
@ Robert Marquardt ::
Zitat:
@ Khabarakh :: Zitat:
Zitat:
Ich bin gerade dabei alles schön von VCL auf ne WinForm.net Anwendung zu übertragen... :-| Wenn ich alles fertig hab, poste ich dann mal ne aktualisierte Version davon, inklusive des kompletten Source Codes und der Anwendung :-) Gruß Martin W :-) |
Re: Mein Programmierstyl
Zitat:
Create und Destroy der Form zu ueberschreiben ist auch moeglich. Da geht es aber nur um die Sicht der Dinge. Ich sehe es als eine neue Komponente bei der man besser Create und Destory ueberschreibt. Die normale Sicht ist aber eben OnCreate und OnDestroy zu verwenden. |
Re: Mein Programmierstyl
Zitat:
Zitat:
Delphi-Quellcode:
;)
Label.BackColor := Color.Transparent;
|
Re: Mein Programmierstyl
Hey das Forum hier ist echt genial... Danke schon mal an alle mir geholfen haben !!!
Ich überlege gerade ein Gemeinschaftsprojekt aus meinem Programm zu machen... ich lasse es euch wissen :-) Gruß Martin W. |
Re: Mein Programmierstyl
Zitat:
|
Re: Mein Programmierstyl
BackColor wird mit der Grafik des Parents geblendet. Weise also dem Label die PictureBox als Parent zu.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz