Поиск:

Ответ в темуСоздание новой темы Создание опроса
> 1 программа - 2 окна, помогите разобраться 
:(
    Опции темы
Superklug
Дата 9.8.2007, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 16.6.2006

Репутация: нет
Всего: нет



Программа состоит из 2-х окон. Одно главное, а второе создано просто для отображения разной информации. Т.е. оба окна на экране одновременно, кнопки нажимаешь в одном окне, а информация появляется во вотором. Второе окно создается неправильной формы (по png картинке) и может меняться по ходу программы. У меня возникла куча проблем... 
1. Как запретить передачу фокуса второму окну? Чтобы активным было всегда первое. Иначе при нажатии Alt+F4 (если активно второе) появляется ошибка...

2. Не знаю почему, но при нажатии Alt+Tab не происходит переход к след. приложению. Это происходит только если Tab нажать дважды.

3. Есть функция:

Код

void TfmPhone::CreatePNGRgn(TPNGObject *Picture)
{
        HRGN tmpRgn, wndRgn;
        tmpRgn=CreateRectRgn(0,0,0,0);
        wndRgn=CreateRectRgn(0,0,0,0);
        for(int y=0; y<Picture->Height; y++)
        {
                int x=0;
                while(x<Picture->Width)
                {
                        while((x<Picture->Width)&&(Picture->AlphaScanline[y][x]==0))
                                x++;
                        if(x!=Picture->Width)
                        {
                                int XStart = x;
                                while((x<Picture->Width)&&(Picture->AlphaScanline[y][x]!=0))
                                {
                                        x++;
                                }
                                tmpRgn=CreateRectRgn(XStart,y,x,y+1);
                                CombineRgn(wndRgn, wndRgn, tmpRgn, RGN_OR);
                        }
                }
        }
        SetWindowRgn(Handle, wndRgn, TRUE);
        DeleteObject(wndRgn);
        DeleteObject(tmpRgn);
}


При многократном обращении к ней, т.е. если пользователь много раз поменяет картинку, вылетает ошибка:
Project Project1.exe raised exception class EPNGOutMemory with message 'Some operation could not be performed because the system is out of resources. Close some windows and try again'...
Не могу понять почему...

4. Как сделать смену картинок красивой? Хотя бы так, чтобы форма исчезала и появлялась уже другой. А то сейчас это страшное зрелище =)

5. При перемещении этого окна за пределы рабочего стола, картинка стирается. Сделал так:
Код

Graphics::TBitmap *bmp = new Graphics::TBitmap();
bmp->Assign(png);
fmPhone->Canvas->Brush=bmp;

Работает, но не знаю на сколько это красиво =)


Заранее очень благодарен.
PM MAIL   Вверх
Anark1
Дата 9.8.2007, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 622
Регистрация: 15.12.2006
Где: RF -> Moscow

Репутация: нет
Всего: 11



1. нужно вызывать одну из форм модально.
2. по этой же причине
3. проверь, по моему что то с x,y. 
4. Ну срываешь его. Visible = false. выполняешь операторы по смене картинки. И вновь показываешь.
5. А что тебе тут не нравится ?


--------------------
Enjoy yourself, still you can...;)

user posted image

user posted image
PM MAIL ICQ   Вверх
Superklug
Дата 9.8.2007, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 16.6.2006

Репутация: нет
Всего: нет



Anark1, 
1. Хм... Я может что-то не понимаю, но думаю в этом случае нельзя будет обращаться ко второй форме. Т.е. перетаскивать ее или вызывать PopupMenu. Если это не так, то напишите пожалуйста пример.
2. ...
3. А что с ними может быть?
4. Я пробовал. Ошибка: "Cannot change Visible in OnShow or OnHide" =(
5. Очень рад, что все хорошо =)
PM MAIL   Вверх
Vyacheslav
Дата 9.8.2007, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 47
Всего: 59



Цитата(Superklug @  9.8.2007,  12:25 Найти цитируемый пост)
При многократном обращении к ней, т.е. если пользователь много раз поменяет картинку, вылетает ошибка:

Где то у тебя при смене картинки создается новый объект, связанный с картинкой и при этом старый не уничтожается


--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
Superklug
Дата 9.8.2007, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 16.6.2006

Репутация: нет
Всего: нет



Цитата(Vyacheslav @  9.8.2007,  17:01 Найти цитируемый пост)
Где то у тебя при смене картинки создается новый объект, связанный с картинкой и при этом старый не уничтожается 

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

Это сообщение отредактировал(а) Superklug - 9.8.2007, 23:14
PM MAIL   Вверх
deniska
Дата 10.8.2007, 08:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 398
Регистрация: 1.7.2005
Где: Троицк

Репутация: нет
Всего: 0



3. Ты tmpRgn скока раз за цикл создаешь? а удаляешь всего один раз
PM MAIL ICQ   Вверх
Superklug
Дата 10.8.2007, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 16.6.2006

Репутация: нет
Всего: нет



Цитата(deniska @  10.8.2007,  08:35 Найти цитируемый пост)
3. Ты tmpRgn скока раз за цикл создаешь? а удаляешь всего один раз 

Огромное тебе спасибо! И как я сам не увидел... =)

Осталось разобраться с п. 1 и 4 

И еще у меня появился новый вопрос. Я подумал, что каждый раз создавать переменную bmp (см. первый пост п.5) не хорошо. Создал глобальную переменную, память под которую выделяю в OnCreate. А тут оставил только последние две строки. Но теперь кисть для формы не изменяется... =( Может проблема в методе Assign?
PM MAIL   Вверх
Superklug
Дата 11.8.2007, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 16.6.2006

Репутация: нет
Всего: нет



Если написать в OnActivate 2-ой формы fmMain->SetFocus(), то это решает проблему, но в этом случае не обрабатывается OnMouseDown... =( А мне необходимо обрабатывать это событие, чтобы перемещать форму. Что интересно, при правом клике PopupMenu появляется...

Помогите пожалуйста разобраться с моими вопросами.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0481 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.