Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.11;
Скачать: [xml.tar.bz2];




Вниз

Формы 


Swinger   (2002-03-26 23:22) [0]

Здравствуйте! У меня в проекте есть главная форма, создаваемая при запуске программы, и другая, создающаяся динамически (могут существовать одновременно много копий этой формы). Динамическую создаю так: Form2:=TForm2.Create(Application);
Но при этом эта форма не отображается в таскбаре как отдельная программа. Т.е. даже если много форм динамически создалось, то всё равно в таскбаре будет только кнопка моей программы.. :( А мне бы хотелось чтобы каждая динамически создаваемая форма была отдельно выведена в таскбар (как форма для написания сообщения в ICQ).



Swinger   (2002-03-26 23:29) [1]

И ещё один вопрос: (я просто пишу замену ICQ, поэтому такие вопросы.. :))
При двойном клике на имя пользователя выскакивает динамически создаваемая форма для написания сообщения. Как мне определить что такая форма (именно для этого пользователя!!) уже создана и как сделать на неё фокус? Т.е. чтобы пользователь не мог сразу писать два сообщения одному человеку. Он может одновременно в разных окнах писать сообщения разным людям, но не должен использовать два окна для написания одному. Я думал через АПИ, но я просто не силён в этом деле.. :(
И вообще я хотел узнать, как можно уже созданной форме (если, к примеру, у меня может быть одновременно 10 Form2) передать какую-то строчку с информацией? можно бы было делать Form2.textlabel.caption:="lalala", но форм Form2 сразу может быть несколько.. :( как передать определённой?
Заранее благодарен



MBo   (2002-03-26 23:40) [2]

if Assigned(SomeForm)
но надо освобождать правильно (FreeAndNil)

Form2 несколько не может быть - внутренние имена будут
типа Form2_1 и т.д.
лучше при их создании заносить в список или массив, тогда к ним нет проблем обратиться



Swinger   (2002-03-26 23:55) [3]

Спасибо за ответ! :)
1) Попытался я узнавать имя этих форм:

procedure TForm2.FormCreate(Sender: TObject);
begin
label3.caption:=Form2.Name;
end;

При создании первой формы - вылетает ошибка об access violation.. вторая форма создаётся с именем Form2, потом, как ты и сказал, Form2_1 и т.д.. Как избавиться от ошибки?

2)Как мне закрыть эту форму с помощью FreeAndNil?
я пытаюсь так:

procedure TForm2.Office97Button2Click(Sender: TObject);
var name:string;
begin
name:=Form2.Name;
FreeAndNil(name);
end;

Но при попытке так закрыть форму - access violation.. :(

3) И как мне потом обращаться, к примеру, к форме Form2_2? Я попытался сделать так: Form2_2.textlabel.caption:="lalala"; но он ещё ипри компиляции начал ругаться, т.к. такой формы конечно же нет..

Попытался я ещё сделать с If Assigned(Form2_2) но при компиляции сообщает что такой формы нет



Swinger   (2002-03-27 00:07) [4]

Так.. ну с label3.caption:=Form2.Name; я разобрался: просто надо было её вызывать из первой формы, при создании динамической.. но ещё осталось много неотвеченных ответов.. :)



MBo   (2002-03-27 00:28) [5]

FormList:TList;

после создания формы
FormList.Add(Form2);

обращаться
TForm2(FormList[i]).

уничтожать объект Free из его собственного обработчика нельзя
(можно только Release или установкой в Form2.Close Action:=caFree)



MBo   (2002-03-27 00:32) [6]

кроме того, существует список Screen.Forms[I]
это самое простое решение



Swinger   (2002-03-27 09:13) [7]

