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:
und dies soll der Aufruf von der Child Form sein:
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;
Code:
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...
procedure TfrChild.FormCreate(Sender: TObject);
Var begin TfrMain.DatenImport(???); end; end. Vielen Dank im Vorraus |
AW: Form als Parameter übergeben
Delphi-Quellcode:
Ich würde es aber gleich als einfache Prozedur nicht als Klassenprozedur implementieren
//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 |
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:
aufrufen möchte meckert er wegen dem Dest und die Komponenten sind auf der Main immernoch unbekannt.
TfrMain.DatenImport(Dest:TComponents));
Sorry für meine Unwissenheit :-) aber ich lern Delphi irgendwie komplett chaotisch ;-) |
AW: Form als Parameter übergeben
Zitat:
Delphi-Quellcode:
procedure TfrChild.FormCreate(Sender: TObject);
begin frMain.DatenImport(Self); end; |
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:
Im ChildForm dann einfach nur noch
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;
Delphi-Quellcode:
Unit Child1;
... implementation uses FormControlCustomize; procedure TfrChild.FormCreate( Sender : TObject ); begin CompFarbenSetzen( Self ); end; |
AW: Form als Parameter übergeben
Kleiner Tipp: Variabelnnamen dürfen auch länger als ein Buchstabe sein. ;)
|
AW: Form als Parameter übergeben
Zitat:
|
AW: Form als Parameter übergeben
Zitat:
|
AW: Form als Parameter übergeben
Zitat:
|
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. |
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