Консультация № 187484
25.06.2013, 07:58
87.12 руб.
0 15 2
Здравствуйте! Прошу помощи в следующем вопросе: В процессе выполнения процедуры у меня с Мемо содержимое копируется в ComboBox
Код:
ComboBox2.Items.Text:=Memo3.Lines.Text;
Комбобокс работает как поисковик, мне требуется сделать что бы копировалась выделенная (текущая) строка в комбобоксе, и в Мемо3 выделялась найденная в комбобоксе фамилия.

Обсуждение

давно
Профессионал
153662
1070
25.06.2013, 10:43
общий
это ответ
Здравствуйте, Владимир!
Могу предложить такое решение:
Код:
procedure TForm1.ComboBox2Change(Sender: TObject);
var
s: string;
i: word;
begin
s:= combobox2.Text; // Копируем выделеный текст
for i:= 0 to (memo3.Lines.Count - 1) do
if s = memo3.Lines.Strings[i] then // Ищем совпадение строки в мемо и скопированного текста
begin
memo3.SelStart:= memo3.Perform(EM_LINEINDEX, i, 0); // Устанавливваем начало выделения найденой строки
memo3.SelLength:= Length(memo3.Lines[i]); // Выделяем всю строку
memo3.SetFocus; // Фокус на мемо
end;
end;
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

давно
Посетитель
352040
133
25.06.2013, 12:22
общий
Адресаты:
Благодарю. То что нужно. Еще вопрос. Как из комбобокса скопировать выделенную строку?
Об авторе:
Пользуюсь Delphi Enterprise Version7.
давно
Профессионал
153662
1070
25.06.2013, 12:55
общий
25.06.2013, 13:00
Адресаты:
Строчка
Код:
 s:= combobox2.Text; // Копируем выделеный текст

копирует выделенную строчку и она же находится в поле редактора комбобоокса, либо
Код:
s:= combobox2.Items.Strings[combobox2.Itemindex];
: здесь копируется выделенная строка по которой только что кликнули. По сути сразу после клика по строке в выпадающем списке результат будет один и тот же.
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

давно
Посетитель
352040
133
25.06.2013, 13:20
общий
Адресаты:
Не правильно вопрос задал. Меня интересует копирование в буфер "CopyToClipboard" выделенную строку.
Об авторе:
Пользуюсь Delphi Enterprise Version7.
давно
Профессионал
153662
1070
25.06.2013, 14:17
общий
25.06.2013, 14:30
Адресаты:
Примерно так:
Код:
uses ClipBrd;

procedure TForm1.ComboBox2Change(Sender: TObject);
var
s: string;
i: word;
begin
...
{ClipBoard.Create;}
ClipBoard.Open;
ClipBoard.AsText:= combobox2.Items.Strings[combobox2.Itemindex];
ClipBoard.Close;
...
end;
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

давно
Мастер-Эксперт
319965
1463
25.06.2013, 14:19
общий
это ответ
Здравствуйте, Владимир!
Меня интересует копирование в буфер "CopyToClipboard" выделенную строку

Код:
uses Clipbrd;
...................
Clipboard.Open;
Clipboard.AsText:=Combobox2.Items[ComboBox2.ItemIndex];
Clipboard.Close;
......................
давно
Мастер-Эксперт
319965
1463
25.06.2013, 14:24
общий
Адресаты:
Clipboard.Create вызывать не нужно
давно
Профессионал
153662
1070
25.06.2013, 14:29
общий
25.06.2013, 14:31
Адресаты:
Спасибо за поправку. Хотя и так работает без ошибки.
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

давно
Мастер-Эксперт
319965
1463
25.06.2013, 14:37
общий
Адресаты:
Работает то работает, но дело в том, что Clipboard является вызовом функции, внутри которой вызывается метод Create. Таким образом метод Create вызывается дважды, что приводит к утечке памяти.
давно
Посетитель
352040
133
25.06.2013, 14:49
общий
Адресаты:
Сделал по вашему примеру.
Код:
procedure TForm1.ComboBox2Click(Sender: TObject);
begin
ClipBoard.Open;
ClipBoard.AsText:= combobox2.Items.Strings[combobox2.Itemindex];
ClipBoard.Close;
end;

