Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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;


Наверх

Титульная страница Поиск, карта сайта Написать письмо