Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.10.2008, 16:22   #1
Xeon332
Скоро сессия...
Форумчанин
 
Регистрация: 03.01.2008
Сообщений: 224
Сообщение Delphi. Form1 и Form2.

Для написания телефонного справочника я воспользовался двумя формами. 1 форма - самое первое окно, стартовое окно, оно выглядит вот так:


За основу StringGrid.
2 форма служит для ввода нового контакта:


Почему 2 формы? Для меня это самый оптимальный вариант - для новичка.

Для кнопки "Новый контакт" (Button3) прописал код, который добавляет автоматически новую строку и открывает 2 форму для ввода данных.
На 2 форме, чтобы организовать ввод данных, прописываю следующее:

procedure TForm2.Button1Click(Sender: TObject);
var i:integer;
begin
i:=0;
while i<4 do
begin
Form1.StringGrid1.Cells[i,Str]:=Edit1.Text;
I:=i+1;
Form1.StringGrid1.Cells[i,Str]:=Edit2.Text;
I:=i+1;
Form1.StringGrid1.Cells[i,Str]:=Edit3.Text;
I:=i+1;
Form1.StringGrid1.Cells[i,Str]:=Edit4.Text;
I:=i+1;
Form1.StringGrid1.Cells[i,Str]:=Edit5.Text;
end;
Str:=Str+1;
close;
end;

т.е данные будет записываться в строки StringGrida.

Код для удаления работает! С этим проблемы решились.

вот проблемка с записью в файл... у меня такой код:

procedure TForm1.Button5Click(Sender: TObject);
var
a,b,c,d,e : integer;
f:textfile;
begin
//Запись в файл
AssignFile (f, 'Base.txt');
{$I-}
Append (f);
{$I+}
if IOResult<>0 then Rewrite(f);
Writeln(f, a);
Writeln(f, b);
Writeln(f, c);
Writeln(f, d);
Writeln(f, e);
//обновление данных
Edit1.Clear;
Edit2.Clear;
Edit3.Clear;
Edit4.Clear;
edit5.Clear;
end;

Код работает с ошибками. Вылетает ошибка, при нажатии на кнопку "Сохранить изменения", но файл создается и в него записывается всё только один раз, далее он не редактируется, при повторных сохранениях.

И проблемка с поиском. Впринципе я бы разобрался, но времени у меня нет нисколько. Завтра (крайний срок - послезавтра) надо будет сдавать программу на проверку. Облазил весь интернет, нигде не нашел как организовать поиск в столбцах StringGrida по 3 критериям... всё упирается во время... прошу помощи в написании кода для поиска... сам не справлюсь...

Последний раз редактировалось Xeon332; 30.10.2008 в 16:29.
Xeon332 вне форума Ответить с цитированием
Старый 30.10.2008, 17:01   #2
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Цитата:
Для кнопки "Новый контакт" (Button3) прописал код, который добавляет автоматически новую строку
Зачем? А если нажать Отмена останется пустая добавленная строка?
Цитата:
За основу StringGrid.
За основу нужно взять любую БД. Не будет проблем ни с поиском, ни с записью в файл.
_SERGEYX_ вне форума Ответить с цитированием
Старый 30.10.2008, 17:06   #3
Xeon332
Скоро сессия...
Форумчанин
 
Регистрация: 03.01.2008
Сообщений: 224
По умолчанию

Цитата:
Сообщение от _SERGEYX_ Посмотреть сообщение
Зачем? А если нажать Отмена останется пустая добавленная строка?

За основу нужно взять любую БД. Не будет проблем ни с поиском, ни с записью в файл.
StringGrid нужен. Препод сказал его использовать. Вот поэтому и использую.
Xeon332 вне форума Ответить с цитированием
Старый 31.10.2008, 08:30   #4
XPAiN
Форумчанин
 
Аватар для XPAiN
 
Регистрация: 31.10.2007
Сообщений: 108
По умолчанию

1) При нажатии на новый контакт я бы просто открывал форму, а вот "Закончить ввод" - должен добавлять в StringGrid.
2) По поводу сохранения в конце пиши Closefile(f); тогда все сохранится
3) Поиск прост. Добавляешь скажем Edit1 на форму где кнопка поиск.

For i:=1 to StringGrid1.RowCount do
if StringGrid1.Cells[i,'тут номер столбца'].value = edit1.text then
begin
break;
//Какие-то действия
end;
delphi is my world
XPAiN вне форума Ответить с цитированием
Старый 31.10.2008, 09:09   #5
фЁдОр
Форумчанин
 
Аватар для фЁдОр
 
Регистрация: 06.09.2007
Сообщений: 908
По умолчанию

у Фленова, в "библия делфи" описан телефонный справочник (книжка на форуме есть), но там дбгрид используется. скачайте, может поможет.
фЁдОр вне форума Ответить с цитированием
Старый 31.10.2008, 09:37   #6
OLEG'arh
Пользователь
 
