AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Mein Programmierstyl

Ein Thema von Martin W · begonnen am 17. Apr 2006 · letzter Beitrag vom 19. Apr 2006
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#11

Re: Mein Programmierstyl

  Alt 19. Apr 2006, 10:32
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 Delphi-Referenz durchsuchenString.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.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Sidorion

Registriert seit: 23. Jun 2005
403 Beiträge
 
#12

Re: Mein Programmierstyl

  Alt 19. Apr 2006, 10:47
Hab noch einen:
  if fileExists(ExtractFilePath(ParamStr(0)) + '\FDS_Server_profiles.xml') = True then besser:
 if FileExists(IncludeTrailingPathDelimiter(ExtractFilePath(ParamStr(0)))+'FDS_Server_profiles.xml') Then 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 .
Manchmal sehen Dinge, die wie Dinge aussehen wollen mehr wie Dinge aus, als Dinge
<Esmerelda Wetterwachs>
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#13

Re: Mein Programmierstyl

  Alt 19. Apr 2006, 11:01
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.
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#14

Re: Mein Programmierstyl

  Alt 19. Apr 2006, 11:10
Zitat von Sidorion:
Hab noch einen:
  if fileExists(ExtractFilePath(ParamStr(0)) + '\FDS_Server_profiles.xml') = True then besser:
 if FileExists(IncludeTrailingPathDelimiter(ExtractFilePath(ParamStr(0)))+'FDS_Server_profiles.xml') Then 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 .
Besser:
Path.Combine

[edit]Und dazu noch Roberts Anmerkung, dann ist es perfekt [/edit]
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Martin W

Registriert seit: 29. Mai 2004
Ort: Augsburg
220 Beiträge
 
Delphi XE3 Enterprise
 
#15

Re: Mein Programmierstyl

  Alt 19. Apr 2006, 14:11
@ Robert Marquardt ::

Zitat:
Deshalb sollte man den Konstruktor und Destruktor der Komponente/Form ueberschreiben und dort die Objekte erstellen bzw. loeschen.
Kannst du mir mal ein Beispiel anhand von Quellcode geben? Meinst du damit die Eigenschaften "On CLose" und "On Create"


@ Khabarakh ::

Zitat:
Du willst massenweise Objekte freigeben, die überhaupt nicht IDisposable einbinden, was soll da passieren?
---> Kurz gesagt, ich brauche sie gar nicht freigeben... geht alleine ?

Zitat:
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.
---> Und wie sorge ich dafür das ein Label in einer WinForms.net Anwendung Transparent wird?


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
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#16

Re: Mein Programmierstyl

  Alt 19. Apr 2006, 14:18
Zitat von Martin W:
@ Robert Marquardt ::
Kannst du mir mal ein Beispiel anhand von Quellcode geben? Meinst du damit die Eigenschaften "On CLose" und "On Create"
Besser OnCreate und OnDestroy.
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.
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#17

Re: Mein Programmierstyl

  Alt 19. Apr 2006, 14:43
Zitat von Martin W:
@ Khabarakh ::

Zitat:
Du willst massenweise Objekte freigeben, die überhaupt nicht IDisposable einbinden, was soll da passieren?
---> Kurz gesagt, ich brauche sie gar nicht freigeben... geht alleine ?
Kurz gesagt, ja . Wenn sie aber IDisposeable implementieren, solltest du unbedingt Dispose aufrufen.

Zitat:
---> Und wie sorge ich dafür das ein Label in einer WinForms.net Anwendung Transparent wird?
Label.BackColor := Color.Transparent;
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Martin W

Registriert seit: 29. Mai 2004
Ort: Augsburg
220 Beiträge
 
Delphi XE3 Enterprise
 
#18

Re: Mein Programmierstyl

  Alt 19. Apr 2006, 16:51
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.
  Mit Zitat antworten Zitat
Martin W

Registriert seit: 29. Mai 2004
Ort: Augsburg
220 Beiträge
 
Delphi XE3 Enterprise
 
#19

Re: Mein Programmierstyl

  Alt 19. Apr 2006, 16:56
Zitat von Khabarakh:
Zitat von Martin W:
@ Khabarakh ::

Zitat:
Du willst massenweise Objekte freigeben, die überhaupt nicht IDisposable einbinden, was soll da passieren?
---> Kurz gesagt, ich brauche sie gar nicht freigeben... geht alleine ?
Kurz gesagt, ja . Wenn sie aber IDisposeable implementieren, solltest du unbedingt Dispose aufrufen.

Zitat:
---> Und wie sorge ich dafür das ein Label in einer WinForms.net Anwendung Transparent wird?
Label.BackColor := Color.Transparent;
Dann übernimmmt er die Farbe der Form... wenn z.B. noch ein Bild auf der Form ist wird dieses ignoriert...
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#20

Re: Mein Programmierstyl

  Alt 19. Apr 2006, 17:00
BackColor wird mit der Grafik des Parents geblendet. Weise also dem Label die PictureBox als Parent zu.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz