Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
4-1264472887
SPeller
2010-01-26 05:28
2014.09.21
Проблема с Read/WriteProcessMemory из разных модулей


15-1392303328
alexdn
2014-02-13 18:55
2014.09.21
Сделать 10 дневную версию


15-1392237003
Юрий
2014-02-13 00:30
2014.09.21
С днем рождения ! 13 февраля 2014 четверг


15-1392323403
Юрий
2014-02-14 00:30
2014.09.21
С днем рождения ! 14 февраля 2014 пятница


2-1381992380
i2e
2013-10-17 10:46
2014.09.21
не изменяется курсор





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