Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.11.14;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.036 c
3-1097763050
denis24
2004-10-14 18:10
2004.11.14
Добавление записи в table


14-1098528423
31512
2004-10-23 14:47
2004.11.14
Как вызвать метод класса в другом потоке?


1-1099167997
ser_ega
2004-10-31 00:26
2004.11.14
Form


10-1060682938
S@shka
2003-08-12 14:08
2004.11.14
Посоветуйте статьи для начинающего


1-1098972789
Sp0k3r
2004-10-28 18:13
2004.11.14
Строки...





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский