Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по Delphi (версии 2009, 2010 Weaver, 2011 Fulcrum)

Автор: ppkp
Дата сообщения: 27.04.2010 16:08
jonikDk
Спасибо. В принципе, да. Но если мне нужно, чтобы MyProj: TLilstList наследовал не TList, а другой класс?
Автор: psa1974
Дата сообщения: 27.04.2010 17:09
ppkp

Цитата:
Спасибо. Я этот вариант рассматривал, но у меня что-то не получалось с destructor Destroy.

Для списка объектов лучше использовать TObjectList:

Код: FLists : TObjectList<TList>;
Автор: ppkp
Дата сообщения: 27.04.2010 17:54
psa1974
Спасибо. Я переписал

TEmProj = class(TObject)
private
FDataList: TList<TList<TData>>;
..............
end;

destructor TEmProj.Destroy;
var
I: integer;
begin
for I:=Count-1 downto 0 do FDataList[I].Free;
FreeAndNil(FDataList);
inherited Destroy;
end;

И все пошло.

ЗЫ. Не все, очевидно. Еще пытаюсь то ли
procedure AddData(AData: TList<TData>);
то ли
procedure AddData(AData: TData);
написать. И в деструкторе, очевидно, не удаляются TData
Автор: Liaders
Дата сообщения: 29.04.2010 15:18
Раздобыл исходники нужной мне программы написанной на Delphi 3 http://rghost.ru/download/1488230/5bb41f00bcaa09044a5eb76ced9ce0283395a258/cosmosource091.zip. Открывал ее в Delphi 2010, не получается скомпилировать. Установил Toolbar97, который он просил, но он стал жаловаться на другую ошибку. Не могли вы помочь мне привести исходники в работоспособное состояние?
Скомпиленная программа с нужной для нее библиотекой http://rghost.ru/download/1488240/a90875bfb6ee3fd7eb6ead829cc87a476d2cf2df/cosmo091.zip
Автор: murkovich
Дата сообщения: 29.04.2010 16:45
Liaders

Цитата:
Открывал ее в Delphi 2010, не получается скомпилировать.

Для начала запусти ее под не-юникодовой версией, типа Д2007 или еще более старой.
Автор: Graach
Дата сообщения: 02.05.2010 18:20
Доброго времени суток и с праздниками!

У меня такой вот вопрос с предысторией:
когда-то давно была написана программа на Delphi 5 (ехе-шник и библиотеки к нему), все работает, везде связи между библиотеками и приложением отличная, все передается правильно, до сих пор вносим косметические изменения и добавляем библиотеки и без проблем.

Но вот решили, что надо бы уже переходить с Delphi 5 на что-то более современное, а то скоро к нему и компонентов не останется. И решили переписать все это чудо (по крайней мере приложение и пару основных библиотек) на 2010. Естественно появились проблемы. Вопрос с передачей строк (string) между библиотеками и приложением можно сказать решен тем, что и то и другое переписано, скомпилено и сбилдено на Д2010.

Но кроме библиотек из которых просто вызываются функции, есть еще и библиотеки которые показывают формы, которые должны быть MDIChild и тут начались проблемы. Переменные Application и Screen в библиотеках подменяются переменными основного приложения, в делфи 5 все то же самое работает отлично, а в делфи 2010 сначала выскакивала ошибка "cannot assign a TFont to TFont", но как оказалось это скорее всего приколы дев. Удалила вообще все компоненты с формы и ошибка естественно перестала появляться, т.е. Create формы отрабатывает. Но после этого я присваиваю свойству формы FormStyle значение fsMDIChild и вываливается ошибка "Cannot create form. No MDI forms are currently active".
[more=код вызова]
Screen:=FScr;
Application:=FApp;
Application.CreateForm(TfmForms, fmForms);
form:=fmForms;
if (form <> nil) then
begin
form.FormStyle :=FFormStyle; //fsmdichild
form.Show;
end
else
MessageDlg('Форма не создана!', mtError, [mbOK], 0);
[/more]

