Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Как отобразить окно?


Автор: IamDreamer 31.3.2006, 20:08
Пытаюсь сделать простой файловый менеджер, но уже полно проблем. Например, есть кнопка "Создать папку", при ее нажатии всплывает Panel, на которой размещены Label и Edit для ввода имени папки. Только у меня она все время находится на форме, т.е. когда не нажата кнопка, Panel просто спрятана на форме Hide'ом, а во время вызова она Show. Как сделать так, чтобы она как-то загружалась что ли?

Автор: Matematik 31.3.2006, 20:11
У нее есть свойство Visible.
Или можно использовать процедуры SendToBack и BringToFront

Автор: IamDreamer 31.3.2006, 20:17
Цитата(Matematik @ 31.3.2006, 20:11 Найти цитируемый пост)
У нее есть свойство Visible.

А это разве не получится то же самое, что делаю я?
Цитата(Matematik @ 31.3.2006, 20:11 Найти цитируемый пост)
Или можно использовать процедуры SendToBack и BringToFront

Это я так понимаю SendToBack - спрятать за что-то, BringToFront - наоборот. А хотелось бы, чтоб по сути без надобности Panel'и вообще не было на форме.

Автор: Guedda 31.3.2006, 22:11
Значит так. Заходишь в меню Project->Options, выбираешь вкладку Forms, и переносишь форму, которая должна выскакивать из Auto-create forms в Available forms.
После этого в кнопке пишешь следующее:
Код

procedure TForm1.Button1Click(Sender : TObject);
begin
  MyNewForm := TMyNewForm.Create(Form1);
  MyNewForm.Show;
end;

а в процедуре TMyNewForm.Close прописываешь:
Код

procedure TMyNewForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree; //это для того, чтоб форма из памяти высвобождалась.
end;

Это уменьшит нагрузку на память, да и быстродействие увеличится.

Автор: Sunvas 1.4.2006, 00:42
Guedda, но ведь IamDreamer желает, чтобы это была панель.


Цитата(IamDreamer @ 31.3.2006, 20:17 Найти цитируемый пост)
А хотелось бы, чтоб по сути без надобности Panel'и вообще не было на форме.

Ну так создай ее в run-time
Код

var p:tpanel;
{..............}
p:=tpanel.Create(form1);
p.Parent:=form1;


Потома так же можна создать едит:
Код

var e:edit;
{..............}
e:=tedit.Create(form1);
e.Parent:=p;


Ну и так создаешь лайбел, кнопку и еще че там тебе нужно.
Потом присваиваешь действия:
Код

//Описываем процедуру
procedure pclick(sender:tobject);
{.............}
//Прописываем процедуру
procedure tform1.pclick(sender:tobject);
begin
showmessage('Текст');
end;
{.........}
//Присваиваем процедуру
p.OnClick:=pclick;

Автор: Guedda 1.4.2006, 08:51
Дык можено еще на ту форму, которая появляется кинуть панель и эдит, написать код, который я писал раньше. Но только у той формы поставить
Код

MyNewForm.BorderStyle :=bsNone;

Из этого следует, что выше написаный код можно изменить так:
Код

procedure TForm1.Button1Click(Sender : TObject);
begin
  MyNewForm := TMyNewForm.Create(Form1);
  MyNewForm.BorderStyle := bsNone;
  MyNewForm.Show;
end;

Автор: former 1.4.2006, 10:24
Можно грузить её из DLL.

Автор: Guedda 1.4.2006, 10:34
Цитата(former @ 1.4.2006, 11:24 Найти цитируемый пост)
Можно грузить её из DLL.

Зачем?
Ведь и так программа не сильно увеличится. Я так понимаю, что человек хочет при появлении этой формы чтобы не появлялась кнопка на TaskBar. А при загрузке из длл, получится эта кнопка, так что лучше всего не пользоваться dll.

Автор: IamDreamer 1.4.2006, 10:58
Guedda, Panel или то, что должно всплывать, надо перекинуть на другую форму и потом
Цитата(Guedda @ 31.3.2006, 22:11 Найти цитируемый пост)
Заходишь в меню Project->Options, выбираешь вкладку Forms, и переносишь форму, которая должна выскакивать из Auto-create forms в Available forms.

или как?

Автор: Guedda 1.4.2006, 11:49
Да. именно так.

Автор: IamDreamer 1.4.2006, 19:07
Код

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  NewForm:= TNewForm.Create(Form1);
  NewForm.Show;
