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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

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

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

{$mode objfpc}{$H+}

interface

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

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Edit1: TEdit;
    ListBox1: TListBox;
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Edit1KeyPress(Sender: TObject; var Key: char);
    procedure FormCreate(Sender: TObject);
    procedure ListBox1Click(Sender: TObject);
    procedure SaveDialog1CanClose(Sender: TObject; var CanClose: boolean);
    procedure SaveDialog1FolderChange(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.Button2Click(Sender: TObject);
begin
    if SaveDialog1.Execute then begin
   ListBox1.Items.SaveToFile(SaveDialog1.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;

procedure TForm1.Button4Click(Sender: TObject);
begin
  if MessageDlg('Вставить строку выше выделенной?', mtInformation, [mbOk,mbCancel],0) = mrOK
  then
  begin
    ListBox1.Items.Insert(ListBox1.ItemIndex, Edit1.text);
    ListBox1.Items.SaveToFile('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.FormCreate(Sender: TObject);
begin
  SaveDialog1.Filter:=
'текстовые файлы|*.txt|Все файлы|*.*';
end;



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

procedure TForm1.SaveDialog1CanClose(Sender: TObject; var CanClose: boolean);
begin

end;

procedure TForm1.SaveDialog1FolderChange(Sender: TObject);
begin

end;

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

Код:
with ListBox1 do
  if (key=#13)and(ItemIndex<>-1) then begin
  Items[ItemIndex]:=TEdit(Sender).Text;
  SetFocus();
 end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.08.2014, 13:28   #3
kudzey
Пользователь
 
Регистрация: 14.08.2014
Сообщений: 20
По умолчанию

огромное спасибо за помощь, может быть вы знаете как сделать так чтоб можно было вписать в edit не всё строку а только отдельное слово, отредактировать, и вернуть назад?
просто для цели выделить одно слово я использую. вот такую вот вещь.
Код:
Edit1.Text := Trim(ExtractWord(1, ListBox1.Items[ListBox1.ItemIndex], [';',' ','.',',']));
но как вернёть после этого слово на прежнее место незнаю.
или возможно есть какие небудь другие методы для реализации подобного
kudzey вне форума Ответить с цитированием
Старый 18.08.2014, 13:36   #4
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Чисто теоретически можно попробовать вогнать предложение в StringList и в качестве разделителя выбрать пробел. Тогда все будет разбито на слова, и будет к ним доступ как к элементам списка (удаление, изменение и пр.). Ну а затем уже можно представить данный список снова одним предложением. Данный вариант естественно не учитывает обработку знаков препинания.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 18.08.2014, 13:51   #5
kudzey
Пользователь
 
Регистрация: 14.08.2014
Сообщений: 20
По умолчанию

было бы отлично если бы вы дали хотя бы небольшой пример кода, как это сдалеть, или как это видете вы.
kudzey вне форума Ответить с цитированием
Старый 20.08.2014, 08:41   #6
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Пишу без проверки, потому могут быть ошибки
Код:
var
    a: TStringList;
begin
    a:=TStringList.Create;
    a.Delemiter:=' ';
    a.DelemitedText:=b;  // Здесь b строка для разбора
    
    // Доступ к слову
   writeln(a[i]);
     
    // собрать строку
    b:=a.DelemitedText;
end;
Повторяю - это просто пример в каком направлении копать, рядом нет делфи для проверки работоспособности.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 20.08.2014, 21:32   #7
kudzey
Пользователь
 
Регистрация: 14.08.2014
Сообщений: 20
По умолчанию

здравствуйте, я так пологаю эту тему немного подредактировали, так вот у меня возникла проблема сделать то же самое но для listbox. т.е. по нажатию Enter переносить фокус ввода из listbox обратно в edit.
kudzey вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как передать фокус ввода в поле Edit Arassir Помощь студентам 14 11.07.2012 12:37
Вставка текста в поля ввода программ из меню - как не терять фокус? ViH Общие вопросы C/C++ 0 04.12.2011 09:06
Фокус ввода Rusl92 JavaScript, Ajax 3 27.07.2011 20:01
Как сделать чтобы фокус всегда был на мой форме gufon Общие вопросы Delphi 1 01.06.2011 12:45
Как сделать запрет ввода букв в поле для ввода input zvezda_t PHP 1 27.12.2009 22:02