![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Привет Мастаки :) Нужно КРАСИВОЕ решение ??? Код прилагается. [D5, Win2k]
Альф © (2003-01-27 16:03:00)
var
Section: string;
Idents: TStringList;
Params: TStringList;
begin
Section := "Anywhere"
// Определение кол-ва Ident в Section
ReadSection (Section, Idents);
if Idents.Count >0
then begin
// В списке Idents - список ключей в секции
for i:=0 to Idents.Count-1 do begin
// Цикл по каждому
Params.CommaText := ReadString(Section, Idents.Strings[i], ".");
// В списке Params - все параметры в выбраной строчке
if Params.Count >0
then begin
// А тут разборка параметров типа Param0 := Params.Strings[0]
// Хотелось бы сюда поместить функцию - которая бы заполняла параметры типа:
MyCoolFunction();
end;{if}
end;{for}
end;{if}
end;{}
А тело функции такого вида:
procedure MyCoolFunction();
begin
// Для загрузки параметров Grid-а примерно так
with dbGrid.Columns.Add() do begin
FieldName := Idents.Strings[i];
Title.Caption := Params.Strings[0];
Width := IntToStr(Params.Strings[1]);
end;{with}
end;
А вот как внешшей функции дать знать о существовании Idents и Params ???
Альф (2003-01-27 16:55:00) [1]Спасибо ВСЕМ :)
Извините - просто не до конца объяснил проблему :(
Была функцияFillColumns(iD:integer;dbGrid:TDBGrid);
которая заполнялаdbGridпо выбраному параметруiDиз базы - теперь же потребовалось сделать заполнение параметров и из ini-файла.
А с другой стороны хотелось сделать универсальнуюпроцедуру считывания параметров из ini-файла - т.е. получалось рассогласование между тем чтоdbGridзаранее не известен и тем что параметрыMyCoolFunction();нужно фиксировать.
И как выход - наверное только ООП - больше ничего в голову не приходит :(
Альф (2003-01-27 16:47:00) [2]2Бурундук (27.01.03 16:36)
Классс - просто сумашедшая интуиция :)))
Спасибо.
Уже так и делаю :)))
Бурундук (2003-01-27 16:36:00) [3]Насколько я понимаю, у тебя данные и код связаны.
Тогда прямая дорога к ООП:
TParamParser = class
...
function ParseStr(s: string);
property Idents...
property Params...
constructor Create(ASourceStr: string);
destructor Destroy; override;
...
end;
constructor TParamParser.Create(ASourceStr: string);
begin
FIdents := TStringList.Create;
FParams := TStringList.Create;
FSource := ASourceString;
ParseStr(FSource);
//Здесь делаешь раэбор строки
end;
ParamParser := TParamParser.Create(Section);
// или объект может быть глобальным
try
MyCoolFunction(ParamParser);
finally
ParamParser.Free;
end;
Альф (2003-01-27 16:33:00) [4]2Anatoly Podgoretsky © (27.01.03 16:29)
Догадываюсь :(
Но я же не о TStringList спрашивал - а о реализации :)
Anatoly Podgoretsky (2003-01-27 16:29:00) [5]Знаешь как часто бывает это "подразумевается"
Альф (2003-01-27 16:21:00) [6]2MBo © (27.01.03 16:15)
Да есть создание стринглистов - вот они:
Idents := TStringList.Create();
Params := TStringList.Create();
просто не хотелось захламлять код тем что и так подразумевается :)
LongIsland (2003-01-27 16:18:00) [7]
> MBo © (27.01.03 16:15)
> 1) где создание STringList-ов?
> 2) почему бы не передать списки как аргументы процедуры?
+3) А почему бы не сделать их глобальными?
Альф (2003-01-27 16:17:00) [8]Блинн - а я уже думал передавать фунции параметром адрес вызвавшей процедуры - помешался на объектах наверно :(
Хотя получилось бы классно типа SummonProc.Idents :)))
MBo (2003-01-27 16:15:00) [9]1) где создание STringList-ов?
2) почему бы не передать списки как аргументы процедуры?
icWasya (2003-01-27 16:12:00) [10]procedure MyCoolFunction(Params,Idents:TStringList); //???