Форум: "Основная";
Текущий архив: 2004.01.23;
Скачать: [xml.tar.bz2];
ВнизКак написать одну общую процедуру для форм. Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c