Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2007.09.02;
Скачать: [xml.tar.bz2];

Вниз

Корректное пересоздание 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 вся ветка

Форум: "WinAPI";
Текущий архив: 2007.09.02;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.042 c
9-1159030536
glscener
2006-09-23 20:55
2007.09.02
[GLScene] Нужна консультация


10-1136671047
Дельфин
2006-01-08 00:57
2007.09.02
Как вызвать метод Sort класса Range из процедуры D6?


1-1182415155
infom
2007-06-21 12:39
2007.09.02
При загрузке проекты слетает свойство DataSource


15-1185996928
Иван Е
2007-08-01 23:35
2007.09.02
как пацана оттащить от компа


1-1182412276
ChaoX
2007-06-21 11:51
2007.09.02
Как запустить форму из пакета?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский