| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > Form Show |
| Автор: Kirgston 17.2.2009, 13:59 |
| Всем доброго времени суток! Ребята. Вот тут я столкнулся с необычной проблемой. В Делфи я просто если вызывал с Формы 2 Форм1.Шоу всё работало. Но в С++ как-то не так... Когда я пишу на второй форме Form1->Show(); Ничего не происходит. Тоисть вообще. Компилятор не ругается и т.д. но ничего вообще не происходит. При трассировке я увидел что оно вообще не вызывает форму 1. В чем может быть проблемка? =) |
| Автор: mrbrooks 17.2.2009, 14:14 |
| Kirgston, для Бормана есть свой раздел. По сабжу - ты форму1 заинклюдил? Сдается мне нет. Alt-F11 спасет отца русской демократии. |
| Автор: Kirgston 17.2.2009, 14:52 |
| Эээээ извините но на сколько я знаю ВС++ и БС++ это С++ )))) язык то у них один )))) может компоненты разные но синтаксис один же... Да я само собой добавил. |
| Автор: Dem_max 17.2.2009, 16:11 | ||
| У тебя Form2 как project->Options->Forms->Auto Create или Available Forms?? если последнее то нужно сделать
|
| Автор: mrbrooks 17.2.2009, 16:18 | ||
В этом случае вылезла бы Access violation |
| Автор: Dem_max 17.2.2009, 16:29 |
| а ты случаем не SplashScreen делаешь для основной формы ? |
| Автор: mrbrooks 17.2.2009, 16:32 |
я? Добавлено через 40 секунд кстати очень даже возможно. |
| Автор: Dem_max 17.2.2009, 16:41 | ||
| тады держи Делаешь форму, которая будет изображать SplashScreen; Делаешь WinMain вида: и форма должна быть project->Options->Forms->Available Forms
|
| Автор: Kirgston 17.2.2009, 17:17 | ||||
| Неее ребят пасибки конечно! Сплеш мне нужен, но не счас )))) Вот смотрите
В итоге при загрузки программы идет проход Форм1. Шоу . А при вызове оного с Формы 2 уже не идет... |
| Автор: Dem_max 17.2.2009, 17:29 |
| лучше проектик кидани, только удали *.tds |
| Автор: Kirgston 17.2.2009, 17:51 |
| Вот =) компилил на Билдере 2009 http://www.sendspace.com/file/42x21l Зеркало http://rapidshare.com/files/199212261/__.rar.html |
| Автор: Dem_max 17.2.2009, 18:42 |
| а где Form1->Hide() ??? чтобы сделать Form1->Show(); у тебя форма и так на экране, а то что ты ее показываешь еще раз от этого ничегоне меняется, ну может только становиться передним |
| Автор: Kirgston 17.2.2009, 19:44 |
| Хех в Делфи чуток по другому =) я мог пользоватся Шоу без Хайда =) пасибки тут оно помогло. Но вот тут не задача... я хочу чтобы форма плавно переходила в форму... а тут сначала пропадает форм 2 а затем начинает появлятся форм 1=) а мне бы хотелось чтобы без задержки. Тоисть одновременно одна исчезала а другая появлялась =) |
| Автор: Dem_max 18.2.2009, 06:17 | ||||||
Вообщето одна мгновенно исчезает другая мгновенно появляется, даже глаз не замечает смену действий. Проверял таким кодом
|
| Автор: Kirgston 18.2.2009, 14:57 | ||||||
| Сделал как мне надо =) пасиб большое ! Ребята помогите бедному ламо-чайнику освоить С++ ))) Вот щас захотелось мне сделать свою функцию, да или просто процедуру...
ну например я тут спокойно вижу где подключаются библиотеки, где описываются обекты, где процедуры... в каких они разделах (приват, паблик и т.д.) А в С++...
как-то не очень понятно... сверху вижу что описаны библеотеки. Потом... ресурсы какбы... а где елементы те что я понаставлял? Как мне сделать свою функцию? =) например как её описать я понимаю... но вот... в делфях мне надо было её описать в разделе type типа type procedure blablabla; а тут ничего такого нету. При попытке ввести просто перед началом кода заголовок функции и нажать на Ctr+Shift+C (В делфи автоматом создается "заготовка" процедуры) у меня ничего не получилось... Помогите пожалуйста бедному ламеру =) Да и ещё один вопросик. Почему при
у меня не происходит открытия ридми? Хотя сайтики открывает хорошо. Да и ехешники тоже. А вот тхт файлы уже не в какую... Заранее большое спасибо!!! |
| Автор: Dem_max 18.2.2009, 15:29 | ||||||||||
все описывается в структуре класса который храниться в "Unit1.h" а вот и сам класс
Ээээ, это как нибудь без нас, литературы куча, примеров тоже + Google + MSDN |
| Автор: Kirgston 18.2.2009, 21:54 | ||||
Ой пасиб большое!!! Да я не такой чтобы постоянно спрашивать =) мне бы просто какбы... привыкнуть к среде =) вот остался только вопросик... в Делфи я когда обявлял функцию\процедуру я мог описать её и нажать Ctr+Shift+C и автоматически создавался обработчик под мою функцию\процедуру. Тут этакое не катит =) может есть какие-то аналоги? А то описывать свою функцию вручную не очень удобно. Простой пример:
Получаю:
Вот что-то на подобии этакого =) Заранее большое спасибо!!! З.Ы. я тоже хочу научится так шайтанить в С++ как вы |
| Автор: TopCore 22.8.2009, 20:57 |
| Kirgston, ну как, стал шайтаном? |
| Автор: dasknix 7.11.2009, 03:13 | ||||||||||
ок, а такой вопрос: после сидения часов, этак, шести-восьми с Брукландом, и уже мирно покуривая вместе с его ближним братом Дебаггером Мне явила свой лик сама Суть предложенного тобой кода. Она, как я понял заключается в том что это неудобно, ибо убить форму-сплеш, созданную в главном сурсе проекта не имеется никакой возможности! Т.е. мы можем работать с внутренними элеметами управления и другими объектами на форме, но прочитать её свойства или повлиять на них напрямую изнутри не имеется никакой возможности! Это не есть гуд, ибо, например в моей ситуации как ты уже понял я скрываю/закрываю её сам, после того, как например моя прога отыскала конфиг, или не отыскала и выходит с предупреждением.. Вопрос: можно ли сделать это, не загружая основную форму, при чём не в основном сурсе (как то не правильно с точки зрения распределения кода получиться), а в сурсе модуля, который как раз управляет этой формой?.. E.G.: [MainProjectSource].cpp
SplashForm.cpp
SplashForm.h
т.е. сплеш либо сам сворачивает свои причиндалы, если всё нормально, либо выходит из программы, если error.. (e.g. file not found..) PS Application->MainForm == frmMain .. |
| Автор: dasknix 7.11.2009, 03:39 | ||||
| хехе, покумекал тут и нашёл временное решение: перенёс
из главного сурса (MainProjectSource) в iOC_Splash_Prepare(), и добавил туда
и всё это будет выполняться только если препарирование прошло нормально, иначе приложение закрывается.. (exe завершает работу, проверял), но это всё равно не совсем гуд имхо.., я не очень понимаю что делает App->Run(); и времени нету, может кто поделиться сжатым куском полезной инфы?.. |
| Автор: Anikmar 7.11.2009, 03:48 |
Главное правило программера: работает - не трогай. В кратце - вызывает вашу программу А коль времени нету - тогда шаманьте хоттабыча... Иначе - Программирование занимает большую часть свободного времени. |
| Автор: Dmi3ev 7.11.2009, 10:07 | ||
Понравилось высказывание Применил его к некоторым жизненным вещам(не компьютерным) и повеселился |
| Автор: A5uKa 7.11.2009, 10:45 | ||||||
по поводу сплэшки мне кажется проще всего так
если "во время сплэшки" надо всё же что-то делать на главной форме гружу сплэшку прямо с главной формы т.е.
и
а там уже что угодно ... |
| Автор: dasknix 10.11.2009, 04:01 | ||||||||
мне нужно делать именно с самой сплешкой "что-то" =) а форму я просто потом включу ShowMainForm'ом, это не проблема, проблема в том, что я не могу получить доступ к форме, созданной и вызванной в главном файле кода! Она не может сама себя закрыть, а вместо этого вылетает с exception'ом.. т.е.: пишу в SplashForm:
или
в общем, не важно, что, любое обращение к ней завершается бесполезным бубном и 2-3 пачками сигарет, после которых уже даже киберпанк муви смотреть не хочется.. =\ PS и грузить из главной формы эту - не вариант, у меня MainForm массивный и башущий вобщем), поэтому сначала сплеш проверяет версию ОСи, стека и прпр, наличие и состояние конфигов, а уже после релизит конф-инфу из источника данных и приминяет их на форму, после чего она уже появляется, причем без глюков с постепенной прорисовкой и прпр.. вот такие дела. неужели никто не знает как правильно поступить, форум же вроде набит гуру.. И почините поиск по разделу уже, я 4м модерам сообщил недели полторы назад - ноль внимания..!
|
| Автор: A5uKa 10.11.2009, 09:06 |
| frmSplash->Hide() или закрыть её на активации MainForm не вариант ? |
| Автор: dasknix 13.11.2009, 00:33 | ||||
| 2A5uKa нет, не вариант. Автоматическая инициализация формы - не выход, т.к. она большая и нагруженная, должна быть запущена только, если код сплеша сообщит что ошибок нет и можно загружать главную форму. Других вариантов не дано, если нужно чтобы работало быстро, а это нужно. Пример: ты грузишь Photoshop CS3 на компе 1гГц + 256 RAM, у тебя вылезает сплешь, в фоне грузиться workspace, и после того как у тебя 200 метров мозгов забито тебе сообщают, что файл конфигурации не найден или не может быть сохранён (если его нету, то он автосгенериться..). Причем сообщение сразу не вылезет как-раз потому что будет грузить проц и вообще комп загружающаяся форма. Так вот, повторюсь: как можно вызвать из кода сплеша [SplashForm.cpp] закрытие его формы [frmSplash->Close();], учитывая то, что сам он создан фрагментом главного кода проекта [имя_проекта].cpp:
...? PS Вот что не работает [SplashForm.cpp]:
|
| Автор: dasknix 13.11.2009, 00:54 | ||
почитал http://msdn.microsoft.com/ru-ru/library/ms157902.aspx вот бы узнать, что происходит, и что обрабатывает этот Run(), если форма ещё не создана.. и опять же, переписана ли Borland'овская Run() корректно, или могут возникнуть проблемы, которые при тестировании выявить трудно?.. Кто может подсказать?.. |