Проблема с Toutline

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Проблема с Toutline

Сообщение eugene_wb » 02.04.2008 01:59:18

Нужно сделать компонент Outline для Lazarus/a
мучаюсь уже два дня так ничего и не вышло
прочитал _http://freepascal.ru/article//lazarus/20050530152619/
и все равно ничего.

может хоть кто нибудь сможет помочь, или хоть обьянить как ето сделать

вот сам исходник на делфи
http://rapidshare.com/files/104147297/Outline.pas.html
eugene_wb
незнакомец
 
Сообщения: 6
Зарегистрирован: 02.04.2008 01:39:36

Сообщение Attid » 02.04.2008 08:35:26

:shock: дожили текстовые файлы на рапиду. =)

я бы на pastebin.ru отправил =) только там хранится не больше суток
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2583
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Сообщение eugene_wb » 02.04.2008 10:51:40

с коментами все хорощо, а вот хотелось бы помощи
eugene_wb
незнакомец
 
Сообщения: 6
Зарегистрирован: 02.04.2008 01:39:36

Сообщение Attid » 02.04.2008 11:56:45

какой помощи ?
сделайте мне компонент, а я напишу програму и будет у меня все хорошо ?


что ты делаешь ? как ? что не выходит ?под лазарус портировано сотни компонент, а у вас ничего не выходит . . .
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2583
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Сообщение Attid » 02.04.2008 12:01:26

да и
Код: Выделить всё
{  Copyright (c) 1995-2001 Borland Software Corporation }


ты его имешь право использовать только если у тебя есть лицензия на дельфю.
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2583
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Сообщение v-t-l » 02.04.2008 17:24:22

Никогда не пользовался TOutline, но, как я понял, это что-то вроде дерева. Если так, то лучше использовать VirtualTreeview
v-t-l
энтузиаст
 
Сообщения: 704
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Сообщение eugene_wb » 02.04.2008 18:53:34

v-t-l писал(а):это что-то вроде дерева


подобие дерева, только вместо Node используюся строки, их намного проще обрабатывать.

Натолкните на мысль как его портировать, хоть пару строк
eugene_wb
незнакомец
 
Сообщения: 6
Зарегистрирован: 02.04.2008 01:39:36

Сообщение Attid » 03.04.2008 00:14:33

компонент умеешь в рантайме создовать ?
создаешь приложение
в юзез добавляешь свой юнит
по кнопке по клику создаешь свой TOutline

нажимаешь Ф9 и правишь все на что ругается.

ЗЫ если под венду портируешь то обычно все просто, если под линукс, то советую сначало под вендой это сделать, а потом под линем.

когда в рантайме будет создоваться компонент приходи раскажем дальше.
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2583
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Сообщение eugene_wb » 03.04.2008 01:44:06

сделал все как было написано выше и ничего не помогло. Ругается на типы и указатели, ето поправить у меня уже знаний не хватает.

вопрос №2

возможно ли из под делфи запихнуть етот компонент (или прцедуру создания компонента на форме) в DLL и потом в Lazarus/e как то его от туда выдрать

P.S> портирую прогу для работы с exel на WinCE
eugene_wb
незнакомец
 
Сообщения: 6
Зарегистрирован: 02.04.2008 01:39:36

Сообщение alexs » 03.04.2008 01:54:03

Будет больше гемороя по сравнению с переписыванием под лазарь.
Приведи примеры ошибок - подскажем как решить.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 3879
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Сообщение eugene_wb » 03.04.2008 02:03:13

Код: Выделить всё
  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"

и т.д. и т.п
eugene_wb
незнакомец
 
Сообщения: 6
Зарегистрирован: 02.04.2008 01:39:36

Сообщение alexs » 03.04.2008 02:17:24

1. Сообщения в Lazarus обычно начинаются с LM_
Хотя CM_FONTCHANGED остался без изменений - модуль lmessages.pp
вобще - подобные ошибки (не найден идентификатор) решаются простым поиском в тексте исходников. В лазаре (из-за его кросплатформенности) некоторые модули называются по другому, не так как в дельфине.

2. fpc более строг к синтаксису паскаля по умолчанию - либо включи в исходнике режим совместимости с дельфи, либо переименую переменную в функциях с Text на что либо другое - например aText.

3. Также строгая проверка синтаксиса - приведи явно Self к Pointer
Код: Выделить всё
  LastNode := Parent.List.Last = Pointer(Self);


4. Посмотри - как объявлен DefineProperty в лазаре и соответсвующим образом перепиши код.

P.S.
Смотри исходники лазаря и его компонент - очень помогает.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 3879
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Сообщение eugene_wb » 03.04.2008 22:33:03

alexs писал(а): fpc более строг к синтаксису паскаля по умолчанию - либо включи в исходнике режим совместимости с дельфи


как ето сделать?
eugene_wb
незнакомец
 
Сообщения: 6
Зарегистрирован: 02.04.2008 01:39:36

Сообщение alexs » 03.04.2008 23:17:27

директива компилятора - {$mode delphi}
ключ компилятора -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 - там это всё очень толково расписано.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 3879
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Проблема с Toutline

Сообщение DedFrend » 10.11.2019 23:25:50

Решил продолжить старую тему, поскольку в моем недавнем посте ATImageBox , когда речь шла об ошибках компиляции большая их часть была как раз Dublicate identifier.

Для примера вот простенький код о сути проблемы
Код: Выделить всё
  { 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 секунды:
Тьфу, нечаянно отправилось, продолжаю
Нужны ОЧЕНЬ веские причины для таких нововведений - ведь они затрагивают ранее написанный код! Есть какие-либо обсуждения этой проблемы?
DedFrend
новенький
 
Сообщения: 48
Зарегистрирован: 25.11.2018 12:21:50

След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11

Рейтинг@Mail.ru