Главная страница
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.012 c
3-72663
Владий
2003-12-25 18:35
2004.01.23
Помогите - как лучше сделать - через запрос или как?


6-72865
axx
2003-11-21 08:49
2004.01.23
Подскажите как передать Record через SendBuf


1-72754
Митяй2
2004-01-13 18:37
2004.01.23
Перемещение Label а в RunTime е


1-72774
Noname
2004-01-13 13:27
2004.01.23
RegisterComponents


1-72749
Memo
2004-01-13 20:09
2004.01.23
Как можно в memo сделать текст строк разного цвета