Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (версии 2009, 2010 Weaver, 2011 Fulcrum)

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111

Открыть новую тему     Написать ответ в эту тему

data man



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Обсуждаем новые возможности и баги
Просьба писать только про Delphi 2009 и выше - по остальным версиям есть соответствующая тема.
Вопросы вареза здесь не обсуждаются !!!
См. также:
Известные важные баги Delphi 2010:

Описание________________________________________________ Исправлено Решение/Альтернатива_____________________
  1. Внимание !  Деинсталляция D2010 нарушает работу D2007 и D2009 !  
При деинсталляции удаляются CC3280MT.DLL и CC3290MT.DLL из Windows\System32,   необходимые для работы D2007 и D2009 соответственно.
Сделайте резервные копии
  2. Code Formatter не работает, если не инсталлирован пакет моделирования.   В нем также присутствует множество багов. Используйте с осторожностью.   1.   JEDI CodeFormat 2.44 SVN Snapshot (~750Kb)   Требуются JCL и JVCL  
2.GExperts with Formatter
  3. Не работает F1 в Object Inspector Update 2   IDEFixPack 2.9 от Andreas Hausladen
(dev. snapshots)
  4. Если IDE начинает падать с сообщением "Out of resources", возможно, что поврежден .res файл проекта. Удалить его, запустить IDE, открыть проект - новый .res файл будет создан автоматически.
  5. В редакторе не работает Class Completion, если в декларируемом классе есть поля с шаблонами. Перед декларированием поля добавить public или private и т.д.
  6. TTrayIcon.ShowBalloonHint() не работает на ОС ниже Vista [QC 77561] Update 2 * Установить Update 2   * ИЛИ почитать о причинах и решении проблемы на форуме embarcadero и в QC   * ИЛИ воспользоваться альтернативой, например Cooltray 4.4.0
  ...      


Всего записей: 1696 | Зарегистр. 13-10-2005 | Отправлено: 14:28 26-08-2009 | Исправлено: data man, 18:27 06-08-2010
ppkp

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
V1s1ter
Спасибо за Ваш пример, но это реализация. Меня же интересует секция interface, и то, как описать "список спсков". В случае с массивом все просто
type
 TData = array of array of TMyRecordOrClassData;
 
 TMyClass = class
  private
    FData: TData;
...
  public
    property Data[Ind1, Ind2: integer]: TData read GetData;  
  end;
И в GetData я получаю доступ к элементу FData[I,J].
Меня интересует случай когда, образно говоря, можно написать что-то типа
 
type
 TData = TList of TList of TMyRecordOrClassData;
А все остальное уже возможно.
 
PS В Generics.Collections есть описание TDictionary как вариант двойного списка. Но я не знаю, подойдет ли это в моем случае

Всего записей: 480 | Зарегистр. 13-04-2006 | Отправлено: 13:53 27-04-2010 | Исправлено: ppkp, 14:04 27-04-2010
Alexos



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
ppkp

 
FLists : TList<TList>; - список элементы которого тоже списки.

Всего записей: 43 | Зарегистр. 03-12-2006 | Отправлено: 14:40 27-04-2010
V1s1ter



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ppkp
Я не понимаю Ваш вопрос.
Вам нужен многомерный список элементов некоторого типа с доступом по индексам?
И список нужен для того чтобы не реализовывать каждый раз процедуры вставки, удаления, перемещения и сортировки элементов списка, реализация которых потребуется если в место списка использовать многомерные массивы?

Всего записей: 948 | Зарегистр. 06-02-2007 | Отправлено: 14:49 27-04-2010
jonikDk



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Меня же интересует секция interface, и то, как описать "список спсков".

TLilstList = class(TList)
  FList: TList
end;
 
вот и будет список списков

Всего записей: 1613 | Зарегистр. 01-03-2004 | Отправлено: 14:54 27-04-2010
V1s1ter



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ppkp
В догонку, может скажите зачем Вам нужны такие списки? Может оказатся, что они вам и не нужны, может оказатся что действительно лучше масив или чтото тира TTreeView/

Всего записей: 948 | Зарегистр. 06-02-2007 | Отправлено: 14:54 27-04-2010
Frodo_Torbins

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ppkp
Так вроде компилится:
Код:
type
  TData = class
    Field1: Integer;
  end;
  TInnerList = TList<TData>;
  TOuterList = TObjectList<TInnerList>;
var
  l: TOuterList;
begin
  l[1][1].Field1 := 2;
А если "class" заменить на "record", то нет

Всего записей: 2319 | Зарегистр. 24-05-2007 | Отправлено: 15:12 27-04-2010
ppkp

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alexos
Спасибо. Я этот вариант рассматривал, но у меня что-то не получалось с destructor Destroy.
 
а для GetData все вроде бы скомпилировалось (будет ли работать - не знаю)
function TMyProj.GetData(Ind1, Ind2: integer): TList<TList>;
begin
  Result := FDataList.Items[Ind1].Items[Ind2];
end;

Всего записей: 480 | Зарегистр. 13-04-2006 | Отправлено: 15:30 27-04-2010 | Исправлено: ppkp, 15:43 27-04-2010
tomahawk

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Не под "семеркой" сидите? Если "да", то Вас еще много ждет неожиданностей... "и"-"й" например...
Очень забавно выглядит, когда поиск в одной и той же программе запущен на двух машинах с разной операционкой.

 
мдя. невесело, прямо скажем

Всего записей: 21 | Зарегистр. 20-01-2003 | Отправлено: 15:37 27-04-2010
ppkp

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
V1s1ter
Мне нужен именно двойной массив Data[I, J], но в виде спсков. С обычным динамическим массивом работать не очень удобно. А TreeView не проходит, т.к. индексы "равноправны".
 
Frodo_Torbins

Цитата:
А если "class" заменить на "record", то нет  

Спасибо, именно поэтому и пытаюсь освоить Generics.Collections

Всего записей: 480 | Зарегистр. 13-04-2006 | Отправлено: 15:42 27-04-2010
Frodo_Torbins

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ppkp
Для рекордов тоже наверно можно сделать, если в геттере возвращать не сам рекорд а ссылку на него. Хотя, это же тогда и сеттер переделывать...

Всего записей: 2319 | Зарегистр. 24-05-2007 | Отправлено: 15:53 27-04-2010 | Исправлено: Frodo_Torbins, 15:54 27-04-2010
V1s1ter



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Frodo_Torbins
ppkp
Я окончательно потерялся ... Как у Вас такие выражения компилятся

Цитата:
TInnerList = TList<TData>;

У меня компилятор (D2007) выдает,  что вместо ">" требуется ";"

Всего записей: 948 | Зарегистр. 06-02-2007 | Отправлено: 15:57 27-04-2010
ppkp

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
V1s1ter

Цитата:
Как у Вас такие выражения компилятся  

Дык это Delphi 2010

Всего записей: 480 | Зарегистр. 13-04-2006 | Отправлено: 16:07 27-04-2010
JAPWork

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
tomahawk
 

Цитата:
мдя. невесело, прямо скажем

Эти вещи достаточно удобно проверять в простом Ёкселе...
Вводишь несколько ячеек, потом - сортируешь и любуешься.
Например в "семерке" получим из  
"И11"
"И13"
"Й12"
вот такое
"И11"
"Й12"
"И13"
...
Вот у меня в программе имя "Йоника" шороху и наделало, так как влезло между "Ионасом" и "Ириной". Софтинка была сделана на 2007 Студии.  
 
Так что - тут Ембаркадеро с Юникодом идет вторым номером...

Всего записей: 474 | Зарегистр. 12-02-2003 | Отправлено: 16:20 27-04-2010
V1s1ter



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ppkp
Тогда я пас... и тогда я наверное понял, что Вам надо не реализацию объектов, а "как проще в коде программы написать, чтоб меньше слов писать."
 

Всего записей: 948 | Зарегистр. 06-02-2007 | Отправлено: 16:39 27-04-2010
ppkp

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
jonikDk
Спасибо. В принципе, да. Но если мне нужно, чтобы MyProj: TLilstList наследовал не TList, а другой класс?

Всего записей: 480 | Зарегистр. 13-04-2006 | Отправлено: 17:08 27-04-2010
psa1974



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ppkp

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

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

Код:
FLists : TObjectList<TList>;

Тогда при удалении элемента списка FLists, являющегося объектом TList, будет автоматически вызываться деструктор этого объекта (TList).

----------
У программёра есть два состояния: "Втупляю" и "Попёрло"...

Всего записей: 438 | Зарегистр. 08-11-2005 | Отправлено: 18:09 27-04-2010 | Исправлено: psa1974, 18:15 27-04-2010
ppkp

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
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

Всего записей: 480 | Зарегистр. 13-04-2006 | Отправлено: 18:54 27-04-2010 | Исправлено: ppkp, 19:02 27-04-2010
Liaders

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Раздобыл исходники нужной мне программы написанной на Delphi 3 http://rghost.ru/download/1488230/5bb41f00bcaa09044a5eb76ced9ce0283395a258/cosmosource091.zip. Открывал ее в Delphi 2010, не получается скомпилировать. Установил Toolbar97, который он просил, но он стал жаловаться на другую ошибку. Не могли вы помочь мне привести исходники в работоспособное состояние?  
Скомпиленная программа с нужной для нее библиотекой http://rghost.ru/download/1488240/a90875bfb6ee3fd7eb6ead829cc87a476d2cf2df/cosmo091.zip

Всего записей: 15 | Зарегистр. 28-08-2009 | Отправлено: 16:18 29-04-2010
murkovich



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Liaders

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

Для начала запусти ее под не-юникодовой версией, типа Д2007 или еще более старой.

Всего записей: 1551 | Зарегистр. 26-05-2005 | Отправлено: 17:45 29-04-2010
Graach



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброго времени суток и с праздниками!
 
У меня такой вот вопрос с предысторией:
когда-то давно была написана программа на 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".
код вызова
 
В чем может быть проблема? Значения в библиотеку 100% предаются и даже вроде правильные. Скорее всего очередные улучшения делфи 2010 по сравнению с предыдущими версиями, но как их обойти?

Всего записей: 111 | Зарегистр. 20-10-2007 | Отправлено: 19:20 02-05-2010
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (версии 2009, 2010 Weaver, 2011 Fulcrum)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru