Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.11.14;
Скачать: CL | DM;

Вниз

Form   Найти похожие ветки 

 
ser_ega   (2004-10-31 00:26) [0]

Ребята помогите! У меня есть процедура:

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;


 
jack128 ©   (2004-10-31 00:35) [1]

если 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;


 
Defunct ©   (2004-10-31 00:38) [2]

Если 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;


 
Defunct ©   (2004-10-31 00:39) [3]

эх jack оказался быстрее. ;>


 
ser_ega   (2004-10-31 00:52) [4]

Спасибо, вы мне очень помогли!


 
Defunct ©   (2004-10-31 01:10) [5]

ser_ega дайте я попробую угадать зачем вы это спрашивали.
Делаете вторую форму для разрешения 800x600? по вопросу с этой ветки:
http://delphimaster.net/view/1-1099061901/

Не нужно этого делать.

Кликните на форме правой кнопкой мышки, выберите в появившемся попап меню "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
и т.п. все ваши заготовки.

вот и все. и не надо там второй формы


 
Defunct ©   (2004-10-31 01:18) [6]

малость ошибся:

procedure TForm1.Form1024x768Appearance;


 
jack128 ©   (2004-10-31 02:14) [7]

Defunct ©   (31.10.04 0:39) [3]
;-) :-P
Defunct ©   (31.10.04 1:10) [5]
Кстати говоря GExperts такие вещи умеет делать.(переводить dfm в код)


 
Defunct ©   (2004-10-31 02:59) [8]

> If Screen.Width > 800 Then ... else
> if Screen.Width > 1024

LOL, прогнал малость, извините ;)

конечно же, должно быть:

if Screen.Width > 1024 Then ... else
if Screen.Width > 800 Then ...


 
GuAV ©   (2004-10-31 03:10) [9]

Defunct ©   (31.10.04 1:10) [5]
Form1024x768Appearance else
if Screen.Width > 1024 Then Form1280x1024Appearance


В принципе, такое можно делать и с Dfm.
Form1:=TForm1.CreateNew;
try
 Stream.ReadComponent(Form1);
...


 
ser_ega   (2004-11-01 00:38) [10]

> Defunct

Нет ты не угадал!


 
ser_ega   (2004-11-01 00:43) [11]

Все шло очень хрошо пока не написал:
...
(fm.FindComponent("DateTimePicker1") as TDateTimePicker).date:=strtodate(dt);
...

При запуске проги он мне говорит что TDateTimePicker неизвестный идентификатор! Что это? Может он как-то по другому называется, хотя...



Страницы: 1 вся ветка

Текущий архив: 2004.11.14;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.043 c
14-1098668960
Думкин
2004-10-25 05:49
2004.11.14
С днем рождения! 25 октября


1-1099037379
-kiril
2004-10-29 12:09
2004.11.14
Двигать форму, держась за любую ее точку


1-1098887305
progress
2004-10-27 18:28
2004.11.14
Panel1.Handle - обработка изображения


1-1099130123
Artemiy2004
2004-10-30 13:55
2004.11.14
Как скопировать небольшую часть картинки в новый битмап?


14-1098780654
Snip
2004-10-26 12:50
2004.11.14
MBR