Спасибо за ответ! Обязательно сегодня попробую! :)
Остались ещё неотвеченными следующие вопросы: :)
1)Как сделать чтобы каждая форма выводилась внизу, там где пуск, (по-моему это таскбар называется, но я иногда торможу и поэтому сейчас неуверен.. :))
2) Как мне обращаться к этим формам? Ну, к примеру, я знаю как они называются (названия хранятся в листбоксе), как мне добавить в Memo1 на Form2 ещё текст? If Assigned(Form2_X) не будет работать, т.к. существует при компиляции только Форм2, а других её клонов нет.. :(



panov   (2002-03-27 09:55) [8]

>Swinger © (27.03.02 09:13)
Новую ветку создавай.



reonid   (2002-03-27 09:59) [9]

Чтобы форма появилась в таскбаре:

SetWindowLong(Handle, GWL_EXSTYLE,
GetWindowLong(Handle, GWL_EXSTYLE) or
WS_EX_APPWINDOW);



Nikolay M.   (2002-03-27 11:34) [10]

> И ещё один вопрос: (я просто пишу замену ICQ, поэтому такие вопросы.. :))

хм...
а ты уверен, что если возникают такие вопросы, то сможешь написать клон аськи?

а как ты собираешься отправлять/принимать сообщения? руками или через какую-то готовую компоненту? если через компоненту, то какую?
в свое время тоже пытались сделать нечто, но обломали зубы, хотя и многому научились, поэтому интересно знать, как идут дела у других.



Swinger   (2002-03-27 23:17) [11]

2 panov почему?
2 reonid А можно чуть поподробней (желательно с примером)? :) просто я плохо знаю как работать с АПИ.. :(
2 Nikolay M. Надеючь, что уверен.. :) Просто я в чём-то силён, а в чём-то нет.. :) Отправление\принятие сообщений идёт через встроенную компоненту FastNet.. там есть что-то вроде NMMSG и NMMSGSERVER. Вначале думал об Инди, но пока решил остановится на фастнете. Всё, обо что "ломаю зубы", спрашиваю тут.. :)
Не отвеченным остался ещё один вопрос : :)

Как мне обращаться к этим формам? Ну, к примеру, я знаю как они называются (названия хранятся в листбоксе), как мне добавить в Memo1 на Form2 ещё текст? If Assigned(Form2_X) не будет работать, т.к. существует при компиляции только Форм2, а других её клонов нет.. :(



Swinger   (2002-03-28 09:05) [12]

Ну помогите же кто-нибудь! :) мне просто это ооочень надо... :(



MBo   (2002-03-28 09:19) [13]

procedure TForm1.Button1Click(Sender: TObject);
begin
inc(f2count);
Application.CreateForm(TForm2, Form2);
form2.Name:="Form2"+inttostr(f2count);
form2.Show;
end;

procedure TForm1.Button2Click(Sender: TObject);
var k:integer;
s:string;
begin
s:="Form2"+edit1.text;
for k:=0 to Screen.FormCount-1 do
if Screen.Forms[k].name=s then begin
Screen.Forms[k].Caption:="OK";
Screen.Forms[k].bringtofront;
break;
end;
end;



Swinger   (2002-03-28 16:10) [14]

Спасибо! :)



Nikolay M.   (2002-03-28 17:25) [15]


> Отправление\принятие сообщений идёт через встроенную компоненту
> FastNet.. там есть что-то вроде NMMSG и NMMSGSERVER. Вначале
> думал об Инди, но пока решил остановится на фастнете.


Тогда я бы скромно посоветовал смотреть на то, что ты сейчас делаешь, как на программу, которая никогда не будет написана, но которая, тем не менее, поднимет уровень твоей квалификации - это уже немало.




Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.11;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.75 MB
Время: 0.028 c
1-32854           PEC                   2002-03-28 15:12  2002.04.11  
Народ !


1-32848           IronHawk              2002-03-27 10:32  2002.04.11  
Приветствую Мастеров ! Прошу бААААльшой помощи, неоткажите....


4-33025           Aleksey1              2002-01-31 01:16  2002.04.11  
win api


3-32639           Юрий Федоров          2002-03-18 16:52  2002.04.11  
Сессия Oracle


1-32722           anod                  2002-03-30 00:37  2002.04.11  
Ошибка при создании popup меню