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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.05.2012, 01:35   #1
Don Karleone
Форумчанин
 
Регистрация: 05.04.2010
Сообщений: 410
По умолчанию Не работает GDI функция Rectangl()

есть глобальная переменная:
Код:
var
  GET_DC: HDC;
и обработчики:
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
  GET_DC:=Form1.Canvas.Handle;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Rectangle(GET_DC, 0, 0, 50, 50);
end;
но при нажатии кнопки ничего на форме не прорисовывается. ???
ICQ: 593-013-807
Don Karleone вне форума Ответить с цитированием
Старый 06.05.2012, 06:16   #2
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
  GET_DC := GetDc(Handle);
end;
или без переменной GET_DC
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Rectangle(Canvas.Handle, 0, 0, 50, 50);
end;

Последний раз редактировалось Прик; 06.05.2012 в 08:46.
Прик вне форума Ответить с цитированием
Старый 06.05.2012, 09:12   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

дело в том что форма перерисовывается по новой, и в итоге ваш прямоугольник стирается.
есть событие OnPaint.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 06.05.2012, 14:11   #4
Don Karleone
Форумчанин
 
Регистрация: 05.04.2010
Сообщений: 410
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
дело в том что форма перерисовывается по новой, и в итоге ваш прямоугольник стирается.
есть событие OnPaint.
прописываю Rectangle(GET_DC, 0, 0, 50, 50) в обработчике OnPaint формы. Все равно ничего не происходит.
Почему Rectangle(Canvas.Handle, 0, 0, 50, 50) работает а через переменную GET_DC нет?
ICQ: 593-013-807
Don Karleone вне форума Ответить с цитированием
Старый 06.05.2012, 14:28   #5
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

Почему-то в разный момент времени, Canvas.Handle содержит разное значение. Поэтому и не работает код.
А чем вас не устаивает
Код:
Rectangle(Canvas.Handle, 0, 0, 50, 50);
?
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.

Последний раз редактировалось chertovich; 06.05.2012 в 14:32.
chertovich вне форума Ответить с цитированием
Старый 06.05.2012, 14:41   #6
Don Karleone
Форумчанин
 
Регистрация: 05.04.2010
Сообщений: 410
По умолчанию

Цитата:
Сообщение от chertovich Посмотреть сообщение
Почему-то в разный момент времени, Canvas.Handle содержит разное значение. Поэтому и не работает код.
А чем вас не устаивает
Код:
Rectangle(Canvas.Handle, 0, 0, 50, 50);
?
просто хочется понять, почему так происходит. Видимо надо покопатья в недрах класса TCanvas и, наверное, TForm тоже.
ICQ: 593-013-807
Don Karleone вне форума Ответить с цитированием
Старый 06.05.2012, 14:44   #7
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

Цитата:
Сообщение от Don Karleone Посмотреть сообщение
просто хочется понять, почему так происходит. Видимо надо покопатья в недрах класса TCanvas и, наверное, TForm тоже.
Очень здравая мысль, с неё и надо было начинать. Кстати, дружите еще и с отладчиком, часто помогает, по крайней мере морально
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.
chertovich вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работает функция max400 PHP 13 29.07.2011 10:28
Не работает функция kakawkin Общие вопросы Delphi 3 28.05.2011 15:09
Не работает функция artem611 Паскаль, Turbo Pascal, PascalABC.NET 3 11.04.2011 10:10
не работает функция Benderbej JavaScript, Ajax 2 30.08.2010 18:54
Не работает функция gets()!!! Ilya'91 Общие вопросы C/C++ 1 28.07.2008 23:16