![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Form
ser_ega © (2004-10-31 00:26:00)Ребята помогите! У меня есть процедура:
Procedure Mastera;
Begin
Label1.Caption:='Всем спасибо!';
//и еще много такого похожего
End;
Но мне надо сделать, так чтобы если, допустим, i=1 тогда Label1, и еще много такого похожего , относилось к Form1, а если i=2 тогда - к form2! Чтобы не делать две практически одинаковые проседуры!
Procedure Mastera1;
Begin
form1.Label1.Caption:='Всем спасибо!';
//и еще много такого похожего
End;
и
Procedure Mastera2;
Begin
form2.Label1.Caption:='Всем спасибо!';
//и еще много такого похожего
End;
ser_ega (2004-11-01 00:43:00) [1]Все шло очень хрошо пока не написал:
...
(fm.FindComponent('DateTimePicker1') as TDateTimePicker).date:=strtodate(dt);
...
При запуске проги он мне говорит что TDateTimePicker неизвестный идентификатор! Что это? Может он как-то по другому называется, хотя...
ser_ega (2004-11-01 00:38:00) [2]> Defunct
Нет ты не угадал!
GuAV (2004-10-31 03:10:00) [3]Defunct © (31.10.04 1:10) [5]
Form1024x768Appearance else
if Screen.Width > 1024 Then Form1280x1024Appearance
В принципе, такое можно делать и с Dfm.
Form1:=TForm1.CreateNew;
try
Stream.ReadComponent(Form1);
...
Defunct (2004-10-31 02:59:00) [4]> If Screen.Width > 800 Then ... else
> if Screen.Width > 1024
LOL, прогнал малость, извините ;)
конечно же, должно быть:
if Screen.Width > 1024 Then ... else
if Screen.Width > 800 Then ...
jack128 (2004-10-31 02:14:00) [5]Defunct © (31.10.04 0:39) [3]
;-) :-P
Defunct © (31.10.04 1:10) [5]
Кстати говоря GExperts такие вещи умеет делать.(переводить dfm в код)
Defunct (2004-10-31 01:18:00) [6]малость ошибся:
procedure TForm1.Form1024x768Appearance;
Defunct (2004-10-31 01:10:00) [7]ser_ega дайте я попробую угадать зачем вы это спрашивали.
Делаете вторую форму для разрешения 800x600? по вопросу с этой ветки:
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1099061901&n=0
Не нужно этого делать.
Кликните на форме правой кнопкой мышки, выберите в появившемся попап меню "View as Text" увидите содержимое DFM файла, например такое:
object Form1: TForm1
Left = 280
Top = 103
Width = 243
Height = 172
Caption = 'Form1'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
OnCreate = FormCreate
PixelsPerInch = 96
TextHeight = 13
object Button1: TButton
Left = 40
Top = 40
Width = 75
Height = 25
Caption = 'Button1'
TabOrder = 0
OnClick = Button1Click
end
end
скопируйте весь текст DFM, потом вернитесь к виду формы (View as form в попапе).
Дальше вставляете скопированный текст в свою программу и правите, чтобы у вас получилась обычная процедура, например такая:
procedure Form1024x768Appearance;
Begin
Left := 280;
Top := 103;
Width := 243;
Height := 172;
Caption := 'Form1';
Color := clBtnFace;
Font.Charset := DEFAULT_CHARSET;
Font.Color := clWindowText;
Font.Height := -11;
Font.Name := 'MS Sans Serif';
Font.Style := [];
OldCreateOrder := False;
OnCreate := FormCreate;
PixelsPerInch := 96;
TextHeight := 13;
with Button1 do
Begin
Left := 40;
Top := 40;
Width := 75;
Height := 25;
Caption := 'Button1';
TabOrder := 0;
OnClick := Button1Click;
end;
End;
Вот, таким образом у вас будет процедура, которая вернет форму к виду на момент нажати Вами правой кнопки мыши. Дальше вы правите свою форму под 800x600, а при старте программы проверяете разрешение экрана и если оно выше 800x600, тогда вызываете созданную вами процедуру. например так:
If Screen.Width > 800 Then Form1024x768Appearance elseи т.п. все ваши заготовки.
if Screen.Width > 1024 Then Form1280x1024Appearance
вот и все. и не надо там второй формы
ser_ega (2004-10-31 00:52:00) [8]Спасибо, вы мне очень помогли!
Defunct (2004-10-31 00:39:00) [9]эх jack оказался быстрее. ;>
Defunct (2004-10-31 00:38:00) [10]Если Form2 является наследником Form1 тогда можно в процедуру передать саму форму:
Procedure X( AForm: TForm1);
Begin
With AForm Do
Begin
Label1.Caption := 'Не за что';
// и т.п.
End;
End;
Если же у вас просто разные формы тогда можно с помощью FindComponent:
Procedure X(AForm:Integer);
Var Form : TForm;
Begin
Case AForm Of
1: Form := Form1;
2: Form := Form2;
Else Exit;
End;
With Form Do
Try
(FindComponent('Label1') as TLabel).Caption := 'Не за что';
// и т.д.
Except
End;
End;
jack128 (2004-10-31 00:35:00) [11]если Form1 и Form2 - экземпляры одного и того же класса TForm1 тогда.
Procedure Mastera(i: Integer);
var
f: TForm1;
Begin
case i of
1: f := Form1;
2: f := Form2;
else
f := nil;
end;
if not Assigned(f) then Exit;
f.Label1.Caption:='Всем спасибо!';
//и еще много такого похожего
End;
а если - это разные классы, то
Procedure Mastera(i: Integer);
var
f: TForm;
Begin
case i of
1: f := Form1;
2: f := Form2;
else
f := nil;
end;
if not Assigned(f) then Exit;
(f.FindComponent('Label1') as TLabel).Caption:='Всем спасибо!';
//и еще много такого похожего
End;