Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.12.09;
Скачать: CL | DM;

Вниз

KOLmdvXLGrid и другие компоненты   Найти похожие ветки 

 
Rusya   (2007-05-27 17:23) [0]

Тип TDrawState, объявленный в KOLmdvXLGrid.pas, конфликтует с одноименным типом из KOL.pas. Все бы ничего, но некоторые компоненты отказываются работать совместно с mdvXLGrid из-за того, что они также используют тип TDrawState, но из KOL.pas. Например, KOLecmListEdit. Т.е. у меня например не удается заставить работать ecmListEdit и mdvXLGrid в одном проекте. Как обойти?

p.s. явное указание типа также не помогает:
function List1DrawCell(Sender: PObj; DC: HDC; const Rect: TRect; ACol, ARow: Integer; DrawAction: TDrawAction; ItemState: KOL.TDrawState): Boolean; - программа компилится, но при выходе рушится с исключением в function TControl.CallDefWndProc(var Msg: TMsg): Integer;


 
Vladimir Kladov   (2007-05-27 17:36) [1]

Это уже эпидемия. Ладно бы, новички все были. Еще раз: простая процедура <> методу. => (Sender... -> (Dummy, Sender...


 
Rusya   (2007-05-27 17:56) [2]

Да нет, с этим все нормально :) я просто забыл указать.
т.е. процедура объявлена как надо.

 TForm1 = class(TForm)
.....
function ListDrawCell(Sender: PObj; DC: HDC; const Rect: TRect; ACol, ARow: Integer; DrawAction: TDrawAction; ItemState: TDrawState): Boolean;
....
end;

....
function TForm1.List1DrawCell(Sender: PObj; DC: HDC; const Rect: TRect;
 ACol, ARow: Integer; DrawAction: TDrawAction;
 ItemState: TDrawState): Boolean;
begin
//
end;

Проблема в том, что в проекте используется mdvXLGrid, в котором объявлен TDrawState. И компилятор ругается, что типы несоответствуют: объявленный в подключенном модуле KOLmdvXLGrid.pas и используемый EcmListEdit из KOL.pas.

Пробовал менять модули в списке uses местами, сделал модуль KOL последним в списке, компилится теперь и без явного указания модуля (см. выше), но вылетает при выходе все равно.


 
Rusya   (2007-05-27 18:07) [3]

Т.е. такая последовательность действий:
1) пустой МСК-проект. Кидаем на форму ecmListEdit и mdvXLGrid.
2) назначаем обработчик OnDrawCell для ecmListEdit, получается такой обработчик:
function TForm1.EcmListEdit1DrawCell(Sender: PObj; DC: HDC;
 const Rect: TRect; ACol, ARow: Integer; DrawAction: TDrawAction;
 ItemState: TDrawState): Boolean;
begin
//
end;

3) Пытаемся скомпилиовать проект.

Получаем ошибки:
[Error] Unit1_1.inc(35): Incompatible types: "KOLEcmListEdit.TDrawState" and "Unit1.TDrawState"
[Fatal Error] KOLProject.dpr(6): Could not compile used unit "Unit1.pas"

Изменение порядка модулей не приводит ни к чему, или же все компилируется, но падает при выходе из программы. KOL v2.62, полный ребилд всех проектов и т.п.


 
Дмитрий К ©   (2007-05-27 18:34) [4]

Как вариант решения:
function EcmListEdit1DrawCell(Sender: PObj; DC: HDC; const Rect: TRect;
     ACol, ARow: Integer; DrawAction: TDrawAction;
     ItemState: KOL.TDrawState): Boolean;


 
Vladimir Kladov   (2007-05-27 18:35) [5]

Так в чем сложность с объявлением KOL.TDrawState? В том, что обработчик события автоматически создан? Так перенесите его пониже в объявлении типа формы, пусть Delphi больше его не мейнтейнирует, типа руками дальше. Еще можно свой тип сделать.

Самый крайний случай - поправьте TDrawState прямо в том модуле, который с KOL конфликтует, исходники же есть.


 
Rusya   (2007-05-27 18:38) [6]


> Дмитрий К ©   (27.05.07 18:34) [4]
> Как вариант решения:function EcmListEdit1DrawCell(Sender:
>  PObj; DC: HDC; const Rect: TRect;      ACol, ARow: Integer;
>  DrawAction: TDrawAction;      ItemState: KOL.TDrawState):
>  Boolean;

Я ж говорю, пробовал так (смотрите первый пост), но программа почему-то при выходе генерирует исключение. Правильнее всего, конечно, изменить в модуле mdvXLGrid имя типа, чтоб не конфликтовало :(


 
Vladimir Kladov   (2007-05-27 18:41) [7]

У меня к сожалению нет обоих этих компоненотов, я ими никогда не пользовался, так что смотрите сами, что там вылетает. Не могу представить, чтобы из-за этого типа, он скорее всего по размеру такой же (1 байт).


 
Rusya   (2007-05-27 18:46) [8]

Всем спасибо, после повторного ребилда, в котором ребилдил пакеты в другом порядке, все встало и заработало.


 
homm ©   (2007-05-27 19:51) [9]

> Всем спасибо, после повторного ребилда, в котором ребилдил
> пакеты в другом порядке, все встало и заработало.

Всем! Всем! Всем! Не мучайтесь с порядком ребилдов! Заведите себе один пакет, пихайте в него все модули от других пакетов, которые испльзуете, и НЕ ПАРЬТЕСЬ БОЛЬШЕ! РЕБИЛТЬЕ ОДИН РАЗ! :)



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

Текущий архив: 2007.12.09;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.026 c
2-1195027023
F@T@L_Err0r
2007-11-14 10:57
2007.12.09
Запуск программы


11-1180370896
Rusya
2007-05-28 20:48
2007.12.09
Help: Обработчик OnDrawCell


15-1194521402
R()$T
2007-11-08 14:30
2007.12.09
Помогите


15-1194560860
Умка
2007-11-09 01:27
2007.12.09
Помогите!


2-1194979500
Б. Гейтс
2007-11-13 21:45
2007.12.09
Над контролом ли мышь? (API only)