Форум: "Начинающим";
Текущий архив: 2014.09.21;
Скачать: [xml.tar.bz2];
Внизпредопределенные константы в DrawFrameControl Найти похожие ветки
← →
dis12345 © (2013-10-20 13:20) [0]Написал програмку, в ней есть чекбокс в StringGride, реализовал по широко известным примерам из инета:
procedure TFormSettings.StringGridUsersDrawCell(Sender: TObject; ACol,
ARow: Integer; Rect: TRect; State: TGridDrawState);
const
Flags: array[Boolean] of DWORD = (0, DFCS_CHECKED);
begin
with StringGridUsers, Canvas do begin
IF Acol = 4 THEN begin
IF Arow >= 1 THEN begin
InflateRect(Rect, -2, -2);
DrawFrameControl(Canvas.Handle,
Rect,
DFC_BUTTON,
DFCS_FLAT or DFCS_BUTTONCHECK or Flags[Boolean(UserYN[Arow-1] )]);
END;
END;
END
end;
У меня все работает замечательно и правильно, но при тиражировании проги на некоторых компах на этой процедуре вываливается с runtime ошибкой read at 000000000. На подопытном свежеустановленном win2003 ошибка есть, после установки всех обновлений винды исчезла, на ХР как повезет иногда пропадает, иногда нет. Грешу на параметры DFC_BUTTON, DFCS_FLAT, DFCS_BUTTONCHECK . Не знаю что это такое и где они предопределяются. Мой массив галок UserYN нормальный. Может какой package надо установить для работы? Подскажите плиз....
← →
Юрий Зотов © (2013-10-20 14:48) [1]> Грешу на параметры DFC_BUTTON, DFCS_FLAT, DFCS_BUTTONCHECK
Зря грешите. Они здесь точно ни при чем.
> Не знаю что это такое
Это всего лишь целые числа. Именованные константы. Определяют, что и как надо рисовать.
DFC_BUTTON - рисовать контрол класса Button (чекбоксы тоже относятся к этому классу).
DFCS_FLAT - рисовать в плоском стиле.
DFCS_BUTTONCHECK - рисовать чекбокс.
DFCS_CHECKED - рисовать птичку (состояние Checked).
> и где они предопределяются
Изначально - в заголовочных файлах Windows. А в Delphi - в модуле Windows.
------------------------------
> read at 000000000
Похоже на обращение к непроинициализированному указателю или к несозданному объекту (что одно и то же). Вряд ли в этом виновата система - скорее что-то не так в программе, только проявляется не всегда. Воспроизведите ошибку и на брейкпойнте проверьте значения всех указателей на nil (включая ссылки объекты).
← →
dis12345 © (2013-10-20 15:20) [2]Спасибо!
Стало чуть яснее. Значит я могу использовать эти константы без объявления.
Прочитал в win32.hlp про DrawFrameControl
BOOL DrawFrameControl(
HDC hdc, // handle to device context
LPRECT lprc, // pointer to bounding rectangle
UINT uType, // frame-control type
UINT uState // frame-control state
);
а то что в последнем параметре несколько не взаимоисключающих параметров идут через OR это нормально?
плоский чекбокс чекнутый
плоский чекбокс нечектутый
← →
Inovet © (2013-10-20 15:28) [3]> [2] dis12345 © (20.10.13 15:20)
> через OR это нормально
Ну а как их ещё объеденить? Можно +, но имхо некрасиво он так.
← →
Inovet © (2013-10-20 15:30) [4]> [2] dis12345 © (20.10.13 15:20)
> нечектутый
и не надо тогда ничего писать
← →
dis12345 © (2013-10-20 16:07) [5]Может их тогда надо объединять при помощи AND а не OR ?
← →
Юрий Зотов © (2013-10-20 16:17) [6]> dis12345 © (20.10.13 16:07) [5]
Это битовые флаги. Объединяются через OR.
← →
dis12345 © (2013-10-20 16:27) [7]Всем спасибо за помощь!
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2014.09.21;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.002 c