Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.pas
unit 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.49 MB
Время: 0.067 c
8-1160066944
Tab
2006-10-05 20:49
2007.06.24
Рисование на Image с использованием GDI+


15-1180100113
oldman
2007-05-25 17:35
2007.06.24
Кстати, сегодня День Освобождения Африки....


2-1180935838
ыавпып
2007-06-04 09:43
2007.06.24
файлы в сетевой папке


2-1179403094
kubatura
2007-05-17 15:58
2007.06.24
игнорирование регистра в запросе


9-1154277356
zoomer
2006-07-30 20:35
2007.06.24
Движок для гонок