Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проблема с прозрачностью на ровном месте.


Виталий* ©   (2007-02-20 00:53:00) 

Всем привет.
Открываю Paint, на белом фоне создаю черный квадрат :) .
Сохраняю его с 256 цветов.

Рисую :

procedure TForm1.PaintBox1Paint(Sender: PControl; DC: HDC);
var bmp: PBitmap;
begin
 bmp:= NewBitmap(0,0);

 bmp.LoadFromFile('c:\list5.bmp');

 bmp.DrawTransparent(dc,0,0, clwhite);
 bmp.Free;
end;


Фон сто пудово белый.
С 16цветами и 24 битами и Pascal версии все работает.

В чем проблема??? Помогите !


Vladimyr   (2007-02-21 11:24:00) [1]

... а 98 винда ещё не совсем в утиль пошла.
Она ещё встречается кое-где, например, на не очень новых нотбуках с хилым процом...


Vladimyr   (2007-02-21 11:22:00) [2]

[b]ANTPro[/b], история уже с бородой, но повторить не жалко :)

Началось это ещё во времена, когда кроме Win98 была ещё только Win95, и всё :) А кодил я тогда на VCL, но извращаться уже тогда любил :)

И вот накодил я простенькое приложеньице, причём без заголовка окна...
Батоны там овальные, кажется, были... И вот вижу я, что при работе моей проги батоны рисуются в левом верхнем углу экрана, т.е. прямо на рабочем столе!!!
Я прифигел немного, стал тестировать на разных компах, и обнаружил, что такое бывает на разных машинах, но только под 98 виндой, под 95 вроде нормально.
Причину я тогда не нашёл, подшаманил немного, так что глюк стал вылезать реже (но совсем не пропал), и забил :)

Теперь недавно (во времена версии KOL около 1.9), решил я создать ещё одно простенькое приложеньице... И не нашёл в KOL кнопки с картинкой (она чуть позже появилась ;)
Не долго думая беру кнопку без картинки и сам рисую на ней картинку в обработчике OnPaint. Всё вроде работает, но для очистки совести проверяю под разными операционками: XP, 2000, 98...
Каково же было моё удивление, когда под 98 я увидел знакомую картину: иконка вместо центра кнопки улетела в верхний левый угол экрана!!!  %)

"Ну, щас я тебя поймаю!" - подумал я и полез в код. Но ничего неправильного в коде обнаружено не было. Тогда я решил вместо канвы задействовать API и Device Context. Глюк сразу исчез и больше не проявлялся.


Vladimir Kladov   (2007-02-20 17:21:00) [3]

Как раз для этго ражиме 256 цветов нашлось 3 ошибки: одна команда лишняя, другой не хватало, и не на ту метку вдобавок цикл. Просто мы плохо тестировали, забыли режим целый.


Виталий*   (2007-02-20 16:52:00) [4]

Да все работает , но некоторые другие картинки теперь без прозрачности :)
Буду ждать исправления или на пока перерисую.


ANTPro   (2007-02-20 16:33:00) [5]

> [4] Vladimyr ©   (20.02.07 15:37)
> 2. Не надо иcпользовать канву! Глючит на Win98. Лучше DC.

Можно по подробней?


> [7] Vladimir Kladov   (20.02.07 16:25)
> CONVERT2MASK

Волшебная функция
Тараканы так и лезут к ней : )


Виталий*   (2007-02-20 16:32:00) [6]

Спасибо, прийду домой попробую обязательно!!!


Vladimir Kladov   (2007-02-20 16:25:00) [7]

вот такое пока решение: USE_OLDCONVERT2MASK в опции проекта.


Vladimir Kladov   (2007-02-20 15:57:00) [8]

А, не то посмотрел. У меня с последнего раза в опциях PAS_VERSION осталась, с ней все прозрачно. В асме действительно прозрачность куда-то уходит. Хорошо, посмотрю, все равно в асме никто ковыряться не любит кроме меня. Хотя я тоже не люблю, но приходится.


Vladimir Kladov   (2007-02-20 15:51:00) [9]

Нарисовал квадрат, заменил Bmp1.bmp в DemoPaintBitmap и рисование на DrawTransparent( ..., clWhite ). прозрачно. Сделал на Paintbox, а не на форму. Еще прозрачнее (в смысле мусор от прежнего содержимого экрана). Что еще сделать?


Vladimyr   (2007-02-20 15:37:00) [10]

1. вместо clwhite поставить bitmap.Pixels[0,0]
2. Не надо иcпользовать канву! Глючит на Win98. Лучше DC.


Виталий*   (2007-02-20 14:14:00) [11]

Откройте paint нарисуйте квадрат (или что угодно) и сохраните как 256 bmp. Вот это та самая картинка.


> Пробовал?: bmp.DrawTransparent(Form1.canvas.handle,0,0,
> clwhite);

Э-э. а зачем? Методы то одинаковые.

Пробовал, пробовал.


ANTPro   (2007-02-20 01:48:00) [12]

> [0] Виталий*   (20.02.07 00:53)
> list5.bmp

Картинку покажи

Пробовал?: bmp.DrawTransparent(Form1.canvas.handle,0,0, clwhite);


Виталий*   (2007-02-20 00:54:00) [13]

Версия кол самая последняя.


Наверх

Титульная страница Поиск, карта сайта Написать письмо