Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Form als Parameter übergeben (https://www.delphipraxis.net/164739-form-als-parameter-uebergeben.html)

Aleshi 28. Nov 2011 08:58

Delphi-Version: 5

Form als Parameter übergeben
 
Hallo,

dies ist mein erster Beitrag und ich programmier auch noch nicht so lange Delphi. Hoffe ihr könnt mir helfen.

Nun zu meinem Problem.

Ich hab eine MdiParent Form und in dieser möchte ich eine Procedure schreiben in welcher Farben für Label, EditFelder, Panels usw fesgelegt werden. Ich habe auch ein componentcount drinn um rauszufinden was für Komponenten vorhanden sind. Diese Procedure soll aber con jedem MdiChild das ich erstelle aufgerufen werden und die jeweilige MdiChild Form soll als Parameter übergeben werden damit ich dann mit dem componentcount die Komponenten rausfinden kann. Wie übergebe ich aber die MdiChild Form als Parameter an die Procedure?

Dies ist die Procedure in der Main

Code:
Procedure TfrMain.DatenImport(????);
var ini: TIniFile;
    a, c, e, g, j: String;
    b, d, f, h, i, k, l: Integer;
begin
  ini := TIniFile.create('c:\Delphi\Farben2.ini');
  try
    a := ini.ReadString('TPanel','Farbe','0');
    b := StrToInt(a);
    c := ini.ReadString('TPanel','Schriftfarbe','0');
    d := StrToInt(c);
    e := ini.ReadString('TForm','Farbe','0');
    f := StrToInt(e);
    g := ini.ReadString('TLabel','Schriftfarbe','0');
    h := StrToInt(g);
    j := ini.ReadString('TEdit','Schriftfarbe','0');
    k := StrToInt(j);
    with z do
    begin
       for i := 0 to ComponentCount -1 do
         if (Components[i] is TPanel) then
           begin
             (Components[i] as TPanel).ParentBackground := false;
             (Components[i] as TPanel).color:= b;
             (Components[i] as TPanel).Font.Color := d;
           end
         else if (Components[i] is TLabel) then
           begin
             (Components[i] as TLabel).Font.Color := h;
           end
         else if (Components[i] is TEdit) then
           begin
             (Components[i] as TEdit).Color := k;
           end;
    end;
  finally
  ini.free;
end;
end;
und dies soll der Aufruf von der Child Form sein:

Code:
procedure TfrChild.FormCreate(Sender: TObject);
Var
begin
  TfrMain.DatenImport(???);
end;

end.
Momentan ist es natürlich so das er in der Main Form TLabel, TPanel usw als undefiniert makiert weil ja diese Komponenten nicht auf der Main vorhanden sind, sollen ja auch die von den Childs sein...

Vielen Dank im Vorraus

Bummi 28. Nov 2011 09:04

AW: Form als Parameter übergeben
 
Delphi-Quellcode:
//Procedure TfrMain.DatenImport(Dest:TForm);
//oder
Procedure TfrMain.DatenImport(Dest:TComponent); // dann kannst Du es auch Recursiv verwenden
var
....
begin
...
for i := 0 to Dest.ComponentCount -1 do
 if (Dest.Components[i] is TPanel) then
Ich würde es aber gleich als einfache Prozedur nicht als Klassenprozedur implementieren

Aleshi 28. Nov 2011 09:26

AW: Form als Parameter übergeben
 
Hallo Bummi,

zuerstmal Danke für die schnelle Antwort.

Aber irgendwas mach ich falsch, wenn ich die Procedure dann vom Child mit

Code:
TfrMain.DatenImport(Dest:TComponents));
aufrufen möchte meckert er wegen dem Dest und die Komponenten sind auf der Main immernoch unbekannt.

Sorry für meine Unwissenheit :-) aber ich lern Delphi irgendwie komplett chaotisch ;-)

ConnorMcLeod 28. Nov 2011 10:00

AW: Form als Parameter übergeben
 
Zitat:

Zitat von Aleshi (Beitrag 1138185)
Code:
procedure TfrChild.FormCreate(Sender: TObject);
Var
begin
  TfrMain.DatenImport(???);
end;

