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

Вниз

Рисование с помощью API.   Найти похожие ветки 

 
Новичек ©   (2005-04-30 15:59) [0]

Уважаемые Мастера, запутался совсем в MSDN с рисованием примитивов :-(
Подскажите, пожалуйста, как нарисовать на форме окружность, прямоугольник и т.п. средствами API. День, очевидно, сегодня не мой - не могу нарисовать, хоть тресни :-(


 
MBo ©   (2005-04-30 16:06) [1]

Ellipse(Canvas.Handle,10,10,100,80);


 
Новичек ©   (2005-04-30 16:11) [2]

А я уперся в CrerateRectRgn и ей подобным... Воитину, не мой день.
Спасибо. Как всегда - просто до гениальности :-)


 
Новичек ©   (2005-04-30 16:19) [3]

А почему не работает Ellipse(Panel1.Handle,10,10,100,80); ?
То есть, почему не рисуется на панели?


 
MBo ©   (2005-04-30 16:19) [4]

Если знаешь метод TCanvas, но сомневаешься, какая API-функция используется - смотри в исходники Graphics.pas


 
MBo ©   (2005-04-30 16:20) [5]

Panel1.Handle - дескриптор окна панели, а нужен дескриптор графического контекста. GetDC поможет.


 
Новичек ©   (2005-04-30 16:28) [6]

Пробую...


 
Новичек ©   (2005-04-30 16:46) [7]

Ага, получилось:  Ellipse(GetDC(pnl1.Handle), 0, 0, 100, 80); рисует заполненный эллипс. Вот только метод Repaint стирает его. Но лиха беда начало, докопаюсь, след взят :-)


 
MBo ©   (2005-04-30 16:49) [8]

>Ellipse(GetDC(pnl1.Handle),
Так нельзя. Нужно освобождать контекст ReleaseDC


 
Новичек ©   (2005-04-30 17:02) [9]

Написал так:
var
 DC_Panel: HDC;
begin
 DC_Panel := GetDC(Panel1.Handle);
 Ellipse(DC_Panel, 0, 0, 100, 80);
 ReleaseDC(Panel1.Handle, DC_Panel);

Только разницы не заметил :-(


 
Grell   (2005-04-30 17:24) [10]

Так ты сам код отрисовки елипса вызывай в OnPaint формы и все ОК будет!


 
Новичек ©   (2005-04-30 17:32) [11]


> Grell
Это я уяснил... Не понял только назначение ReleaseDC.


 
Grell ©   (2005-04-30 18:07) [12]

Как я понимаю функция ReleaseDC освобождает контекст, чтоб им могли воспользоватся другие приложения.


 
Новичек ©   (2005-04-30 18:12) [13]


>  Grell
Хм... То есть, при неосвобождении контекста прорисовка становится проблематичной?


 
Grell ©   (2005-04-30 18:38) [14]

Да нет, просто ты обязан после отрисовки освободить контекст устройства, так как он больше не нужен, а при следующей опять его получить.Тоесть схема получается такая:

1.Получаеш конеткст GetDC
2.Если надо выбираеш в контексте какойнить объект (кисть,шрифт),SelectObject()
3.Рисуеш текст,примитивы,изображения...
4.Удаляеш объекты выбраные в контексте, DeleteObject()
5.Освобождаеш контекст, ReleaseDC()


 
Новичек ©   (2005-04-30 18:42) [15]


> Grell
Ну, хорошо... А для чего освобождать? Это объект? А что будет при неосвобождении? Простите за обилие вопросов, я учусь еще...


 
Grell ©   (2005-04-30 18:51) [16]

Блин=) Не думай что будет если.Просто освобождай.Так того требует Windows!Почитай Windows SDK, если интересно, там написано:
The ReleaseDC function releases a device context (DC), freeing it for use by other applications.
......
The application must call the ReleaseDC function for each call to the GetWindowDC function and for each call to the GetDC function that retrieves a common device context.


 
Новичек ©   (2005-04-30 18:59) [17]


> Grell
Эх... Да читал я :-) Последую твоему совет. Все-таки Windows - он и в Африке Windows :-)


 
Cobalt ©   (2005-04-30 21:03) [18]

2 Новичек ©   (30.04.05 18:42) [15]
Это ресурс. Взял ресурс - освободил.
Не освободил - меньше ресурсов остаётся. после дестка тысяч неосвобождений система тебе скажет - ошибка, нет доступных ресурсов. Отрисовки не будет.



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

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

Наверх




Память: 0.48 MB
Время: 0.035 c
14-1117712175
Gero
2005-06-02 15:36
2005.06.29
Что-то форум тормозит


14-1117979160
Kolan
2005-06-05 17:46
2005.06.29
Компилятор С для Pic контроллеров


14-1117856492
Rembo
2005-06-04 07:41
2005.06.29
У кого-нибудь было такое?


3-1116339331
MEV
2005-05-17 18:15
2005.06.29
Создать базу данных runtime через ADO


6-1112208880
Urvin
2005-03-30 22:54
2005.06.29
ICQ посредством Delphi





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский