Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Delphi


Информационный Канал Subscribe.Ru

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Delphi

Выпуск № 169
от 02.07.2005, 00:50

Администратор:Калашников О.А.
В номере:Вопросов: 2, Ответов: 10


Вопрос № 22678: Подскажите пожалуйста, не понимаю, что я делаю неверно - при работе с TSrings выдается AbstractError!! либо когда использую Add. Либо пробовал Ini.readSection. Их надо еще как-то инициализировать? ...
Вопрос № 22682: Привет, народ! здесь бытующий! Вопрос тут наболел - пробую сделать окно с CreateWinow (Ex) чтобы по его элементам можно было по Табу перемещаться: ноль эффекта - что ws_tabstop что tab_wsgroup. Как мне это реализовать?...

Вопрос № 22.678
Подскажите пожалуйста, не понимаю, что я делаю неверно - при работе с TSrings выдается AbstractError!!
либо когда использую Add. Либо пробовал Ini.readSection. Их надо еще как-то инициализировать?

Приложение:

Отправлен: 26.06.2005, 13:23
Вопрос задал: Болотов Сергей (статус: Посетитель)
Всего ответов отправлено: 8

Отвечает: Bochvarov NikB
Здравствуйте, Болотов Сергей!
Сделай TStringList (и прочитай Help)
Ответ отправил: Bochvarov NikB (статус: 4-ый класс)
Отправлен: 26.06.2005, 13:37
Оценка за ответ: 5
Комментарий оценки:
Спасибо, не знал...

Отвечает: X
Здравствуйте, Болотов Сергей!
У TString есть обстрактные методы(должны быть перекрыты в потомках).Используй TStringList.
Ответ отправил: X (статус: 7-ой класс)
Отправлен: 26.06.2005, 13:38
Оценка за ответ: 5
Комментарий оценки:
Спасибо

Отвечает: Ерёмин Андрей
Здравствуйте, Болотов Сергей!
Когда создаёте класс TStrings, то нужно создавать не его, а TStringList, т.е.:
Sections:=TStringList.Create;
Т.е. тип переменной именно TStrings, а создаётся именно TStringList.
---------
Жизнь - игра, в которой нет setup'а...
Ответ отправил: Ерёмин Андрей (статус: Студент)
Отправлен: 26.06.2005, 13:38
Оценка за ответ: 5

Отвечает: Denisss
Здравствуйте, Болотов Сергей!
Все дело в том, что TStrings является, как бы "прародителем" некоторых классов. Т.е., например, является родителем для TStringList, который Вам бы и следовало ипользовать в Вашем примере.
Класс TStrings содержит только абстрактные методы. Т.е. такие методы, которые имеют только описание и не имеют программной реализации. Класс TStringList содержит описание тех же методов, что и TStrings, но имеет и их реализацию.
При этом, если Вы создаете свой собственный класс на основе TStrings или TStringList, то в итоге сможете аналогично их использовать.
Зачем это нужно?! Затем, чтобы можно было в программе использовать набор различных классов, имеющих одинаковые (по названию и содержанию, но не по реализации) методы.
Например:
можно использовать везде в процедурах абстрактные классы TStream, а там далее самостоятельно выбирать: TMemoryStream, TFileStream, TResourceStream, TCompressionStream или любые, в том числе и собственные классы.
Ответ отправил: Denisss (статус: 8-ой класс)
Отправлен: 26.06.2005, 14:16

Отвечает: Володимир
Здравствуйте, Болотов Сергей!
1. Ini:=TIniFile.Create(name); => Ini:=TIniFile.Create(form1);
2. \\\'mb.ini\\\' - что это??? (другие иакже).
Create указывает власника создаваемого объекта.
Второе, к сожалению я совсем не понимаю, может я не знаю, а может нужно сделать иначе.
С уважением.
Ответ отправил: Володимир (статус: 1-ый класс)
Отправлен: 26.06.2005, 14:56

