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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.08.2014, 00:10   #1
kudzey
Пользователь
 
Регистрация: 14.08.2014
Сообщений: 20
По умолчанию программа редактирования тектового файла. free pascal

собственно решил я сделать редактор текстового файлаи у меня возникла одна проблема, но сначала я распишу все шаги что я делал может быть проблемы в шагах.
шаг 1. создаю форму
Код:
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes,StrUtils, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    ListBox1: TListBox;
    OpenDialog1: TOpenDialog;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Edit1KeyPress(Sender: TObject; var Key: char);
    procedure ListBox1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;
создаю форму и элементы
шаг 2. открываю файл
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if OpenDialog1.Execute then begin
   ListBox1.Items.LoadFromFile(OpenDialog1.FileName);
   end;
end;
тут я использую OpenDialog1 для поиска текстового файла, так как не хочу привязываться к определённому файлу.

шаг 3. копирую записи в edit.
Код:
procedure TForm1.ListBox1Click(Sender: TObject);
begin
  Edit1.Text := Trim(ExtractWord(1, ListBox1.Items[ListBox1.ItemIndex], [';',' ','.',',']));
  Edit2.Text := Trim(ExtractWord(2, ListBox1.Items[ListBox1.ItemIndex], [';',' ','.',',']));
  Edit3.Text := Trim(ExtractWord(3, ListBox1.Items[ListBox1.ItemIndex], [';',' ','.',',']));
  Edit4.Text := Trim(ExtractWord(4, ListBox1.Items[ListBox1.ItemIndex], [';',' ','.',',']));
  Edit5.Text := Trim(ExtractWord(5, ListBox1.Items[ListBox1.ItemIndex], [';',' ','.',',']));
end;
этот код отвечает за то чтоб файл а вернее список состаящий из фио и нескольких доп пунктов, разбивался по всем edit.
щаг 4. и вот тут возникают проблемы, правда с одним edit их нет, но мне нужно чтоб было именно 5 edit. проблемы такого рода что текст не хочет переносится из edit в listbox. т.е. я создавал кнопки с кодом.
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
   if OpenDialog1.Execute then begin
   ListBox1.Items.LoadFromFile(OpenDialog1.FileName);
   end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
    if MessageDlg('Заменить запись?',
    mtInformation,[mbOk,mbCancel],0) = mrOK
  then
  begin
    ListBox1.Items[ListBox1.ItemIndex]:= edit1.Text;
    ListBox1.Items.SaveToFile('FileName');
  end;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  if MessageDlg('Удалить запись?', mtInformation,
  [mbOk,mbCancel],0) = mrOK
  then
  begin
    ListBox1.Items.delete(ListBox1.ItemIndex);
    ListBox1.Items.SaveToFile('FileName');
  end;
end;
они не работали, и да я знаю что в этом фрагменте используется всего 1 edit. искал код для того чтоб по нажатию клавиши с клавиатуры текст редактировался, тоже не работал.
вот небольшой фрагмент того что мне надо редактировать(список)
Торочков;Сергей;Владимирович ;40;14
Аникаев;Кирилл;Алексеевич;40;15
Александров;Евгений;Викторович;40;1 1
Адоньева;Светлана;Валерьевна;40;60
Артисюк;Анатолий;Васильевич;40;11
и таких записей может быть 10 а может сколько угодно.

вообщем подитоживая, проблема с в том чтоб из edit(не из одной) вставлять отредактированный текст обратно в listbox.
буду очень и очень благодарен если кто то поможет. т.к. сам я на себе уже 3-ий день волосы рву.
kudzey вне форума Ответить с цитированием
Старый 15.08.2014, 09:32   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

вар 1. пишете свою процедуру(метод) по переносу данных из ВСЕХ edit сразу.
Код:
procedure TFormX.CopytoList;
begin
  listbox.item[x]:=format('%s;%s;%s;%s%s', [edit1.text, edit2.text, ..., edit5.text]);
end;
или
Код:
fucntion TformX.GetStr: string;
begin
  result:=format('%s;%s;%s;%s%s', [edit1.text, edit2.text, ..., edit5.text]);
end;
и везде где пожелаете (обработчики события KeyPress для ВСЕХ нужных Edit) вставляете ее вызов.

Вар 2. ВСЕМ Edit-ам участвующим в формировании строки (Edit1,... Edit5) назначаете ОДИН и тот же обработчик. (выбор из списка).
в нем пишете полное формирование строки
Код:
begin
copyToList;
// listbox.item[x]:=GetStr;
end;
Код:
begin
  listbox.item[x]:=format('%s;%s;%s;%s%s', [edit1.text, edit2.text, ..., edit5.text]);
end;
последний вариант кажется вам лучше?
Представим дальнейшее развитие программы
Теперь в формирование строки добавили ComboBox (ну хотим мы что-то выбрать из списка).
добавить в формирование еще один пункт (combobox1.text) -нет проблем.
Но как сделать "автоформирование" из ComboBox? тот же обработчик на него не повесить.
Добавить еще обработчик с таким же кодом. -нет проблем.
Но при следующем расширении (через месяц-другой) велика вероятность "забыть" про второй обработчик и получить неверно работающую программу.

другой путь развития программы (мы решили при заполнении делать проверку допустимости данных причем свою для каждого из Edit.

P.S. Если нет необходимости анализировать "нажатую" клавишу. Для активации переноса можно использовать событие OnChange
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 15.08.2014 в 09:43.
evg_m вне форума Ответить с цитированием
Старый 15.08.2014, 10:37   #3
kudzey
Пользователь
 
Регистрация: 14.08.2014
Сообщений: 20
По умолчанию

одно небольшое уточнение s это связано номер того слова которое я вывожу в edit? и х это переменная? или номер строки в листбоксе?
kudzey вне форума Ответить с цитированием
Старый 15.08.2014, 13:15   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
одно небольшое уточнение s это связано номер того слова которое я вывожу в edit?
http://www.delphibasics.ru/Format.php
Цитата:
и х это переменная? или номер строки в листбоксе?
оба раза да.
на самом деле здесь ты должен написать свое.
возможно и даже наверняка у тебя будут другие переменные а может ты обойдешься и без них.
код этот только набросок и не является законченным фрагментом рабочей программы.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 15.08.2014 в 13:21.
evg_m вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа на Free Pascal alex4824 Помощь студентам 5 21.05.2012 19:28
программа в Free Pascal 2.4.4 Dgus23 Помощь студентам 0 08.11.2011 20:40
Free Pascal. Программа создает файл, но не записывает в него нужную переменную. Slap Паскаль, Turbo Pascal, PascalABC.NET 0 23.06.2011 12:43
Чтение двумерного массива из тектового файла ToxaRUS Общие вопросы C/C++ 3 15.04.2009 18:39
Считываение строки из тектового файла на сервере. DimkinStd Общие вопросы Delphi 3 16.01.2007 12:47