Проблема с Toutline
Модератор: Модераторы
Проблема с Toutline
Нужно сделать компонент Outline для Lazarus/a
мучаюсь уже два дня так ничего и не вышло
прочитал _http://freepascal.ru/article//lazarus/20050530152619/
и все равно ничего.
может хоть кто нибудь сможет помочь, или хоть обьянить как ето сделать
вот сам исходник на делфи
http://rapidshare.com/files/104147297/Outline.pas.html
мучаюсь уже два дня так ничего и не вышло
прочитал _http://freepascal.ru/article//lazarus/20050530152619/
и все равно ничего.
может хоть кто нибудь сможет помочь, или хоть обьянить как ето сделать
вот сам исходник на делфи
http://rapidshare.com/files/104147297/Outline.pas.html
- Attid
- долгожитель
- Сообщения: 2589
- Зарегистрирован: 27.10.2006 17:29:15
- Откуда: 44°32′23.63″N 41°2′25.2″E
- Контактная информация:
да и
ты его имешь право использовать только если у тебя есть лицензия на дельфю.
Код: Выделить всё
{ Copyright (c) 1995-2001 Borland Software Corporation }ты его имешь право использовать только если у тебя есть лицензия на дельфю.
- Attid
- долгожитель
- Сообщения: 2589
- Зарегистрирован: 27.10.2006 17:29:15
- Откуда: 44°32′23.63″N 41°2′25.2″E
- Контактная информация:
компонент умеешь в рантайме создовать ?
создаешь приложение
в юзез добавляешь свой юнит
по кнопке по клику создаешь свой TOutline
нажимаешь Ф9 и правишь все на что ругается.
ЗЫ если под венду портируешь то обычно все просто, если под линукс, то советую сначало под вендой это сделать, а потом под линем.
когда в рантайме будет создоваться компонент приходи раскажем дальше.
создаешь приложение
в юзез добавляешь свой юнит
по кнопке по клику создаешь свой TOutline
нажимаешь Ф9 и правишь все на что ругается.
ЗЫ если под венду портируешь то обычно все просто, если под линукс, то советую сначало под вендой это сделать, а потом под линем.
когда в рантайме будет создоваться компонент приходи раскажем дальше.
сделал все как было написано выше и ничего не помогло. Ругается на типы и указатели, ето поправить у меня уже знаний не хватает.
вопрос №2
возможно ли из под делфи запихнуть етот компонент (или прцедуру создания компонента на форме) в DLL и потом в Lazarus/e как то его от туда выдрать
P.S> портирую прогу для работы с exel на WinCE
вопрос №2
возможно ли из под делфи запихнуть етот компонент (или прцедуру создания компонента на форме) в DLL и потом в Lazarus/e как то его от туда выдрать
P.S> портирую прогу для работы с exel на WinCE
Код: Выделить всё
procedure CMFontChanged(var Message: TMessage); message CM_FONTCHANGED;ошибка - outline.pas(216,75) Error: Identifier not found "CM_FONTCHANGED"
Код: Выделить всё
function Add(Index: LongInt; const Text: string): LongInt;
function AddChild(Index: LongInt; const Text: string): LongInt;
function AddChildObject(Index: LongInt; const Text: string; const Data: Pointer): LongInt;
function AddObject(Index: LongInt; const Text: string; const Data: Pointer): LongInt;
function Insert(Index: LongInt; const Text: string): LongInt;
function InsertObject(Index: LongInt; const Text: string; const Data: Pointer): LongInt; ошибки - outline.pas(283,40) Error: Duplicate identifier "Text"
outline.pas(283,40) Hint: Identifier already defined in unit CONTROLS at line 1117
outline.pas(284,45) Error: Duplicate identifier "Text"
outline.pas(284,45) Hint: Identifier already defined in unit CONTROLS at line 1117
outline.pas(285,51) Error: Duplicate identifier "Text"
outline.pas(285,51) Hint: Identifier already defined in unit CONTROLS at line 1117
outline.pas(286,46) Error: Duplicate identifier "Text"
outline.pas(286,46) Hint: Identifier already defined in unit CONTROLS at line 1117
outline.pas(287,43) Error: Duplicate identifier "Text"
outline.pas(287,43) Hint: Identifier already defined in unit CONTROLS at line 1117
outline.pas(288,49) Error: Duplicate identifier "Text"
outline.pas(288,49) Hint: Identifier already defined in unit CONTROLS at line 1117
outline.pas(366,1) Fatal: There were 6 errors compiling module, stopping
пробовал менять на Text1,Text2... от етого проблем становится только больше
Код: Выделить всё
LastNode := Parent.List.Last = Self;ошибка - outline.pas(446,25) Error: Incompatible types: got "Pointer" expected "TOutlineNode"
Код: Выделить всё
Filer.DefineProperty('Nodes', ReadData, WriteData, WriteNodes);ошибка - outline.pas(1108,41) Error: Wrong number of parameters specified for call to "ReadData"
и т.д. и т.п
- alexs
- долгожитель
- Сообщения: 4069
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
1. Сообщения в Lazarus обычно начинаются с LM_
Хотя CM_FONTCHANGED остался без изменений - модуль lmessages.pp
вобще - подобные ошибки (не найден идентификатор) решаются простым поиском в тексте исходников. В лазаре (из-за его кросплатформенности) некоторые модули называются по другому, не так как в дельфине.
2. fpc более строг к синтаксису паскаля по умолчанию - либо включи в исходнике режим совместимости с дельфи, либо переименую переменную в функциях с Text на что либо другое - например aText.
3. Также строгая проверка синтаксиса - приведи явно Self к Pointer
4. Посмотри - как объявлен DefineProperty в лазаре и соответсвующим образом перепиши код.
P.S.
Смотри исходники лазаря и его компонент - очень помогает.
Хотя CM_FONTCHANGED остался без изменений - модуль lmessages.pp
вобще - подобные ошибки (не найден идентификатор) решаются простым поиском в тексте исходников. В лазаре (из-за его кросплатформенности) некоторые модули называются по другому, не так как в дельфине.
2. fpc более строг к синтаксису паскаля по умолчанию - либо включи в исходнике режим совместимости с дельфи, либо переименую переменную в функциях с Text на что либо другое - например aText.
3. Также строгая проверка синтаксиса - приведи явно Self к Pointer
Код: Выделить всё
LastNode := Parent.List.Last = Pointer(Self);4. Посмотри - как объявлен DefineProperty в лазаре и соответсвующим образом перепиши код.
P.S.
Смотри исходники лазаря и его компонент - очень помогает.
- alexs
- долгожитель
- Сообщения: 4069
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
директива компилятора - {$mode delphi}
ключ компилятора -M:
PS
Посмотри документацию, которая идёт в состве fpc - там это всё очень толково расписано.
ключ компилятора -M:
Код: Выделить всё
-M<x> Set language mode to <x>
-Mfpc Free Pascal dialect (default)
-Mobjfpc FPC mode with Object Pascal support
-Mdelphi Delphi 7 compatibility mode
-Mtp TP/BP 7.0 compatibility mode
-Mmacpas Macintosh Pascal dialects compatibility mode
PS
Посмотри документацию, которая идёт в состве fpc - там это всё очень толково расписано.
Решил продолжить старую тему, поскольку в моем недавнем посте ATImageBox , когда речь шла об ошибках компиляции большая их часть была как раз Dublicate identifier.
Для примера вот простенький код о сути проблемы
На строке
Function F(A: integer):integer;
получаем Dublicate identifier, потому что в контексте описания функции кроме параметра А есть свойство А.
Ошибка имеет место только в режиме objfpc .
Откровенно говоря, хотелось бы знать, а чем обоснованы такие правила? Для меня, как давнего дельфийца, это совершенно дико: нередко так делается специально, чтобы изменить смысл и заэкранировать прежнее объявление. А такое нововведение во многих проектах просто запретит использование режима objfpc. Такие вещи должны быть написаны "прямо на коробке", а я узнаю через два года использования Лазаря.
Нужны ОЧЕНЬ веские причины для таких нововведений - ведь они затрагивают ранее написанный код! Есть какие-либо обсуждения такой
Добавлено спустя 2 минуты 54 секунды:
Тьфу, нечаянно отправилось, продолжаю
Нужны ОЧЕНЬ веские причины для таких нововведений - ведь они затрагивают ранее написанный код! Есть какие-либо обсуждения этой проблемы?
Для примера вот простенький код о сути проблемы
Код: Выделить всё
{ TClassA }
TClassA=class
private
fA: integer;
procedure SetA(AValue: integer);
public
property A: integer read fA write SetA;
end;
{ TClassB }
TClassB = class(TClassA)
public
function F(A: integer):integer;
end;
На строке
Function F(A: integer):integer;
получаем Dublicate identifier, потому что в контексте описания функции кроме параметра А есть свойство А.
Ошибка имеет место только в режиме objfpc .
Откровенно говоря, хотелось бы знать, а чем обоснованы такие правила? Для меня, как давнего дельфийца, это совершенно дико: нередко так делается специально, чтобы изменить смысл и заэкранировать прежнее объявление. А такое нововведение во многих проектах просто запретит использование режима objfpc. Такие вещи должны быть написаны "прямо на коробке", а я узнаю через два года использования Лазаря.
Нужны ОЧЕНЬ веские причины для таких нововведений - ведь они затрагивают ранее написанный код! Есть какие-либо обсуждения такой
Добавлено спустя 2 минуты 54 секунды:
Тьфу, нечаянно отправилось, продолжаю
Нужны ОЧЕНЬ веские причины для таких нововведений - ведь они затрагивают ранее написанный код! Есть какие-либо обсуждения этой проблемы?