end;


Form2 переименовал (не caption) NewForm, но при F9, выдает "undeclared indentifier: TNewForm". В переменных в роде написал:
Код

var
  Form1, NewForm: TForm1;

Не пойму в чем проблема.

Автор: Foley 1.4.2006, 23:45
а подключить форму не забыл?

Автор: Guedda 2.4.2006, 09:19
Нужно в uses той формы, из которой ты вызываешь форму с панелью прописать модуль формы с панелью.
Либо нажать:
File->Use Unit (нажать Alt+F11) и выбрать юнит формы с панелью.

Автор: IamDreamer 2.4.2006, 13:14
Спасибо всем за помощь.

Автор: IamDreamer 7.4.2006, 07:38
Вот и опять ошибки выдает. В строке
Код

procedure TNewForm.FormClose(Sender: TObject; var Action: TCloseAction);

" ';' expected, but '.' found".
" ';' expected, but ')' found".

Автор: Guedda 7.4.2006, 09:04
Покажи модуль. По ходу, ты стер последний end.
Покажи код, который идет после этой строки:
Код

procedure TNewForm.FormClose(Sender: TObject; var Action: TCloseAction);

Добавлено @ 09:04
И посмотри в мою подпись. Первая строка smile

Автор: IamDreamer 7.4.2006, 09:38
Цитата(Guedda @ 7.4.2006, 09:04 Найти цитируемый пост)
И посмотри в мою подпись. Первая строка

Зачем в irc? Или я не то прочитал.
Вот то, что после процедуры закрытия формы (я в роде как ничего не удалял):
Код

procedure TNewForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action:= caFree;
end;



Автор: Guedda 7.4.2006, 09:41
А после этой процедуры вообще ни одной строки кода нет?
Значит допиши:
Код

procedure TNewForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action:= caFree;
end;

end. //Вот это надо доставить :) А то у тебя модуль не заканчивается.


Внимательней смотри smile


M
Girder
Кланчить репу не хорошо... надо не забывать что енто личное дело участника!

Автор: IamDreamer 7.4.2006, 10:12
Guedda,
Цитата
end.
у меня был, я его не стирал, может сразу весь модуль показать?
Цитата
Не забываем ставить [+]...

Если ты про это, то поставим обязательно. Я просто до этого момента думал, что этим правом обладают только администраторы.

Автор: Guedda 7.4.2006, 10:46
Да. Покажи весь модуль smile
Если не хошь светить, то пришли мне его по ПМ.

Автор: Демо 7.4.2006, 11:43
Цитата(IamDreamer @ 7.4.2006, 10:12 Найти цитируемый пост)
Если ты про это, то поставим обязательно.


Guedda,

smile smile smile

Автор: Guedda 7.4.2006, 11:47
Блин... Как не хорошо, когда в подписи две цитаты... Сейчас изменю... А на самом деле я намекал на это:
Все на канал Винграда в Irc.!!!

Автор: IamDreamer 7.4.2006, 15:59
Цитата(Guedda @ 7.4.2006, 11:47 Найти цитируемый пост)
Все на канал Винграда в Irc.!!!

Дык я же спрашивал:
Цитата

Зачем в irc? Или я не то прочитал.

Письмо отправил.

Автор: IamDreamer 20.4.2006, 20:58
Это снова я. 
Guedda, а как вызывать 
Цитата
procedure TNewForm.FormClose(Sender: TObject; var Action: TCloseAction);
?
При такой попытке:
Код

 NewForm.FormClose(Close);

выдается сообщение " '(' expected but ')' found ", а когда в скобках вообще ничего не пишешь, то говорит, что недостаточно параметров. 
 

Автор: Демо 20.4.2006, 21:01
Цитата(IamDreamer @  20.4.2006,  20:58 Найти цитируемый пост)
NewForm.FormClose(Close);


Код

NewForm.Close;
 

Автор: Тьма 21.4.2006, 00:01
Цитата(IamDreamer @  7.4.2006,  07:38 Найти цитируемый пост)
" ';' expected, but '.' found".
 тут у тебя end скорее всего гдето не поставлен
 

Автор: IamDreamer 21.4.2006, 08:04
Демо:
Код

NewForm.Close;

Это стандартная процедура закрытия, а у  меня типа самодельная:
Код

procedure TNewForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action:= caFree;
end;

Вот с вызовом этой процедуры напряги. 

Тьма, с end'aми-то я разобрался. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)