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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.08.2014, 21:11   #1
kudzey
Пользователь
 
Регистрация: 14.08.2014
Сообщений: 20
По умолчанию копирование из edit в listbox в free pascal

вопрос следующий у меня есть программа, она должна редактировать текст,
при этом я использую длы вывода на монитор listbox, как скопировать строку в edit я знаю. а вот как вернёть отредактированную строку назад понять немогу. тоесть мне надо чтоб строка копировалась не по нажатию на кнопку в форме а сразу после редактирования или же по нажатию кнопки на клавеатуре.
вод код моей программы.
Код:
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;
    ListBox1: TListBox;
    OpenDialog1: TOpenDialog;
    procedure Button1Click(Sender: TObject);
    procedure Edit1Change(Sender: TObject);
    procedure ListBox1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
begin
  if OpenDialog1.Execute then begin
   ListBox1.Items.LoadFromFile(OpenDialog1.FileName);
   end;
end;

procedure TForm1.Edit1Change(Sender: TObject);
begin

end;
procedure TForm1.ListBox1Click(Sender: TObject);
begin
  Edit1.Text := Trim(ExtractWord(1, ListBox1.Items[ListBox1.ItemIndex], [';',' ','.',',']));
end;

end.
буду очень благодарен за помощь.
kudzey вне форума Ответить с цитированием
Старый 14.08.2014, 21:43   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Пример обработки клавиши Энтер в эдите:
Код:
unit Unit1;

{$mode objfpc}{$H+}

interface

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

type

  { TForm1 }

  TForm1 = class(TForm)
    Edit1: TEdit;
    ListBox1: TListBox;
    procedure Edit1KeyPress(Sender: TObject; var Key: char);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: char);
begin
  if key=#13 then ListBox1.AddItem(TEdit(Sender).Text,nil);
  TEdit(Sender).Text:='';
end;

end.
Пояснения нужны?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.08.2014, 21:43   #3
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

Код:
ListBox1.Items.Strings[номер строки]:=edit1.Text;
Проще некуда.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 14.08.2014, 22:07   #4
kudzey
Пользователь
 
Регистрация: 14.08.2014
Сообщений: 20
По умолчанию

вставил ваш код, в мою программу, не работает.
Код:
TEdit(Sender).Text:='';
что эта строчка делает?
kudzey вне форума Ответить с цитированием
Старый 14.08.2014, 22:10   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
что эта строчка делает?
Очишает эдит после ввода энтера. Я там в коде оплошность допустил:
Код:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: char);
begin
  if key=#13 then begin
   ListBox1.AddItem(TEdit(Sender).Text,nil);
   TEdit(Sender).Text:='';
 end;
end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.08.2014, 22:25   #6
kudzey
Пользователь
 
Регистрация: 14.08.2014
Сообщений: 20
По умолчанию

всё равно не работает в моей программе. тоесть, оно срабатывает, но место того чтоб заменять нужный фрагмент текста, оно просто выделяет текст в edit.

так это вы присвоили строку из listbox в edit. а мне наобород надо.

Последний раз редактировалось Stilet; 14.08.2014 в 23:53.
kudzey вне форума Ответить с цитированием
Старый 14.08.2014, 23:53   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
тоесть, оно срабатывает, но место того чтоб заменять нужный фрагмент текста, оно просто выделяет текст в edit.
Цитата:
так это вы присвоили строку из listbox в edit. а мне наобород надо.
Ты где такое углядел? В примере Саши? Тогда ты ошибаешься.
Я его дополню:
Код:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: char);
begin
with ListBox1 do
  if (key=#13)and(ItemIndex<>-1) then begin
   Items[ItemIndex]:=TEdit(Sender).Text;   
 end;
end;
Заменит тебе по нажатию в Эдите энтера текст в выделенном элементе листбокса.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.08.2014, 01:18   #8
kudzey
Пользователь
 
Регистрация: 14.08.2014
Сообщений: 20
По умолчанию

вообщем всё ещё не работает. я создал обсолютно новую форму и попробовал записать этот код.
Код:
unit Unit1;

{$mode objfpc}{$H+}

interface

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

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    ListBox1: TListBox;
    OpenDialog1: TOpenDialog;
    procedure Button1Click(Sender: TObject);
    procedure Edit1KeyPress(Sender: TObject; var Key: char);
    procedure ListBox1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
begin
   if OpenDialog1.Execute then begin
   ListBox1.Items.LoadFromFile(OpenDialog1.FileName);
   end;
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: char);
begin
  with ListBox1 do
  if (key=#13)and(ItemIndex<>-1) then begin
   Items[ItemIndex]:=TEdit(Sender).Text;
end;
  end;

procedure TForm1.ListBox1Click(Sender: TObject);
begin
Edit1.Text := ListBox1.Items.Strings[ListBox1.ItemIndex];
end;

end.
вод собственно он. может быть я использую не тот edit. я програмирую в лазарусе и использую edit с панели стандарт.
может проблема в том что я хочу заменить только часть текста, так как у меня идёт список ФИО и мне нужно чтоб при замене например имени всё остальное оставалось неизменным. для этого в первоначальной программе той что выше я создал кучу эжитов в которые я и разделял это всё. сейчас я попробовал создать новую прогу с 1 edit и ваш код опять не работает.
но в этой программе я точно знаю что работают вот такая вот кнопка.
Код:
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;
но па кнопке опять же не получается редактировать больше одной edit.
кстате она срабатывает аналогично тому как я описывал выше(выделяет текст).
и что с этим делать я не знаю...
kudzey вне форума Ответить с цитированием
Старый 15.08.2014, 08:10   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Стесняюсь спросить, а событие для эдита ты вообще создал? Или тупо вставил код в исходник?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.08.2014, 10:20   #10
kudzey
Пользователь
 
Регистрация: 14.08.2014
Сообщений: 20
По умолчанию

стыдно отвечать но не создавал, я до этого всё делал через кнопки, и с такой задачей первый раз столкнулся, и как ешить незнаю, в ру нете всё что я находил было так же через кнопки.
kudzey вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Turbo Pascal и Free Pascal , в чем разница? antoxann Паскаль, Turbo Pascal, PascalABC.NET 31 09.11.2011 07:52
Связь Edit и Listbox Афанасий[vedma] Компоненты Delphi 4 06.08.2011 15:51
Копирование строки из Edit в другой Edit. Ibanez Wizard Win Api 3 29.03.2011 02:46
Вопрос по ListBox и Edit SARGE Общие вопросы Delphi 2 04.06.2010 15:14
а free pascal не читает задачи которые написаны на turbo pascal? demonara Паскаль, Turbo Pascal, PascalABC.NET 3 25.05.2009 16:28