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 |
AW: Form als Parameter übergeben
Zitat:
|
AW: Form als Parameter übergeben
Also,
ich hab das umgesetzt wie du es beschrieben hast hab aber eine kleinigkeit geändert.
Code:
procedure CompFarbenSetzen(aOwner: TObject); //Hier von TComponet auf TObject geändert
implementation procedure CompFarbenSetzen(aOwner: TObject); // Das Selbe hier auch var ini: TIniFile; a : String;
Code:
es hat schon vorher funktioniert aber für spätere Modifikationen muß ich das TObject nehmen
h := StrToInt( a );
a := ini.ReadString('TEdit','Schriftfarbe','0'); k := StrToInt( a ); with aOwner as TForm do // hier "as TForm" ergänzt begin for i := 0 to ComponentCount -1 do if (Components[i] is TPanel) then begin Nochmals vielen Dank! |
AW: Form als Parameter übergeben
Das macht aber keinen Sinn. Wenn aOwner nicht mindestens vom Typ TForm ist, läufst Du an der Stelle "as TForm" in eine Exception.
|
AW: Form als Parameter übergeben
Wieso dass denn? :shock:
Form wird von TComponent abgeleitet Nur TComponent hat wiederum die Eigenschaft Components ist irgendwie nicht "Documentation by Code" Denn irgendwer könnte ja auf die Idee kommen da tatsächlich mal ein einfaches schnödes TObject zu übergeben und wundert sich, warum das knallt. Wenn der Zugriff auf die Quellen hat, dann sieht der, achso, ich darf da nur etwas übergeben was von Form abgeleitet ist. Warum also nicht gleich so die procedure so definieren? |
AW: Form als Parameter übergeben
Sach ich ja :mrgreen:
|
AW: Form als Parameter übergeben
Zitat:
Irgendwo gibt es doch so ein nettes Video, wo ein Programmierer neu in ein Unternehmen kommt und dort bestehenden Projekte weiter entwickelt. Problematisch daran, dass er ständig "the old and wise" fragen muss, weil ihm ständig etwas um die Ohren fliegt ;) Die haben ihre Bibliotheken auch so aufgebaut :mrgreen: Schade, ich finde den Link gerade nicht ... ist aber auf jeden Fall sehenswert :thumb: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:25 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