Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.01.23;
Скачать: CL | DM;

Вниз

Как написать одну общую процедуру для форм.   Найти похожие ветки 

 
Vi0let ©   (2004-01-12 03:19) [0]

Чтобы она обрабатывала их контролы, или что там еще может понадобится. Например (только лишь как частный случай) установить новый цвет TEdit"ов:

procedure SetNewColor(_Form: TForm; NewColor: TColor)
with _Form do
begin
for I:= 0 to ControlCount-1 do
if (Controls[I].ClassName = "TEdit") then
TEdit(Controls[I]).Color := NewColor;
end;}

такое, естественно, работать не будет т.к. формы разных классов
КАК СДЕЛАТЬ?


 
ЮЮ ©   (2004-01-12 03:55) [1]

>т.к. формы разных классов
но все они наследники TForm, поэтому такое должно рабатать, причем вполне естественно


 
Vi0let ©   (2004-01-12 03:58) [2]

ЮЮ
одно дело наследники, а другое _Form: TForm


 
ЮЮ ©   (2004-01-12 04:09) [3]

Одно дело рассуждать, другое дело - попробовать.
Вот это работает:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

procedure SetFormCaption(_Form: TForm; Text: string);

implementation

uses Unit2;

procedure SetFormCaption(_Form: TForm; Text: string);
begin
_Form.Caption := Text
end;

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
SetFormCaption(Self, "Думай!");
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
SetFormCaption(Form2, "Думай! Думай!");
Form2.Show;
end;

end.


 
Vi0let ©   (2004-01-12 04:51) [4]

а типа такого слабо сделать:

procedure SetNewColor(_Form: TForm; NewColor: TColor);
var i: word;
begin
_Form.Edit1.Color := 0;
end;

но чтобы не нужно было создавать новый класс от TForm с контролом edit1 которого нужно было бы програмно создавать, выставлять свойства ...


 
ЮЮ ©   (2004-01-12 05:41) [5]

Элементарно:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TControlFriendlyClass = class(TControl);

TForm1 = class(TForm)
Edit1: TEdit;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
FWithoutNameEdit: TEdit;
FWithoutOwnerEdit: TEdit;
public
{ Public declarations }
end;

var
Form1: TForm1;

procedure SetConrolColor(_Form: TForm; Control:TControl; Color: TColor);

implementation

uses Unit2;

procedure SetConrolColor(_Form: TForm; Control:TControl; Color: TColor);
var
i: integer;
c: TControl;
begin
if Control.Name <> "" then begin
c := TControl(_Form.FindComponent(Control.Name));
if c <> nil then TControlFriendlyClass(c).Color := Color;
end
else begin// динамически созданные Control-ы, обычно, не имеют имени
for i := 0 to _Form.ComponentCount - 1 do
if _Form.Components[i] = Control then begin
TControlFriendlyClass(_Form.Components[i]).Color := Color;
Exit;
end;
// среди Form.Components не найден, поищем среди Form.Controls
for i := 0 to _Form.ControlCount - 1 do
if _Form.Controls[i] = Control then begin
TControlFriendlyClass(_Form.Controls[i]).Color := Color;
Exit;
end;
end;
end;

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
SetConrolColor(Self, Edit1, clBlue);

FWithoutNameEdit := TEdit.Create(Self);
FWithoutNameEdit.Parent := Self;
SetConrolColor(Self, FWithoutNameEdit, clBlue);

FWithoutOwnerEdit := TEdit.Create(nil);
FWithoutOwnerEdit.Left := 200;
FWithoutOwnerEdit.Parent := Self;
SetConrolColor(Self, FWithoutOwnerEdit, clBlue);
end;

end.


 
Vi0let ©   (2004-01-12 05:57) [6]

ясно


 
ЮЮ ©   (2004-01-12 06:00) [7]

Так код будет покороче, т.к. компонент с именем всего лишь частный случай

procedure SetConrolColor(_Form: TForm; Control:TControl; Color: TColor);
var
i: integer;
c: TControl;
begin
for i := 0 to _Form.ControlCount - 1 do
if _Form.Controls[i] = Control then begin
TControlFriendlyClass(_Form.Controls[i]).Color := Color;
Exit;
end;
for i := 0 to _Form.ComponentCount - 1 do
if _Form.Components[i] = Control then begin
TControlFriendlyClass(_Form.Components[i]).Color := Color;
Exit;
end;
end;


 
Юрий Зотов ©   (2004-01-12 09:21) [8]

> Vi0let © (12.01.04 03:19)
> такое, естественно, работать не будет

Вот именно то, что Вы написали, как раз работать БУДЕТ.
Что и есть естественно.



Страницы: 1 вся ветка

Текущий архив: 2004.01.23;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.02 c
6-72863
Shutov
2003-11-10 21:12
2004.01.23
Страничку через HTTP, но не всю.


3-72652
Odessit
2003-12-25 21:29
2004.01.23
Компонента для фильтрации


1-72756
alextov
2004-01-13 14:48
2004.01.23
В Win2000 при ошибке программа закрывается без сообщения о ошибке


4-72973
Closer
2003-11-17 19:41
2004.01.23
Проблема с CreateProcess или глюк Delphi 5


4-72989
vasil
2003-11-18 05:11
2004.01.23
передача данных другой форме