Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "KOL";
Текущий архив: 2007.06.24;
Скачать: [xml.tar.bz2];

Вниз

Циклом читать и писать настройки из/в файл   Найти похожие ветки 

 
КВАНТ   (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 вся ветка

Форум: "KOL";
Текущий архив: 2007.06.24;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.039 c
1-1177338712
webpauk
2007-04-23 18:31
2007.06.24
Проблема с положением объектов в ScrollBoxe


11-1163272588
kolusr
2006-11-11 22:16
2007.06.24
KOLSocket свойство Сount


15-1180502196
worldmen
2007-05-30 09:16
2007.06.24
Не устанавливаеться Delphi 5


2-1180972683
Bora_ru
2007-06-04 19:58
2007.06.24
Список функций и процедур в DLL


15-1180462678
TStas
2007-05-29 22:17
2007.06.24
Нужен скрипт пересылки на php





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский