Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
8-72845
Sergiy
2003-09-20 01:25
2004.01.23
Multimedia в Delphi


1-72825
alexnmsk
2004-01-12 13:41
2004.01.23
BeginDrag


1-72828
msgipss
2004-01-12 10:07
2004.01.23
перекрестная инициализация объектов


3-72682
Olivka
2003-12-24 15:22
2004.01.23
fastReport в отчете вместо null-ов нули выдает


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский