Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Фоновый рисунок и проблема с BitBlt / 13 сообщений из 13, страница 1 из 1
03.09.2013, 08:23
    #38384881
Deus_ex_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фоновый рисунок и проблема с BitBlt
Добрый день! Помогите кто может знает, вроде задача простая, а вот что-то реализовать никак не получается.
Нужно разместить изображение по центру формы при чем, при изменении размеров картинка не косячилась и оставалась так же по
центру формы.
Делаю так кидаю на форму TImage, загружаю в дизайнтайме картинку BMP, Visible ставлю в FALSE.
В событии формы OnPaint следующий код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
void __fastcall TfmMain::FormPaint(TObject *Sender)
{
int newLeft, newTop;

newLeft = int((fmMain->Width/2)-327);
newTop = int((fmMain->Height/2)-76-100);

BitBlt(Canvas->Handle,
       newLeft,newTop,
       655, 153,
       Image1->Canvas->Handle,
       0,0,
       SRCCOPY);
}



При запуске приложения сразу картинка нормально встает по центру, но вот при изменении размеров формы изображение глючит, затирается. Уже что только не перепробовал. Если новые координаты TOP и LEFT поставить в нули, то все работает, отрисовывает без глюков при изменении размеров формы только в левом верхнем углу, а не там где мне надо. Подскажите может кто знает что я делаю не так?
...
Рейтинг: 0 / 0
03.09.2013, 13:31
    #38385363
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фоновый рисунок и проблема с BitBlt
Deus_ex_Делаю так кидаю на форму TImage, загружаю в дизайнтайме картинку BMP,
Visible ставлю в FALSE.
Зачем? Visible оставь в true, Stretch поставь false, Center опять true. Всё, телемаркет -
справка рулит.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
03.09.2013, 13:42
    #38385381
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фоновый рисунок и проблема с BitBlt
Deus_ex_,

Не подскажу по коду,
но по логике
перед тем как рисовать картинку снова, надо ее стереть (Clear()-?) - очистить форму, а потом рисовать заново.

Лучше поместить картинку в контейнер (PictureBox -?), а контейнер двигать.
Если например в используемой тобой среде есть что-то типа AutoRedraw для контрола-контейнера. рисуешь, то имеет смысл этим воспользоваться.

Как-то так.
...
Рейтинг: 0 / 0
04.09.2013, 05:19
    #38386088
Deus_ex_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фоновый рисунок и проблема с BitBlt
Dimitry Sibiryakov,
Так работает если только FormStyle = fsNormal, если FormStyle = fsMDIForm, то не работает, надо как то перерисовывать, пока остановился на первом варианте с MDI так и непонятно.
...
Рейтинг: 0 / 0
04.09.2013, 05:23
    #38386089
Deus_ex_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фоновый рисунок и проблема с BitBlt
Дмитрий77Deus_ex_,

Не подскажу по коду,
но по логике
перед тем как рисовать картинку снова, надо ее стереть (Clear()-?) - очистить форму, а потом рисовать заново.

Лучше поместить картинку в контейнер (PictureBox -?), а контейнер двигать.
Если например в используемой тобой среде есть что-то типа AutoRedraw для контрола-контейнера. рисуешь, то имеет смысл этим воспользоваться.

Как-то так.
По логике то вроде так, но ват как это написать :) у канваса формы нет метода Clear :) а в ручную закрашивать эт мне кажется плохое решение, костыльное, хотя может единственно возможное в данном решение задачи.
...
Рейтинг: 0 / 0
04.09.2013, 13:16
    #38386548
pirovindos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фоновый рисунок и проблема с BitBlt
Deus_ex_,
Годится для очистки?
PatBlt(Handle, // Handle Canvas'а
0, // начальная координата по X
0, // начальная координата по Y
Width, // конечная координата по X
Height, // конечная координата по Y
WHITENESS // как закрашивать
);
...
Рейтинг: 0 / 0
04.09.2013, 13:26
    #38386571
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фоновый рисунок и проблема с BitBlt
Deus_ex_Так работает если только FormStyle = fsNormal, если FormStyle = fsMDIForm,
то не работает
Так ты хочешь просто фоновый рисунок для главной MDI формы? Так бы и сказал. Для этого
достаточно поиграться с её Brush-ем, одна строчка кода.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
04.09.2013, 14:02
    #38386630
Deus_ex_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фоновый рисунок и проблема с BitBlt
Dimitry SibiryakovDeus_ex_Так работает если только FormStyle = fsNormal, если FormStyle = fsMDIForm,
то не работает
Так ты хочешь просто фоновый рисунок для главной MDI формы? Так бы и сказал. Для этого
достаточно поиграться с её Brush-ем, одна строчка кода.

да, так и хочу, но он небольшой и должен быть всегда по центру даже при ресайзе формы. А есть примерчик такой строчки?
...
Рейтинг: 0 / 0
04.09.2013, 14:03
    #38386633
Deus_ex_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фоновый рисунок и проблема с BitBlt
pirovindos,

спасибо, если других способов не найду буду пробовать через очистку.
...
Рейтинг: 0 / 0
04.09.2013, 14:10
    #38386651
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фоновый рисунок и проблема с BitBlt
Deus_ex_А есть примерчик такой строчки?
В справку совершенно лень заглянуть?..
Код: sql
1.
2.
   BrushBmp->LoadFromFile("MyBitmap.bmp");
   Brush->Bitmap = BrushBmp;

[/quot]
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
04.09.2013, 14:46
    #38386710
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фоновый рисунок и проблема с BitBlt
pirovindos,

если ты в API (PatBlt и т.д.) залез, то через API (как вариант) и стирай, чего бояться то.

Я тебе дал общий совет, потому что когда-то с подобным возился .

Но заметь, что у меня были все инструменты для того чтобы присвоить картинку контролу в конструкторе (без API), и без глюков при перерисовке.
И у тебя такие инструменты возможно тоже есть, я не знаю.
Просто в моем случае древний VB6 конструктор не поддерживает 32-битные иконки, и только поэтому я рисовал иконку ручками на hdc.
...
Рейтинг: 0 / 0
04.09.2013, 14:47
    #38386716
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фоновый рисунок и проблема с BitBlt
сорри, неправильно указал автора топика в предыдущем сообщении
...
Рейтинг: 0 / 0
05.09.2013, 14:08
    #38387920
Deus_ex_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фоновый рисунок и проблема с BitBlt
Всем огромное спасибо за участие, пока некогда пробовать то, что насоветовали. Через пару дней отпишусь.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Фоновый рисунок и проблема с BitBlt / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]