В чем может быть проблема? Значения в библиотеку 100% предаются и даже вроде правильные. Скорее всего очередные улучшения делфи 2010 по сравнению с предыдущими версиями, но как их обойти?
Автор: Frodo_Torbins
Дата сообщения: 02.05.2010 19:22
Graach
Возможно и не в улучшениях дело. Скорее всего в D5 и библиотеки и приложение компилировались с рантайм-пакетами, а при переносе соответствующая настройка потерялась. "Project -> Options... -> Packages -> Build with runtime packages" - должно стоять во всех проектах.
Автор: Graach
Дата сообщения: 02.05.2010 22:16
Frodo_Torbins
Нет, не стоит галочка на Build with runtime packages.
Я ее пробовала поставить на проектах в 2010 делфи, но начинают выделываться DevExpress'ы.
Автор: Frodo_Torbins
Дата сообщения: 02.05.2010 22:40
Graach
Не должны они выделываться. По крайней мере после того, как вы во всех проектах поставите эту галку и сделаете Build. Какую хоть ошибку выдают?
Автор: Graach
Дата сообщения: 02.05.2010 22:51
Frodo_Torbins
С девами началось все с того, что после установки (сборка Feandy v49) при попытке билда проекта выпадала ошибка: файл ххх.dcu был скомпилирован с другой версией чего-то там. Пришлось прописывать пути к исходникам и вручную переставлять некоторые компоненты.

Соответственно при билде проекта с включенной опцией выпадает сообщение, что используется ниразу не скомпилированный файл cxEditorsD14.dpk и так далее.

А какая ошибка в делфи 5 выпадает я уже не помню. Там что-то на тему не найден ран-тайм пакет, хотя я их автоматически добавляла.
Автор: Frodo_Torbins
Дата сообщения: 02.05.2010 23:53
Graach
Попробуйте полностью снести девы, почистите все их хвосты, а потом поставьте заново.
Автор: Graach
Дата сообщения: 03.05.2010 13:10
Frodo_Torbins
Пробовала и не раз. ...

А вообще, в 5 версии без ран-тайм пакетов все работает
Автор: Frodo_Torbins
Дата сообщения: 03.05.2010 18:52
Graach
Может у вас еще какие сторонние компоненты DevExpress используют? Тогда их тоже перекомпилировать надо.
Автор: Graach
Дата сообщения: 08.05.2010 15:17
У меня поставлены только девы и одак и все.
Подключила ран-тайм пакеты - 0 реакции. Ссылка на Application передается правильная, но даже если вывести не форму а простенький showmessage, то выпадает ошибка: Project *.exe raised exception class EConvertError with message 'Cannot assign a TFont to a TFont'.
Автор: Frodo_Torbins
Дата сообщения: 08.05.2010 17:22
Graach

Цитата:
Cannot assign a TFont to a TFont

Что то там у вас не то с пакетами. Давайте еще раз:
- и exe и dll должны компилироваться в одной версии делфи;
- в опциях проектов и exe и dll должны быть включены рантайм пакеты.
Автор: Graach
Дата сообщения: 08.05.2010 17:45
Frodo_Torbins
Да, и приложение и библиотека компилируются в одной и той же версии Делфи (2010) на одной и той же машине. В обоих случаях стоит галка на включении ран-тайм пакетов, даже набор пакетов один и тот же в одинаковой последовательности.

В интернете сегодня надыбала, что кроме передачи ссылки на Application и Screen надо бы еще передавать ControlAtom:TAtom, но при этом вылезает сообщение, что класс TForm был скомпилирован с другой версией TControl.TWinControl и т.п. Такое ощущение, что я еще чего-то не предаю
Автор: Frodo_Torbins
Дата сообщения: 08.05.2010 19:04
Graach
Вообще, когда включены пакеты, ничего передавать не надо. Объект Application (и прочие) будет общим для всего приложения, и к нему можно будет свободно обращаться как из exe так и из dll. Собственно вы можете сделать такую проверку на своем проекте. Или посмотрите секции импорта, там должно быть полно упоминаний *.bpl.
Еще можете сделать небольшую демку, и выложить ее куда-нибудь.
Автор: Ludens
Дата сообщения: 13.05.2010 22:08
C некоторых пор стал наблюдать странное явление: Delphi 2010 во всех своих директориях создает пустой файл с именем "С".