Аватар для OLEG'arh
 
Регистрация: 23.11.2006
Сообщений: 42
Лампочка

Цитата:
На 2 форме, чтобы организовать ввод данных, прописываю следующее:

procedure TForm2.Button1Click(Sender: TObject);
var i:integer;
begin
i:=0;
while i<4 do
begin
Form1.StringGrid1.Cells[i,Str]:=Edit1.Text;
I:=i+1;
Form1.StringGrid1.Cells[i,Str]:=Edit2.Text;
I:=i+1;
Form1.StringGrid1.Cells[i,Str]:=Edit3.Text;
I:=i+1;
Form1.StringGrid1.Cells[i,Str]:=Edit4.Text;
I:=i+1;
Form1.StringGrid1.Cells[i,Str]:=Edit5.Text;
end;
Str:=Str+1;
close;
end;

зачем цикл если он не выполняется??

procedure TForm2.Button1Click(Sender: TObject);
var i:integer;
begin
Form1.StringGrid1.Cells[0,Str]:=Edit1.Text;
Form1.StringGrid1.Cells[1,Str]:=Edit2.Text;
Form1.StringGrid1.Cells[2,Str]:=Edit3.Text;
Form1.StringGrid1.Cells[3,Str]:=Edit4.Text;
Form1.StringGrid1.Cells[4,Str]:=Edit5.Text;
Str:=Str+1;
close;
end;
OLEG'arh вне форума Ответить с цитированием
Старый 31.10.2008, 10:05   #7
Nester
Форумчанин
 
Аватар для Nester
 
Регистрация: 22.10.2008
Сообщений: 103
Подмигивание

вот когда то писал
пример текстовой базы данных
но только на чтение (так как справочник)
в базе оставил только 1000 записей для компактности
а так было 89827
записи в файле не имеют фиксированной длины как в DBF
и разделителем являеся #13#10
зато выигрываем в размере базы по сравнению с DBF
может кому сгодится
Вложения
Тип файла: rar BAZA.rar (226.0 Кб, 40 просмотров)
Никто не знает больше чем не знаю я
Nester вне форума Ответить с цитированием
Старый 31.10.2008, 17:45   #8
Xeon332
Скоро сессия...
Форумчанин
 
Регистрация: 03.01.2008
Сообщений: 224
По умолчанию

благодарю за помощь. подкорректировал немного. имитация приближённая к справочнику уже есть!

при создании кода для поиска возникли вопросы...
вот код (по идее должен искать по 1 столбцу, т.е. по фамилии):

procedure TForm3.Button1Click(Sender: TObject);
var
I: Integer;
GRect: TGridRect;
begin
for I := 1 to Str-1 do
if Edit1.Text=Form1.StringGrid1.Cells[0,i] then
begin
GRect.Left:=0;
GRect.Top:=i;
GRect.Right:=1;
GRect.Bottom=i;
Form1.StringGrid1.Selection:=GRect;
Form1.StringGrid1.LeftCol:=0;
Form1.StringGrid1.TopRow:=i;
end;
close;
end;


Не принимает TGridRect, пишет как неопозннный тип. уже все способы инициализирования перепробовал - не помогает... подчеркнута TGridRect, а соответственно Left, Top, Right, Bottom. Подскажите в чём может быть причина?

ЗЫ: запись в файл даже с closefile(f) не работает как надо... файл создаётся, но данные в него не вносятся...

Последний раз редактировалось Xeon332; 31.10.2008 в 17:48.
Xeon332 вне форума Ответить с цитированием
Старый 01.11.2008, 15:52   #9
Xeon332
Скоро сессия...
Форумчанин
 
Регистрация: 03.01.2008
Сообщений: 224
По умолчанию

Вот код для поиска "по телефону":

procedure TForm3.Button1Click(Sender: TObject);
var
I: Integer;
GRect: TGridRect;
begin
for I := 1 to Str-1 do
if Edit1.Text=Form1.StringGrid1.Cells[0,i] then
begin
GRect.Left:=0;
GRect.Top:=i;
GRect.Right:=1;
GRect.Bottom=i;
Form1.StringGrid1.Selection:=GRect;
Form1.StringGrid1.LeftCol:=0;
Form1.StringGrid1.TopRow:=i;
end;
close;
end;


не работают строки GRect: TGridRect; не определяется TGridRect!!!! Почему не пойму никак.. подскажите плиз!
Xeon332 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
form1 и form2 SLIMMUS Общие вопросы Delphi 3 29.10.2008 01:15
Нужно чтобы Form2 открывался по середине Form1 diznt Помощь студентам 1 31.08.2008 03:37
then Form2.Show; beegl Общие вопросы Delphi 24 24.07.2008 09:53
две формы Form1 и Form2 Михаил Юрьевич Общие вопросы Delphi 11 02.03.2008 19:38
Form1.Hide и Form1.Show... Roof Общие вопросы Delphi 9 13.10.2007 13:33