Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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. Вначале
> думал об Инди, но пока решил остановится на фастнете.


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



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

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

Наверх





Память: 0.48 MB
Время: 0.008 c
3-32640
Malder
2002-03-15 20:45
2002.04.11
Ограничение полномочий пользователей...


4-33013
dip56245
2002-01-31 16:28
2002.04.11
hooks


3-32700
MAxiMum
2002-03-13 15:23
2002.04.11
Изменения в сетевой БД


1-32826
Maxman
2002-03-27 13:58
2002.04.11
Нужно описание алгоритма


3-32622
Moscower
2002-03-22 13:02
2002.04.11
ПРОБЛЕМА С RESTORE на удаленный сервер





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