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

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

Ошибка в PBitMap


Boris Mouradov ©   (2005-01-11 11:38:00) 

KOL 2.00
Вот такая конструкция работает:

i := Bitmap.Canvas.TextHeight('Wg');
Bitmap.Canvas.TextOut(...)

А вот такая - нет:

Canvas := Bitmap.Canvas;
i := Canvas.TextHeight('Wg');
Canvas.TextOut(...)

А все потому, что в функции TextExtent г.Герасимовым добавлена строка, сбрасывающая Handle. После комментирования его строки все заработало. Исправьте, пожалуйста, ситуацию.

Спасибо.


<Falcon>   (2005-01-12 18:19:00) [1]


> Какому Владимиру? И на какой адрес?

Владимиру Кладову. Адрес посмотрите на bonanzas.rinet.ru я не помню.


Boris Mouradov   (2005-01-12 14:08:00) [2]


> Так лучше Владимиру на мыло отправьте.

Какому Владимиру? И на какой адрес?


<Falcon>   (2005-01-12 13:20:00) [3]


> Пример? Пожалуйста!

Так лучше Владимиру на мыло отправьте. Вместе с примером. Может быть тут не заметит.


miek   (2005-01-11 21:12:00) [4]

>А как забить на BitMap? Где рисовать картинки? Как их сохранять? Да и не в битмапе дело, а в Canvas.

Использовать альтернативные библиотеки, особенно мою:)

А дело - именно в канве, ибо нечего наворачивать ООП на простые объекты...


Boris Mouradov   (2005-01-11 20:50:00) [5]

Пример? Пожалуйста!

procedure TMainForm.PaintBox1Paint(Sender: PControl; DC: HDC);
var bm: PBitMap;
   Canvas: PCanvas;
begin
 bm := NewBitMap(100, 100);
 bm.PixelFormat := pf24bit;
 bm.Canvas.Font.Color := clRed;
 bm.Canvas.TextHeight('Wg');
 bm.Canvas.TextOut(0, 0, 'Wg');

 Canvas := bm.Canvas;
 bm.Canvas.Font.Color := clLime;
 Canvas.TextHeight('Wg');
//  bm.Canvas;
 Canvas.TextOut(0, 20, 'Wg');

 bm.Draw(PaintBox1.Canvas.Handle, 0, 0);
end;

Скомпилированный пример и исходники берите здесь: www.alar-2.ru/Boris/Test.rar (24К)

Первый красный слог пишется нормально, второй зеленый - нет.
Попробуйте раскомментировать строку (см. test2.exe) - и всё будет Ок. Беда в том, что в функции есть доступ к Canvas, но нет доступа к BitMap, поэтому и пришлось лезть в исходники.

Потеря GDI это плохо, согласен, но что делать, если программа иначе не работает? Помогите исправить глюк.

А как забить на BitMap? Где рисовать картинки? Как их сохранять? Да и не в битмапе дело, а в Canvas.


miek   (2005-01-11 19:02:00) [6]

Вообще давно пора забить на TBitmap. Лично меня его глюки достали уже давно.


<Falcon>   (2005-01-11 14:55:00) [7]

Владимир говорит, что у него таких проблем нет. Я отсылал ему пример, у меня эта беда вылазит прии спользовании mdvXLGrid. Но он ответил, что такое не годится, у него и компонет этот не скачан. Это конечно справедливо, но.. Отошлите ему пример с битмапом! Он говорил, что посмотрит если будет явно виден глюк и пример без дополнительных компонентов будет.
А коментить строку Герасимова, возможно не есть хорошо, поскольку может приводить к потере GDI ресурсов. Обсуждали уже это. Это только следствие устраняет - не причину.


SPeller   (2005-01-11 12:59:00) [8]

Гыг, опять вылез этот канвас :) Надо с ним что-то сделать. Мож достать тов. Герасимова чтоб он придумал что-то другое? Или же пусть Владимир сам изменит? Но вручную каждый раз писать PCCanvas(C).fIsPaintDC := True как-то обламывает. Уж если это системная фича, то пусть этот конфликт и решается самостоятельно внутри kol.pas, а не руками программиста.


Наверх

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