Форум: "Основная";
Текущий архив: 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.053 c