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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.03.2011, 01:57   #1
Саня_
Пользователь
 
Регистрация: 05.03.2011
Сообщений: 36
По умолчанию Добавление текста в Edit

По ходу дела столкнулся с проблемой: у меня на форме есть кнопки, при нажатии которых в Edit1 добавляются символы. Можно ли сделать так, что бы символы добавлялись не в конкретный Edit, а в тот, в котором стоит курсор?
Саня_ вне форума Ответить с цитированием
Старый 07.03.2011, 09:06   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

можно. Но прийдётся заводить глобальную переменную, куда записывать признак того эдита, который стал активным (куда Вы поставили курсор). Посмотрите внимательно на свою программу. Когда Вы нажимаете на кнопку, она (кнопка) становится активной, курсор из эдита пропадает.. Так?
Поэтому нужно сохранить информацию о том, какой эдит был активен перед нажатием кнопки. И в обработчике кнопки писать символы именно в него...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 07.03.2011, 13:28   #3
asmodey1
Подтвердите свой е-майл
 
Регистрация: 19.12.2010
Сообщений: 808
По умолчанию

Если в качестве кнопки использовать SpeedButton, то фокус "убегать" не будет, но все равно придется либо действовать, как предложил Сергей, либо проверять наличие Focused у всех эдитов и писать в тот, у которого это свойство равно True.
asmodey1 вне форума Ответить с цитированием
Старый 07.03.2011, 13:40   #4
rodionov_uv
Пользователь
 
Регистрация: 21.12.2009
Сообщений: 15
По умолчанию

можеть это смешно, но я делал так

назначал TabOrder как имя Edit (например Edit1.taborder=1 и т.д)

Код:
private
  procedure Enter;
    { Private declarations }
  public
  i:integer;
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
procedure TForm1.Enter;
begin
  i := ActiveControl.TabOrder;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  TEdit(FindComponent('edit' + Inttostr(i))).Text := 'rvtybuntyny';
end;

procedure TForm1.Edit(здесь номер Edita)Enter(Sender: TObject);
begin
   enter;
end;
вот и всё
rodionov_uv вне форума Ответить с цитированием
Старый 07.03.2011, 15:26   #5
Саня_
Пользователь
 
Регистрация: 05.03.2011
Сообщений: 36
По умолчанию

Цитата:
Сообщение от rodionov_uv Посмотреть сообщение
можеть это смешно, но я делал так

назначал TabOrder как имя Edit (например Edit1.taborder=1 и т.д)

Код:
private
  procedure Enter;
    { Private declarations }
  public
  i:integer;
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
procedure TForm1.Enter;
begin
  i := ActiveControl.TabOrder;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  TEdit(FindComponent('edit' + Inttostr(i))).Text := 'rvtybuntyny';
end;

procedure TForm1.Edit(здесь номер Edita)Enter(Sender: TObject);
begin
   enter;
end;
вот и всё
добавь плиз сюда эту программу, а то так не совсем понятно. И напиши адрес, куда залил... Заранее спасибо!)
Саня_ вне форума Ответить с цитированием
Старый 07.03.2011, 15:57   #6
Volt
Форумчанин
 
Аватар для Volt
 
Регистрация: 07.12.2008
Сообщений: 244
По умолчанию

Код:
var
  Form1: TForm1;
  Senders: TObject;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
(Senders as TEdit).Text:= 'текст';
end;

procedure TForm1.Edit1Click(Sender: TObject);
begin
Senders:=Sender;
end;
|̲̅̅●̲̅̅|̲̅̅=̲̅̅|̲̅̅●̲̅̅]
Volt вне форума Ответить с цитированием
Старый 07.03.2011, 15:59   #7
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> можеть это смешно, но я .. назначал TabOrder как имя Edit

это действительно смешно. Не дай боже переименовать хоть один Едит, или хоть немного изменить порядок создания компонент (= зменить TabOrder), и весь ваш порядок рухнет.

Проще тогда в Enter() запоминать не TabOrder, а сам ActiveControl:

Код:
var
  lastEdit: TEdit;

procedure TForm1.Enter;
begin
  if (ActiveControl is TEdit) then
    lastEdit := ActiveControl as TEdit;
end;
Ну и Button1Click() упрощается заодно:

Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if (nil <> lastEdit) then
    lastEdit.Text := 'Edit text';
end;
Хотя способ все-равно корявый (как и сама проблема, кстати).
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 07.03.2011, 16:02   #8
Саня_
Пользователь
 
Регистрация: 05.03.2011
Сообщений: 36
По умолчанию

всем большое спасибо, разобрался)
Саня_ вне форума Ответить с цитированием
Старый 07.03.2011, 18:51   #9
rodionov_uv
Пользователь
 
Регистрация: 21.12.2009
Сообщений: 15
По умолчанию

Цитата:
Сообщение от veniside Посмотреть сообщение
> можеть это смешно, но я .. назначал TabOrder как имя Edit

это действительно смешно. Не дай боже переименовать хоть один Едит, или хоть немного изменить порядок создания компонент (= зменить TabOrder), и весь ваш порядок рухнет.

Проще тогда в Enter() запоминать не TabOrder, а сам ActiveControl:

Код:
var
  lastEdit: TEdit;

procedure TForm1.Enter;
begin
  if (ActiveControl is TEdit) then
    lastEdit := ActiveControl as TEdit;
end;
Ну и Button1Click() упрощается заодно:

Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if (nil <> lastEdit) then
    lastEdit.Text := 'Edit text';
end;
Хотя способ все-равно корявый (как и сама проблема, кстати).
Просто я динамически создавал поля ввода, поэтому переименовать их просто незачем

вот так

Код:
      OpenBut.TabOrder := OpenBut.TabOrder + i;
      PrintBut.TabOrder := PrintBut.TabOrder + i;
      ReadList.Add(W.ActiveDocument.Range(n, k).Text);
      x:=TLabeledEdit.create(self);
      x.parent:=MyPanel;
      x.name := 'edit' + IntToStr(i);
      EditList.Add('edit' + IntToStr(i));
      x.EditLabel.Caption:= W.ActiveDocument.Range(n+3, k-2).Text;
      x.EditLabel.Font.Size := 11;
      x.Text := '';
      x.left:=10;
      x.top:=t;
      x.Width:=250;
      x.TabOrder:=i-1;
полный текст программы http://forum.codeby.net/topic41420.html

Последний раз редактировалось rodionov_uv; 07.03.2011 в 19:00.
rodionov_uv вне форума Ответить с цитированием
Старый 07.03.2011, 19:24   #10
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

А ещё есть замечательное свойство Tag просто записывайте его в в переменную Last и по tag'у передавайте в Edit текст.
Человек_Борща вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поячеечное добавление цифр в Stringgrid из Edit eva-2030 Общие вопросы Delphi 18 11.02.2011 20:41
Ориентация текста в Edit MyLastHit Общие вопросы Delphi 6 07.12.2010 23:06
Проверка текста в Edit misher Общие вопросы Delphi 15 02.10.2010 13:17
Добавление текста марина никандрова Microsoft Office Excel 2 03.06.2010 11:30
замена текста в Edit designer999 Общие вопросы Delphi 3 17.04.2010 15:19