Отвечает: Jadd
Здравствуйте, Болотов Сергей!
Все правильно на тебя ругаются. TStrings - абстрактный класс. Он не может иметь реализаций и нельзя создавать объекты его типа. Читай основы ООП. Для того, чтобы пользоваться списком строк, нужно использовать классы, производные от TStrings. Например, TStringList. Т.е. код в местах с TStrings должен быть таким:
procedure ReadMBList;
var Ini:TIniFile;
Sections,Section:TStringList;
i,last:integer;
tmp,name:string;
begin
name:=extractfilepath(Paramstr(0))+\\\'mb.ini\\\';
Ini:=TIniFile.Create(name);

Sections:=TStringList.Create;
Section:=TStringList.Create;
i:=1;
Repeat
tmp:=\\\'Item\\\'+IntToStr(i);
tmp:=ini.ReadString(\\\'Motherboards\\\',tmp,\\\'\\\');
If tmp<>\\\'\\\' then Sections.Add(tmp);
inc(i);
Until tmp=\\\'\\\' ;
---------
Если в сердце дверь закрыта, нужно в печень постучаться
Ответ отправил: Jadd (статус: Студент)
Отправлен: 26.06.2005, 18:02

Отвечает: sir henry
Здравствуйте, Болотов Сергей!
А Вы зря используете TStrings - это абстрактный класс и используется как предок для подобных классов. Используйте вместо него реальный класс TStringList. Он будет нормально работать.
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 27.06.2005, 06:39

Отвечает: VBA
Здравствуйте, Болотов Сергей!

TStrings это абстрактный класс!!! Его нельзя напрямую использовать.
Используй класс TStringList, который является наследником TStrings.
---------
Неправ вечно юзер, ибо прав всегда Админ!
Ответ отправил: VBA (статус: 5-ый класс)
Отправлен: 28.06.2005, 02:01


Вопрос № 22.682
Привет, народ! здесь бытующий! Вопрос тут наболел - пробую сделать окно с CreateWinow (Ex) чтобы по его элементам можно было по Табу перемещаться: ноль эффекта - что ws_tabstop что tab_wsgroup. Как мне это реализовать?

Приложение:

Отправлен: 26.06.2005, 14:39
Вопрос задал: Анисимов Дмитрий Алексеевич (статус: Посетитель)
Всего ответов отправлено: 2

Отвечает: Jadd
Здравствуйте, Анисимов Дмитрий Алексеевич!
Ох. Для каждого (!!!!!) окна определяется функция, которая ловит сообщения окна. Но мы не будем совсем все писать на WinApi. Просто пишем функцию-член того класса, в котором ты создаешь окно. Функция будет ловить сообщение WM_KEYUP. Делается это вот так:

procedure MyClass.KeyUp(Msg: TMessage); message WM_KEYUP;

а в ней проверяешь:

if Msg.wParam = VK_TAB then
Perform(WM_NEXTDLGCTL, 0, 0)

Можно переопределелить функцию OnKeyUp. Там вторым параметром идет клавиша и в теле функции проверяем на то же условие.

Можно делать и через оконную процедуру WNDPROC, но это сложнее. При описании окна в структуре WNDCLASS передаешь адрес этой функции, а в теле функции в блоке case проверяешь на приход в окно сообщения WM_KEYUP и в нем уже и параметр wParam на нажатую клавишу и постишь сообщение через PostMessage или SendMessage, что почти одно и тоже, за маленьким исключением. PostMessage - асинхронная (т.е. не ждет ответа системы), а SendMessage - синхронная (она ждет обработки сообщения). Удачи.
---------
Если в сердце дверь закрыта, нужно в печень постучаться
Ответ отправил: Jadd (статус: Студент)
Отправлен: 26.06.2005, 19:55
Оценка за ответ: 4
Комментарий оценки:
Вообщем, смысл ясен, хотя, по мне, было бы проще сказать, что ws_tapstop работает только в диалоговых окнах, так что в любом случае в окне, созданном с CreateWindow(/Ex) эта фишка не прошла бы, если только VK_Tab вручную не ловить..

Отвечает: sir henry
Здравствуйте, Анисимов Дмитрий Алексеевич!
WS_TABSTOP используется только в диалоговых окнах.
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 27.06.2005, 06:50
Оценка за ответ: 5


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2005, RusFAQ.ru, Россия, Москва. Все права защищены.
Идея, дизайн, программирование, авторское право: Калашников О.А.

Яндекс


Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.delphiplus
Отписаться
Вспомнить пароль

В избранное