Текущий архив: 2007.06.24;
Скачать: CL | DM;
Вниз
Циклом читать и писать настройки из/в файл Найти похожие ветки
← →
КВАНТ (2006-11-16 05:25) [0]Здрасьте!
Изложу вопрос кратко:
Имеется форма, имеются энное количество всяких лейблов, едитов, чек-боксов, радио-боксов и т.д.
Вопрос: как мне ЦИКЛОМ (желательно, потому что объектов много) записать/прочитать значения (например, у лейблов - caption, у чеков и радио - checked и т.д.) в/из файла? Как то химичил, пробовал, но, видимо, не допёр мозгом своим... Практики и знаний маловато =)
Спасибо!
ЗЫ Очень нужно! И, если не трудно, снабдите код комментами!
Спасибо в квадрате.
← →
avs © (2006-11-16 09:11) [1]Если Вы не пользуете Тэги для других целей - можно соорудить таблицу из
2-х столбцов: 1- ТЭг 2- разновидность контрола (лейбл,чек и т.д.).
Далее что-то типа
var
p:pcontrol;
i,j,k:integer;
.....
j:=Form.ChildCount-1;
For i:=0 to j do
begin
p:=Form.Children[i];
if p.hasChildren then
begin
Здесь задача сводится к предыдущей
...
end else
begin
k:=p.tag
Далее анализ с помощью таблицы,
запись или чтение из файла.
end;
...
end;
Остальное см. в Книге работа с ini - файлами или можно еще использовать Pstrlist в режиме именованного списка.
s:=ls.values[имя]
s-строка, ls - Pstrlist
Я пользовал это в vcl с именами - получается монстр, который еще и хорошо тормозит. Подумайте хорошенько, а так ли уж это Вам необходимо.
С уважением, А.Шаталов
← →
MTsv DN © (2006-11-16 09:48) [2]2 avs ©
<OFFTOP>Не обижайся, красиво конечно...но это изврат ;)
Все делается рекурсией, быстрее и проще... Кстати, я уже здесь задавал этот, только так и не смог его найти на форуме... Интересно, сколько здесь темы хранят, прежде чем скинуть в архив?</OFFTOP>
Если я правильно понял, надо отсканировать ВСЕ компоненты на форме, независимо от их Parent"а...
Вот код...переделанный поиск по диску (прям из учебника "содрал"):
Файл SearchControls.pasunit SearchControls;
interface
uses KOL, windows;
type
PSearchAction = procedure (Sender : PControl);
procedure _SearchControls(Sender : PControl; SearchAction : PSearchAction);
implementation
procedure _SearchControls(Sender : PControl; SearchAction : PSearchAction);
var
i : integer;
begin
for i := 0 to Sender.ChildCount-1 do
begin
if Sender.Children[i] <> nil then
begin
if (Sender.Children[i].SubClassName = YOUR_SEARCH_FILTER) // Фильтр не обязательно должен быть SubClassName
then
begin
SearchAction(Sender.Children[i]);
if Sender.Children[i].ChildCount <> 0 then
_SearchControls(Sender.Children[i], SearchAction);
end;
end;
end;
end;
end.
Использование:uses SearchControls;
procedure YOUR_PROCESS(Sender : PControl);
begin
Sender.Color := clGray;
end;
procedure TForm1.KOLForm1FormCreate(Sender: PObj);
begin
_SearchControls(Form1.Form, YOUR_PROCESS);
end;
В строке:if (Sender.Children[i].SubClassName = YOUR_SEARCH_FILTER) then
, YOUR_SEARCH_FILTER - это obj_BUTTON и т.д. Если вместо этой строки написать:if pos("obj_", Sender.Children[i].SubClassName) = 1 then
, то отсканируются все компоненты...
В функции YOUR_PROCESS, Ваш обработчик...
← →
MTsv DN © (2006-11-16 09:49) [3]> Кстати, я уже здесь задавал этот ВОПРОС, только так и не смог его
> найти на форуме...
Слово пропустил ;)
← →
Galkov © (2006-11-16 11:50) [4]А настройки невизуальных объектов сохранять/восстанавливать, видимо - не судьба :(
← →
Barloggg (2006-11-16 16:51) [5]ну, можно перекрыть функции создания компонетов, как я это сделал подключив Grush к своему большому и готовому проекту без инсталляции.
Сделать так перед NewForm вписать это
function NewLabel(сюда скопировать весь синтаксис):
begin
а тут этот лабел запомнить в массиве или запомнить прямую ссылку на него
result:=Kol.NewLabel(передать все параметры дальше);
end;
таким образом во время запуска можно все компоненты подобными вставками пометить. на каждый тип компонента - одна вставка.
надеюсь понятно объяснил :(
← →
КВАНТ (2006-11-17 06:43) [6]2 MTsv DN ©
Нужно не всех компонент на форме, а всех компонент на панели (Panel) НО естественно не считая всяких там компонент, сделанных для красоты (Label всякий, GroupBox...)
← →
MTsv DN © (2006-11-17 15:57) [7]> Нужно не всех компонент на форме, а всех компонент на панели
> (Panel) НО естественно не считая всяких там компонент, сделанных
> для красоты (Label всякий, GroupBox...)
Ну, так в чем же проблема-то???
Только на Panel, так вызывайте не_SearchControls(Form1.Form, YOUR_PROCESS);
, в_SearchControls(Panel, YOUR_PROCESS);
И фильтр настроить:
SubClassName:
у Label, LabelEffect, Panel, Splitter -> obj_STATIC
у Button, BitBtn, GroupBox, Check, Radio -> obj_BUTTON
Страницы: 1 вся ветка
Текущий архив: 2007.06.24;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.033 c