... wird zu ...
Delphi-Quellcode:
procedure TfrChild.FormCreate(Sender: TObject);
begin
  frMain.DatenImport(Self);
end;

Sir Rufo 28. Nov 2011 10:03

AW: Form als Parameter übergeben
 
Eigentlich hat diese Funktionalität doch nichts mit der MainForm zu schaffen?
Warum also eine Methode in der MainForm, und nicht eine einfache procedure (in einer eigenen Unit)?

Oder besser noch eine eigene Klasse, welche die Ini-Datei einmal liest und dann mit diesen Werte arbeitet?

Also hier mal als procedure:
Delphi-Quellcode:
unit FormControlCustomize;

interface

uses
  Classes; // TComponent

procedure CompFarbenSetzen( aOwner : TComponent );

implementation

uses
  StdCtrls, // TEdit, TLabel
  ExtCtrls, // TPanel
  IniFiles; // TIniFile

procedure CompFarbenSetzen( aOwner : TComponent );
var ini: TIniFile;
    a : String;
    b, d, f, h, i, k, l: Integer;
begin
  ini := TIniFile.create('c:\Delphi\Farben2.ini');
  try
    // Warum so kompliziert???
    a := ini.ReadString('TPanel','Farbe','0');
    b := StrToInt(a);

    // das geht auch einfacher mit
    b := ini.ReadInteger( 'TPanel', 'Farbe', 0 );

    a := ini.ReadString('TPanel','Schriftfarbe','0');
    d := StrToInt( a );
    a := ini.ReadString('TForm','Farbe','0');
    f := StrToInt( a );
    a := ini.ReadString('TLabel','Schriftfarbe','0');
    h := StrToInt( a );
    a := ini.ReadString('TEdit','Schriftfarbe','0');
    k := StrToInt( a );

    with aOwner do
    begin
       for i := 0 to ComponentCount -1 do
         if (Components[i] is TPanel) then
           begin
             (Components[i] as TPanel).ParentBackground := false;
             (Components[i] as TPanel).color:= b;
             (Components[i] as TPanel).Font.Color := d;
           end
         else if (Components[i] is TLabel) then
           begin
             (Components[i] as TLabel).Font.Color := h;
           end
         else if (Components[i] is TEdit) then
           begin
             (Components[i] as TEdit).Color := k;
           end;
    end;
  finally
    ini.free;
  end;
end;
Im ChildForm dann einfach nur noch
Delphi-Quellcode:
Unit Child1;

...

implementation

uses
  FormControlCustomize;

procedure TfrChild.FormCreate( Sender : TObject );
begin
  CompFarbenSetzen( Self );
end;

Luckie 28. Nov 2011 10:11

AW: Form als Parameter übergeben
 
Kleiner Tipp: Variabelnnamen dürfen auch länger als ein Buchstabe sein. ;)

Sir Rufo 28. Nov 2011 10:19

AW: Form als Parameter übergeben
 
Zitat:

Zitat von Luckie (Beitrag 1138204)
Kleiner Tipp: Variabelnnamen dürfen auch länger als ein Buchstabe sein. ;)

Seit wann das denn? :mrgreen:

ConnorMcLeod 28. Nov 2011 10:40

AW: Form als Parameter übergeben
 
Zitat:

Zitat von Sir Rufo (Beitrag 1138201)
Eigentlich hat diese Funktionalität doch nichts mit der MainForm zu schaffen?
Warum also eine Methode in der MainForm, und nicht eine einfache procedure (in einer eigenen Unit)?

Hab ich mir auch gedacht, wollte aber nicht noch mehr Verwirrung stiften ;-)

jaenicke 28. Nov 2011 11:26

AW: Form als Parameter übergeben
 
Zitat:

Zitat von Luckie (Beitrag 1138204)
Kleiner Tipp: Variabelnnamen dürfen auch länger als ein Buchstabe sein. ;)

Aber das wäre doch schade, da hat man doch gar nichts zu raten. ;-)

Aleshi 28. Nov 2011 13:05

AW: Form als Parameter übergeben
 
Danke an Alle,

es funktioniert nun :-)

Vielen Dank für die vielen Tipps und die schnelle Hilfe!

Gruß Aleshi


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:17 Uhr.
Seite 1 von 2  1 2      

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