Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

KOLmdvXLGrid и другие компоненты


Rusya ©   (2007-05-27 17:23:00) 

Тип 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;


homm   (2007-05-27 19:51:00) [1]

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

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


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

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


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

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


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


> Дмитрий К ©   (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:35:00) [5]

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

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


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

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


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

Т.е. такая последовательность действий:
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, полный ребилд всех проектов и т.п.


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

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

 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 последним в списке, компилится теперь и без явного указания модуля (см. выше), но вылетает при выходе все равно.


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

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо