![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема с прозрачностью на ровном месте.
Виталий* © (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]Версия кол самая последняя.