Никто не сталкивался?
Автор: ppkp
Дата сообщения: 14.05.2010 13:29
Ludens
У меня такого не наблюдается. Какая версия и кряк?
Автор: mdid
Дата сообщения: 14.05.2010 14:18
есть ли возможность узнать количество строк в проекте в самом компиляторе?
ПС
в сторону написание программы для подсчета строк в pas фалах не посылать
Автор: ppkp
Дата сообщения: 14.05.2010 14:38
mdid
Может быть через Assert ?
Автор: mdid
Дата сообщения: 14.05.2010 14:44
ppkp
каким образом?
Автор: Ludens
Дата сообщения: 14.05.2010 14:51
ppkp


Цитата:
Ludens
У меня такого не наблюдается. Какая версия и кряк?


Embarcadero® Delphi® 2010 Version 14.0.3593.25826 (Update 4/5)
Delphi Distiller v1.85
Автор: ppkp
Дата сообщения: 14.05.2010 15:00
mdid
В SysUtils есть
procedure AssertErrorHandler(const Message, Filename: string; LineNumber: Integer; ErrorAddr: Pointer);
Как-то он получает LineNumber???


Добавлено:
Ludens
Не знаю тогда. Может вирус?

Добавлено:
mdid
В System.pas определено
procedure __assert_fail; cdecl; external libc name '__assert_fail';
procedure _Assert(const Message, Filename: String; LineNumber: Integer);
....
В Си есть макрос __LINE__ Как его получить в Delphi - не знаю.

Добавлено:
mdid
Попробуйте вставить Assert с False, чобы выпал Exception, и он должен расписать и имя файла и номер строки. Как-то он это делает? Поставьте breakpoint перед вызовом Assert и посмотрите в окне cpu как он оформлен.
Автор: mdid
Дата сообщения: 14.05.2010 15:37
ppkp
вы наверно не поняли что я хочу...я спрашивал есть ли стандартное средство для определения количества строк в проекте...а извращаться через Assert это глупо и долго...проще написать прогу подсчета строк в файле
Автор: psa1974
Дата сообщения: 14.05.2010 18:46
mdid

Можно юзать CnPack IDE Wizards. У него есть мастер статистики:

Цитата:
Мастер выводит статистику кода Delphi/C++Builder. Статистика может быть получена для конкретного модуля, проекта, группы проектов, а также всех открытых файлов или файлов в выбранной директории. Статистика включает размер и кол-во строк (кода, пустых, комментариев) выбранного объекта и другие величины. Результат может быть экспортирован в TXT или CSV файл.
Автор: Frodo_Torbins
Дата сообщения: 14.05.2010 18:59
Ludens
Я недавно систему переустанавливал, и кажется у меня такое было даже когда делфи еще не стояла. У вас случайно True Launch Bar или Microsoft Security Essentials не установлены?
Автор: mdid
Дата сообщения: 14.05.2010 20:02
psa1974
пасиб....но я уже свое написал
Автор: Ludens
Дата сообщения: 15.05.2010 00:27
ppkp

Цитата:
Ludens
Не знаю тогда. Может вирус?

А зачем тогда спрашивал про версию и кряк?


Добавлено:
Frodo_Torbins
я нашел причину. Это последняя версия CnWizards
Автор: psa1974
Дата сообщения: 15.05.2010 11:17
Ludens

Цитата:
я нашел причину. Это последняя версия CnWizards

Я использую CnWizards 0.9.6.569. Delphi® 2010 Version 14.0.3593.25826 (Update 4/5) Залом с использованием лоадера.
У меня такого нет.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172

Предыдущая тема: Установка копоненты ZipTV


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.