Вопрос № 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 (статус: 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. Делается это вот так:
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