Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 23.08.2008, 13:50
Beast Beast вне форума
Прохожий
 
Регистрация: 23.08.2008
Сообщения: 47
Репутация: 10
По умолчанию Помогите с ComboBox'ами

Помогите пожалуйста, ищу в интернете, не могу ничего подходящего найти(((
Необходимо в программе выбирать ФАМИЛИИ из списков, но эти списки должны быть разными, а храниться в одном месте, то есть:
1. В окне несколько ComboBox, необходимо для каждого загрузить разные списки, но из одного файла.
2. В процессе выполнения программы можно увеличить или уменьшить список любого ComboBox и эти списки нужно сохранить снова в этот же файл, то есть переписать его.
3. При запуске программы необходимо чтобы в поля ComboBox загружалась информация, которая оставалась при закрытии программы.
На ум ничего не приходит(((

Последний раз редактировалось Beast, 23.08.2008 в 18:10.
Ответить с цитированием
  #2  
Старый 23.08.2008, 19:00
Drozh Drozh вне форума
Активный
 
Регистрация: 12.06.2008
Сообщения: 313
Репутация: 40
По умолчанию

Ну здесь много способов...
1) Можно создать переменную типа TSrtings, туда методом LoadFromFile() записать твой файл а деле расскидывать по твоим ComboBox'ам
Можно читать построчно файл и записывать напрямую в Боксы
(ну это нужно глядеть на файл)

2)
ComboBox1.Items.Add() - добавить в конец
ComboBox1.Items.Insert(); - добавить в любое место
ComboBox1.Items.Delete(); - удалить

Сохраняешь аналогично закрытию, либо в переменню либо построчно

3) Чтобы вывести при загрузке то, что было правлено, перед закрытием сохраняешь в ini файл или реестр индексы ComboBox'ов которые выведены на экран, а при загрузке читать их и мененять после загрузки файла в ComboBox'ы
Ответить с цитированием
  #3  
Старый 23.08.2008, 19:13
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

1) использовать TIniFile
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #4  
Старый 23.08.2008, 19:22
Beast Beast вне форума
Прохожий
 
Регистрация: 23.08.2008
Сообщения: 47
Репутация: 10
По умолчанию

У меня трудности возникли, как же провести запись в файл из всех ComboBox, объясню на примере, почему:
ComboBox1 может состоять max из 20 строк;
ComboBox2 может состоять max из 15 строк;
ComboBox3 может состоять max из 25 строк;
При первом запуске программы пользователь занес в списки 5, 3, 7 записей соответственно и это сохранится в файл после завершения.
Как мне при следующем запуске занести в ComboBox1=5, ComboBox2=3, ComboBox3=7 записей? Как эти записи разделить в файле? Или есть какое нибудь другое решение?
Ответить с цитированием
  #5  
Старый 23.08.2008, 19:35
Beast Beast вне форума
Прохожий
 
Регистрация: 23.08.2008
Сообщения: 47
Репутация: 10
По умолчанию

А при добавлении записей в файл, как мне понять куда его дописывать или тут проще переписать полностью файл?

А по п.3 я так понял надо будит еще один файл создавать, где будут хранится все индексы, по которым вся картинка будит восстановлена.
Ответить с цитированием
  #6  
Старый 23.08.2008, 20:25
Beast Beast вне форума
Прохожий
 
Регистрация: 23.08.2008
Сообщения: 47
Репутация: 10
По умолчанию

Столкнулся с такой проблемой - как мне добавить в ComboBox текст, если ComboBox находится в одном окне, а форма для набора текста в другом окне? При этом ComboBox'ов несколько, а окно для набора текста однотипное.

Как запомнить позицию фокуса на ComboBox, нажать кнопку для перехода в окно набора текста (Модальное окно), а после нажатия кнопки добавить в нужный ComboBox??? Помагите плиз.
Ответить с цитированием
  #7  
Старый 23.08.2008, 22:17
Drozh Drozh вне форума
Активный
 
Регистрация: 12.06.2008
Сообщения: 313
Репутация: 40
По умолчанию

Чтобы хранить записи можно использовать ini файл а построить так:
[ComboBox1]
Records = 5 // число записей в первый Бокс
Name1 = 'Иванов'
Name2 = 'Петров'
...
[ComboBox2]
Records = 1
Name1 = 'Сидоров'
[ComboBox3]
Records = 2
Name1 = 'Иванова'
Name2 = 'Петрова'

У тебя их мало, так что это позволительно

При добавленнии файл переписываю полностью, уже придется не как Ini а как обычный... Хотя если ini файл создать сразу с заготовками неймов для каждого бокса то можно использовать и ini

Самый простой способ добавления в боксы просто создать три кнопки в первый, во втрой и третий
Ответить с цитированием
  #8  
Старый 23.08.2008, 22:30
Beast Beast вне форума
Прохожий
 
Регистрация: 23.08.2008
Сообщения: 47
Репутация: 10
По умолчанию

Спасибо за идею, надо будит попробовать с файлом таким образом попробовать - ограничение [СomboBox1] и т.д. Типо ищу [СomboBox1] и в его список занашу все до [СomboBox2].


А вот по добавлению не пойдет, у меня все окно в этих ComboBox'ах итак будит, поэтому добавлять в них информацию проще из одного окна, где будит три Edit'а (Фамилия, Имя, Отчество) и две кнопки ДОБАВИТЬ и ОТМЕНА. Вот тока пока не могу догнать как при нажатии кнопки добавить текст попал именно в то поле ComboBox'а.
Ответить с цитированием
  #9  
Старый 23.08.2008, 22:57
Drozh Drozh вне форума
Активный
 
Регистрация: 12.06.2008
Сообщения: 313
Репутация: 40
По умолчанию

Не не!!! Читаешь файл как ini!!!
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
 Ini: TIniFile;
 Count, i: Integer;
begin
 Ini := TIniFile.Create('C:\1.txt');
 Count := Ini.ReadInteger('[ComboBox1]', 'Records', 0);
  for i := 1 to Count do
   ComboBox1.Items.Add(Ini.ReadString('[ComboBox1]', 'Name'+IntToStr(i), ''));

 Count := Ini.ReadInteger('[ComboBox2]', 'Records', 0);
  for i := 1 to Count do
   ComboBox2.Items.Add(Ini.ReadString('[ComboBox2]', 'Name'+IntToStr(i), ''));

 Count := Ini.ReadInteger('[ComboBox3]', 'Records', 0);
  for i := 1 to Count do
   ComboBox3.Items.Add(Ini.ReadString('[ComboBox3]', 'Name'+IntToStr(i), ''));

 Ini.Free;
end;

А записываешь так
Код:
procedure TForm1.Button2Click(Sender: TObject);
var
 AFile: TextFile;
 Count, i: Integer;
begin
 AssignFile(AFile, 'C:\1.txt');
 Rewrite(AFile);

 WriteLn(AFile, '[ComboBox1]');
 Count := ComboBox1.Items.Count;
 WriteLn(AFile, Format('Records = %d', [Count]));
  for i := 1 to Count do
   WriteLn(AFile, Format('Name%d = %s', [i, ComboBox1.Items.Strings[i-1]]));

 WriteLn(AFile, '[ComboBox2]');
 Count := ComboBox2.Items.Count;
 WriteLn(AFile, Format('Records = %d', [Count]));
  for i := 1 to Count do
   WriteLn(AFile, Format('Name%d = %s', [i, ComboBox2.Items.Strings[i-1]]));

 WriteLn(AFile, '[ComboBox3]');
 Count := ComboBox3.Items.Count;
 WriteLn(AFile, Format('Records = %d', [Count]));
  for i := 1 to Count do
   WriteLn(AFile, Format('Name%d = %s', [i, ComboBox3.Items.Strings[i-1]]));

 CloseFile(AFile);
end;

А выбор можешь сделать RadioButton'ами
Ответить с цитированием
  #10  
Старый 23.08.2008, 23:14
Beast Beast вне форума
Прохожий
 
Регистрация: 23.08.2008
Сообщения: 47
Репутация: 10
По умолчанию

На строке:
var
Ini: TIniFile;

выдает ошибку:
Undeclared identifier: 'TIniFile'
Ответить с цитированием
  #11  
Старый 23.08.2008, 23:16
Drozh Drozh вне форума
Активный
 
Регистрация: 12.06.2008
Сообщения: 313
Репутация: 40
По умолчанию

Код:
uses
  IniFiles;
Ответить с цитированием
  #12  
Старый 23.08.2008, 23:37
Beast Beast вне форума
Прохожий
 
Регистрация: 23.08.2008
Сообщения: 47
Репутация: 10
По умолчанию

Сохраняет в файл идеально, но читать нивкакую не хочет. ComboBox'ы все пустые
Ответить с цитированием
  #13  
Старый 23.08.2008, 23:48
Drozh Drozh вне форума
Активный
 
Регистрация: 12.06.2008
Сообщения: 313
Репутация: 40
По умолчанию

Оу реально не заметил))) препиши так
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
 Ini: TIniFile;
 Count, i: Integer;
begin
 Ini := TIniFile.Create('C:\1.txt');

 ComboBox1.Items.Clear;
 ComboBox2.Items.Clear;
 ComboBox3.Items.Clear;

 Count := Ini.ReadInteger('ComboBox1', 'Records', 0);
  for i := 1 to Count do
   ComboBox1.Items.Add(Ini.ReadString('ComboBox1', 'Name'+IntToStr(i), ''));

 Count := Ini.ReadInteger('ComboBox2', 'Records', 0);
  for i := 1 to Count do
   ComboBox2.Items.Add(Ini.ReadString('ComboBox2', 'Name'+IntToStr(i), ''));

 Count := Ini.ReadInteger('ComboBox3', 'Records', 0);
  for i := 1 to Count do
   ComboBox3.Items.Add(Ini.ReadString('ComboBox3', 'Name'+IntToStr(i), ''));

 Ini.Free;
end;
Ответить с цитированием
  #14  
Старый 24.08.2008, 00:01
Beast Beast вне форума
Прохожий
 
Регистрация: 23.08.2008
Сообщения: 47
Репутация: 10
По умолчанию

Все равно ничего не получается, теперь список тока стирается, но чтения из файла все равно не происходит
Ответить с цитированием
  #15  
Старый 24.08.2008, 00:12
Drozh Drozh вне форума
Активный
 
Регистрация: 12.06.2008
Сообщения: 313
Репутация: 40
По умолчанию

Проверь правильность созданного файла, у меня все работает)
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 02:34.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter