Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.10.2010, 20:50   #1
ImmortalAlexSan
Участник клуба
 
Аватар для ImmortalAlexSan
 
Регистрация: 13.01.2009
Сообщений: 1,353
По умолчанию Рисование на форме, используя её хэндл

Вот код, который нужно чуть-чуть подредактировать:
Код:
procedure TForm1.FormPaint(Sender: TObject);
Var
DC:HDC;
Pen:HPEN;
begin
DC:=GetDC(Handle);
pen:=CreatePen(PS_GEOMETRIC and PS_DASH,1,RGB(255,255,255));
SelectObject(DC,pen);
Rectangle(DC,10,10,100,100);
ReleaseDC(Handle,DC);
DeleteDC(DC);
end;
Загвоздка в том, что я не знаю, как мне закрасить нарисованный примитив цветом, который нужен мне. Разобрался только в том, как работать с карандашом. По умолчанию, он заливается белым.
"Тебе то может на меня и насрать, но твои глаза меня обожают!"
ImmortalAlexSan вне форума Ответить с цитированием
Старый 02.10.2010, 21:05   #2
ImmortalAlexSan
Участник клуба
 
Аватар для ImmortalAlexSan
 
Регистрация: 13.01.2009
Сообщений: 1,353
По умолчанию

Разобрался сам если кому интересно, как делать:
Код:
Var
DC:HDC;
Pen:HPEN;
Brush:HBRUSH;
LogBrush:tagLOGBRUSH;
begin
DC:=GetDC(Handle);
pen:=CreatePen(PS_GEOMETRIC and PS_DASH,1,RGB(255,255,255));
With LogBrush do begin
lbStyle:=BS_SOLID;
lbColor:=clBlack;
lbHatch:=HS_VERTICAL;
end;
brush:=CreateBrushIndirect(LogBrush);
SelectObject(DC,pen);
Rectangle(DC,10,10,100,100);
FillRect(DC,Rect(15,15,95,95),Brush);
ReleaseDC(Handle,DC);
DeleteDC(DC);
end;
brush:HBRUSH - описали кисть, LogBrush:tagLOGBRUSH; - переменная, которая хранит параметры кисти (её стиль, цвет и направление штриха)
Присвоили этим параметрам значения. brush:=CreateBrushIndirect(LogBrush ); - создали кисть. FillRect(DC,Rect(15,15,95,95),Brush ); - залили нарисованный прямоугольник цветом кисти=) Вот так вот это просто все.
"Тебе то может на меня и насрать, но твои глаза меня обожают!"
ImmortalAlexSan вне форума Ответить с цитированием
Старый 03.10.2010, 05:04   #3
Alexei91
Заблокирован
Форумчанин
 
Аватар для Alexei91
 
Регистрация: 30.12.2009
Сообщений: 544
По умолчанию

Код:
DC:=GetDC(Handle);
- получение общего контекста устройства.

Код:
Form1.Canvas.Rectangle(10,20,30,40);
- использование холста (просто как 1 из способов рисования на форме).
Темы для WordPress. Русские WordPress шаблоны
Alexei91 вне форума Ответить с цитированием
Старый 04.10.2010, 02:36   #4
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

Слегка дополню...
Код:
ReleaseDC(Handle,DC);
DeleteDC(DC);
Освобождать память это конечно же хорошо (на каждый вызов GetDC должно быть его освобождение), но насколько я знаю нужно только что-то одно - либо первое, либо второе...

А в справочнике вообще вот что говорят:
Цитата:
Приложение не должно удалять контекст устройства (DC), дескриптор которого был получен при помощи вызова функции GetDC. Вместо этого, оно должно вызвать функцию ReleaseDC, чтобы освободить контекст устройства (DC).
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рисование функций на форме _Studentka_ Общие вопросы .NET 2 09.04.2010 22:49
Рисование на форме. (*_*) Общие вопросы C/C++ 1 22.09.2009 13:06
Рисование на чужой форме Gr@nd Общие вопросы Delphi 2 28.05.2009 08:39
рисование на форме Kostua Помощь студентам 2 26.07.2008 16:24
Рисование на форме niva622 Помощь студентам 4 18.01.2007 09:34