Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.09.02;
Скачать: CL | DM;

Вниз

Корректное пересоздание Pen   Найти похожие ветки 

 
Comp ©   (2007-02-25 11:19) [0]

Всем привет!
Вот собственно проблема. Создаю Pen - все нормально.
Но мне нужно его изменить при необходимости. Как я понял-это делается удалением старого и установкой нового.
Делаю так:

procedure TDrawBox.SetPen(PH: HPEN);
begin
 if PH<>0 then DeleteObject(PH);
 PH:=CreatePen(FPenStyle,FPenWidth,FPenColor);
 SelectObject(FBitMapDC,PH);
end;

этот метод вызываю каждый раз, когда необходимо.

Все хорошо, но до поры до времени. Потом приложение начинает глючить - цвет карандаша меняется сам, окно не прорисовывается, особенно NC область.

Что не так?

Зараннее спасибо!


 
Comp ©   (2007-02-25 11:30) [1]

Еще...
FPenStyle, FPenWidth, FPenColor - всегда не пустые - по любому имеют значения в любое время.
FBitMapDC - контекст буфера прорисовки.
Все перекопал, методом исключения пришел к такому выводу, что что-то с этим методом не так.

Я не думаю (точнее надеюсь), что нужно еще каждый раз освобождать контекст буфера.


 
Comp ©   (2007-02-28 20:32) [2]

Мастеров нету.
Чтож, пока дождешься ответа - и сам найдешь причину.

Испортился сайт. раньше года 3 назад - тут настоящая школа была. А сейчас... Или Делфи всем надоела или просто сайт пора закрывать...


 
TRUNK ©   (2007-02-28 20:42) [3]


> procedure TDrawBox.SetPen(PH: HPEN);

А хэндл какого пэна передаётся в параметре?


 
Ricks ©   (2007-03-01 16:51) [4]

Попробуй так:

procedure TDrawBox.SetPen(var PH: HPEN);
begin
if PH<>0 then DeleteObject(PH);
PH:=CreatePen(FPenStyle,FPenWidth,FPenColor);
SelectObject(FBitMapDC,PH);
end;


 
clickmaker ©   (2007-03-02 10:13) [5]


> Или Делфи всем надоела

а какая связь между дельфи и windows API?


 
Rouse_ ©   (2007-03-02 14:18) [6]

> Что не так?
Не так то, что SelectObject суть является функцией и возвращает тебе хэнл объекта, который был ассоциирован с DC ранее, до загрузки нового объекта (в твоем случае Pen). Перед удалением этого нового объекта (Реn) ты должен вернуть обратно старый через тот-же SelectObject()

т.е. примерно так..

PH := CreatePen(FPenStyle,FPenWidth,FPenColor);
OldDC := SelectObject(BitmapDC, Bitmap);
///... тут работаем
SelectObject(OldDC, Bitmap);
DeleteObject(PH);


 
Rouse_ ©   (2007-03-02 14:21) [7]

Bitmap = PH в твоем случае :) Выдрал из своего кода просто и не поправил...


 
Comp ©   (2007-03-10 21:29) [8]

Rouse_ ©

Спасибо.

Действительно, старый Pen нужно вернуть на место.

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


 
Comp ©   (2007-03-10 21:30) [9]

clickmaker ©   (02.03.07 10:13) [5]

> Или Делфи всем надоела

а какая связь между дельфи и windows API?

если бы не было связи, этого форума не существовало бы, правда?
Я тебя понимаю-на API можно программировать и другими средствами, как говорят в математике, отличными от Delphi. Я хотнл сказать, что уже меньше народу заходит на сайт. Раньше можно было уходить с сайта уже довольным, что понял...получил ответ., совет хороший и все такое. Сейчас надо зайти только через день, или в течении недели-может что-то и скажут.

Просто сейчас уже меньше народу хочет изучать Delphi-вследствие заполнения рынка всякими навязанными 1С. Обленились люди. Не хотят ломать голову над программированием, хотят чтоб все было легко.

Но эти люди не понимают, что Паскаль (-> Delphi) всегда был и остается языком высокого уровня, т.е. профессиональным языком.


 
Comp ©   (2007-03-10 21:50) [10]

Даи С++ многим по душе.

На вкус и цвет товарищей нет.

А нам Pascal по душе. и хоть убей, не оторвешь.



Страницы: 1 вся ветка

Текущий архив: 2007.09.02;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.019 c
2-1186587997
Ага
2007-08-08 19:46
2007.09.02
Как удалить компонент?


11-1168868161
mixail_shar
2007-01-15 16:36
2007.09.02
Как к Меню привязать картинки?


1-1182330747
Makhanev Alexander
2007-06-20 13:12
2007.09.02
прочитать результат консольного приложения...


11-1168803255
vampir_infernal
2007-01-14 22:34
2007.09.02
проблема с KOLPrinters


15-1185530247
Dib@zol
2007-07-27 13:57
2007.09.02
Точка входа