Autor Beitrag
noobie123
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 29



BeitragVerfasst: Di 12.05.09 11:55 
hallo,
mein nickname ist hier programm ;)
mein project ist mittlerweile über 15 seiten lang und wird langsam ein wenig unübersichtlich.
ich wollte mal fragen ob ich irgendwie mein code strukturieren kann.
also ich habe ca. 10 buttons und 10 groupboxen. in diesen 10 grouboxen kann man sehr viel machen.
und für jeden button in dieser groupbox würde ich gerne eine extra unit verwenden.
hab mir schon einige sachen im netz angeschaut aber nur was mit prozeduren gefunden.
ist für mich nichts, da sich 1. nichts wiederholt und 2. die übergabe von strings mir zu umständlich ist (für eine einmalige ausführung).

also bis jetzt 1 Formular = 1 unit (über 15 seiten)... wie umgeht ihr das?
(extra formulare wollte ich aus optischen gründen nicht.


mfg
baka0815
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 489
Erhaltene Danke: 14

Win 10, Win 8, Debian GNU/Linux
Delphi 10.1 Berlin, Java, C#
BeitragVerfasst: Di 12.05.09 12:02 
Vielleicht solltest du dir dieses OpenBook mal anschauen.

Objektorientierung könnte dir da nämlich durchaus helfen.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Di 12.05.09 12:10 
Also 15 Seiten und lang??? (vgl. GeSHi sind knapp 5000 LOC; eine Datei, da kommen noch ~150 weitere Dateien mit 30kLOC dazu, das sind aber reine Daten).

Mögliche Lösungen könnten hier durchaus auch Frames sein.

Auch die genannte Verwendung von OOP wäre eine Idee.

Ansonsten gibt es oftmals auch durchaus Programmierkonzepte, bei denen es soweit geht, dass in einem Eventhandler außer ein bis zwei Aufrufen von Funktionen nichts mehr steht (mach ich durchaus öfters). Auch das Zusammenfassen von ähnlichem Code kann viel bringen.

Was ist Dir bei der Übergabe von Strings zu kompliziert?

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
noobie123 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 29



BeitragVerfasst: Di 12.05.09 12:37 
hi,
hab mir das mal mit den frames angeschaut.
das ist ja eigentlich mal ne tolle sache.
zwar dachte ich eher an mehrere units für ein formular, aber so ist es auch nicht schlecht.
ich danke euch!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19336
Erhaltene Danke: 1751

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 12.05.09 14:28 
Das allerwichtigste ist vor allem, dass du die Komponenten alle benennst, das macht es schon einmal übersichtlicher.

Dann gehört in die Unit zu dem Formular nur das was direkt mit der Oberfläche zu tun hat. Alle weiteren Funktionen kann man in weitere Units und ggf. Klassen auslagern und aus den Ereignishandlern des Formulars nur aufrufen.
Dude566
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1592
Erhaltene Danke: 79

W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
BeitragVerfasst: Di 12.05.09 15:50 
Wie kann ich denn z.B. eine Prozedur in eine extra Unit schreiben ohne ein Formular, und dann muss ich natürlich mit der 1. Unit auch auf die Procedure zugreifen können.

_________________
Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19336
Erhaltene Danke: 1751

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 12.05.09 16:11 
Du erstellst eine neue Unit und bindest diese in die uses-Klausel deines Formulars ein. Danach kannst du alles aus der Unit benutzen, was dort oberhalb von implementation deklariert wurde. Meistens ist es sinnvoll vieles in Objekte statt einzelne Prozeduren zu unterteilen. Ein kleines Beispiel:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
unit XYZ;

interface

uses
  SysUtils;

type
  TTest = class
  private
    FContents: Integer;
  public
    constructor Create(AValue: String); overload;
    constructor Create(AValue: Integer); overload;
    property Contents: String read GetContents;
  end;

function GetAnswerToLifeUniverseAndEverything: String;

implementation

function GetAnswerToLifeUniverseAndEverything: String;
begin
  Result := '42';
end;

constructor TTest.Create(AValue: String); overload;
begin
  FContents := StrToInt(AValue);
end;

constructor TTest.Create(AValue: Integer); overload;
begin
  FContents := AValue;
end;

function TTest.GetContents: String;
begin
  Result := IntToStr(FContents);
end;
Und dann kannst du das benutzen in deiner Formularunit:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
unit Main;

interface

uses
  ..., XYZ;

type
  TfrmMain = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure ButtonXClick(Sender: TObject);
  private
    FMyTest: TTest;
  public
  end;

implmentation

procedure TfrmMain.FormCreate(Sender: TObject);
begin
  FMyTest := TTest.Create('40');
end;

procedure TfrmMain.FormDestroy(Sender: TObject);
begin
  FMyTest.Free;
end;

procedure TfrmMain.ButtonXClick(Sender: TObject);
begin
  ShowMessage(FMyTest.Contents);
  ShowMessage(GetAnswerToLifeUniverseAndEverything());
end;
Ich hoffe ich habe mich nicht vertippt, aber das ist ja nur ein Beispiel.