Получаю - Unit1.pas(854): Undeclared identifier: 'ClipBoard'
Об авторе:
Пользуюсь Delphi Enterprise Version7.
давно
Мастер-Эксперт
319965
1463
25.06.2013, 15:39
общий
Адресаты:
Ну и где uses Clipbrd?
давно
Профессионал
153662
1070
25.06.2013, 15:58
общий
Адресаты:
Ещё раз спасибо, только вернулся с отпуска видать ещё не адаптировался.
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

давно
Профессионал
153662
1070
25.06.2013, 16:17
общий
Адресаты:
Цитата: Владимир
Сделал по вашему примеру.
Да, только забыли добавить uses ClipBrd; из моего примера.
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

давно
Посетитель
352040
133
25.06.2013, 16:28
общий
Адресаты:
Сам тоже после отпуска втягиваюсь в работу. Вот и вопросы задаю глупые. Благодарю за помощь. Все работает как и требовалось.
Код:
procedure TForm1.ComboBox2Change(Sender: TObject);
var
s: string;
i: word;
begin
s:= combobox2.Text;
for i:= 0 to (memo3.Lines.Count - 1) do
if s = memo3.Lines.Strings[i] then
begin
memo3.SelStart:= memo3.Perform(EM_LINEINDEX, i, 0);
memo3.SelLength:= Length(memo3.Lines[i]);
memo3.SetFocus;
end;
end;

procedure TForm1.ComboBox2Click(Sender: TObject);
begin
ClipBoard.Open;
ClipBoard.AsText:= combobox2.Items.Strings[combobox2.Itemindex];
ClipBoard.Close;
end;


Тему можно закрывать.
Об авторе:
Пользуюсь Delphi Enterprise Version7.
давно
Профессионал
153662
1070
25.06.2013, 20:56
общий
Цитата: Владимир
Сам тоже после отпуска втягиваюсь в работу. Вот и вопросы задаю глупые. Благодарю за помощь. Все работает как и требовалось.
Код :

procedure TForm1.ComboBox2Change(Sender: TObject);
var
s: string;
i: word;
begin
s:= combobox2.Text;
for i:= 0 to (memo3.Lines.Count - 1) do
if s = memo3.Lines.Strings[i] then
begin
memo3.SelStart:= memo3.Perform(EM_LINEINDEX, i, 0);
memo3.SelLength:= Length(memo3.Lines[i]);
memo3.SetFocus;
end;
end;
procedure TForm1.ComboBox2Click(Sender: TObject);
begin
ClipBoard.Open;
ClipBoard.AsText:= combobox2.Items.Strings[combobox2.Itemindex];
ClipBoard.Close;
end;



Тему можно закрывать.


Когда Вы кликаете по комбобоксу следом автоматом вызывается и процедура procedure TForm1.ComboBox2Change(Sender: TObject); так как изменяется строка в поле редактирования комбобокса, так что код можно спокойно объединить.
Код:
    procedure TForm1.ComboBox2Change(Sender: TObject);
var
s: string;
i: word;
begin
s:= combobox2.Text; // Копируем выделеный текст
ClipBoard.Open;
ClipBoard.AsText:= combobox2.Items.Strings[combobox2.Itemindex];
ClipBoard.Close;
for i:= 0 to (memo3.Lines.Count - 1) do
if s = memo3.Lines.Strings[i] then // Ищем совпадение строки в мемо и скопированного текста
begin
memo3.SelStart:= memo3.Perform(EM_LINEINDEX, i, 0); // Устанавливваем начало выделения найденой строки
memo3.SelLength:= Length(memo3.Lines[i]); // Выделяем всю строку
memo3.SetFocus; // Фокус на мемо
end;
end;

будет работать так-же как и Ваш.
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

Форма ответа