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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.07.2017, 12:54   #11
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А буфер обмена зачем? Edit.Text или просто строковой переменной мало для этого? И вообще-то мало чего понял ))
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 06.07.2017, 13:03   #12
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
У меня по попаданию в ячейку (когда курсор уже мигает), срабатывает проверка, результат которой может быть отображение таблицы №2
так мы же покинули данную таблицу, чтобы сделать что-то
Цитата:
выбрав которое
и теперь когда ... (а как кстати мы решаем что пора вставлять?)
и где выбираем (где расположена таблица 2) ?
на той же форме
на другой форме показываемой в "неблокирующем" режиме (formx.show)
на другой форме вызываемой модально (formX.showModal)
последний вариант(showModal) самый простой
Код:
if mrok:=formX.ShowModal then 
  DBgrid1...... :=formX.DBGrid2.........;
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 06.07.2017 в 13:08.
evg_m вне форума Ответить с цитированием
Старый 06.07.2017, 17:32   #13
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

Цитата:
Сообщение от artemavd Посмотреть сообщение
... вставить скопированный текст из буфера обмена в ячейку таблицы №1, в которой включено AllwaysShowEditor и мигает курсор. Вот в это место и должен вставиться текст, т.е. туда, где курсор.
Как это можно сделать?
Так устроит?
Код:
var
  Form1: TForm1;
  pos: Longint;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var h: THandle;
begin
//получим и сохраним позицию "мигающего" курсора
DBGrid1.SetFocus;
Application.ProcessMessages;
h:= Windows.GetFocus;
SendMessage(h, EM_GETSEL, Longint(@pos), 0);
Label1.Caption:=IntToStr(pos); //Это так, для проверки :)
end;

procedure TForm1.Button2Click(Sender: TObject);
var h: THandle;
begin
//вставим текст из буфера в запомненную позицию
DbGrid1.SetFocus;
DbGrid1.EditorMode := true;
Application.ProcessMessages;
h:= Windows.GetFocus;
SendMessage(h, EM_SETSEL, pos, pos);
SendMessage(h, WM_PASTE,0,0);
end;

end.
kropotkina-alice вне форума Ответить с цитированием
Старый 07.07.2017, 10:43   #14
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Цитата:
Сообщение от kropotkina-alice Посмотреть сообщение
Так устроит?
Код:
var
  Form1: TForm1;
  pos: Longint;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var h: THandle;
begin
//получим и сохраним позицию "мигающего" курсора
DBGrid1.SetFocus;
Application.ProcessMessages;
h:= Windows.GetFocus;
SendMessage(h, EM_GETSEL, Longint(@pos), 0);
Label1.Caption:=IntToStr(pos); //Это так, для проверки :)
end;

procedure TForm1.Button2Click(Sender: TObject);
var h: THandle;
begin
//вставим текст из буфера в запомненную позицию
DbGrid1.SetFocus;
DbGrid1.EditorMode := true;
Application.ProcessMessages;
h:= Windows.GetFocus;
SendMessage(h, EM_SETSEL, pos, pos);
SendMessage(h, WM_PASTE,0,0);
end;

end.
Смотри
Вот код, когда я у меня скрывается таблица №1 через Visible:=False; и показывается таблица №2 через Visible:=True со значениями. Код скрытия таблицы №1 я поместил в событие DBGrid1.OnCellMouseClick:
Код:
procedure TFormAddresses.DBGridEh1CellMouseClick(Grid: TCustomGridEh; Cell: TGridCoord; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  h: THandle;
begin
  h:=Windows.GetFocus;
  SendMessage(h, EM_GETSEL, Longint(@pos), 0);
end;
Затем код взятия значения из таблицы № по нажатию на клавишу Enter:
Код:
procedure TFormAddresses.TARGETKeyPress(Sender: TObject; var Key: Char);
var
  h: THandle;
begin
 if Key = #13 then
 begin
  FormAddresses.TARGET.Visible:=False;
  FormAddresses.DBGridEh1.Visible:=True;
  ShowMessage(FormAddresses.sStatusBar1.Panels[1].Text); 
  ShowMessage(IntToStr(Length(FormAddresses.sStatusBar1.Panels[1].Text)));
  FormAddresses.DBGridEh1.EditorMode:=True;
  h:=Windows.GetFocus;
  SendMessage(h, EM_SETSEL, pos, pos);
  SendMessage(h, WM_PASTE,0,0);
 end;
end;
2 ShowMessage() тут, чтобы убедиться, что значение берется и оно берется действительно.
Но в ячейку таблицы №1 ничего не заносится. Курсор мигает, но, значение не постится в ячейку к курсору.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 07.07.2017, 12:26   #15
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

Мой код работает?
Работает.
Так что ищи ошибку у себя...
Кстати, где обязательная строка
Код:
DbGrid1.SetFocus;
перед
Код:
h:=Windows.GetFocus;
???
Поэтому ничего и не заносится...
kropotkina-alice вне форума Ответить с цитированием
Старый 10.07.2017, 16:21   #16
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Цитата:
Сообщение от kropotkina-alice Посмотреть сообщение
Мой код работает?
Работает.
Так что ищи ошибку у себя...
Кстати, где обязательная строка
Да нет, я верю, что твой код работает
Я и ищу у себя почему у меня он не работает.
Вот я запоминаю позицию курсора:
Код:
procedure TFormAddresses.DBGridEh1DblClick(Sender: TObject);
var
  h: THandle;
begin
   FormAddresses.DBGridEh1.SetFocus; //1. Передаю фокус
   Application.ProcessMessages;
   h:=Windows.GetFocus; //2. Передаю в переменную
   SendMessage(h, EM_GETSEL, Longint(@pos), 0); //3. Запомнили позицию
   FormTarget.Show; //4. Показываю форму с таблицей №2
   FormTarget.sLabel1.Caption:=IntToStr(pos); //Это так, для проверки :)
end;
А вот когда значение из таблицы №2 выбрано:
Код:
procedure TFormTarget.sEdit2DblClick(Sender: TObject);
var
  h:  THandle;
begin
  FormTarget.Close; //1. Закрыл форму с таблицей №2
//  ShowMessage(FormTarget.sEdit2.Text);
  FormAddresses.DBGridEh1.DataSource.DataSet.Edit; //2. Перевел в режим редактирования
  FormAddresses.DBGridEh1.ReadOnly:=False; //3. Снял свойство "только чтение" у таблицы №1
  FormAddresses.DBGridEh1.SetFocus; //4. Передал фокус в таблицу №1
  FormAddresses.DBGridEh1.EditorMode:=True; //5. Режим редактирования
  Application.ProcessMessages;
  h:=Windows.GetFocus;
  SendMessage(h, EM_SETSEL, pos, pos);
  SendMessage(h, WM_PASTE,0,0); //6. Помещаю данные (должен вроде как)
end;
Но, ничего не заносится.
Вот что именно у меня не так?
Может я логически строки кода расположил неправильно и что-то мешает друг другу, лишнее.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.

Последний раз редактировалось artemavd; 10.07.2017 в 16:25.
artemavd вне форума Ответить с цитированием
Старый 10.07.2017, 17:03   #17
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Код:
  SendMessage(h, WM_PASTE,0,0); //6. Помещаю данные (должен вроде как)
а где код для ПОМЕЩЕНИЯ в буфер? WM_COPY | clipbard.asText:= ....
если ничего не поместить, то ничего и не вставить.

видимо
Код:
h:=Windows.Getfocus;
SendMessage(h, WM_COPY, 0, 0); ///????
FormTarget.Close;
....

h:=Windows.GetFocus;
SendMessage(h, VM_PASTE, 0, 0);
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 10.07.2017, 19:39   #18
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

Цитата:
а где код для ПОМЕЩЕНИЯ в буфер?
если ничего не поместить, то ничего и не вставить.
Ну почему?
Я в своем примере просто выделяю текст в эдите, жму CTRL+C и в буфере текст из эдита...
А может он хочет вставить цитату из умной книги

Последний раз редактировалось kropotkina-alice; 10.07.2017 в 19:41.
kropotkina-alice вне форума Ответить с цитированием
Старый 11.07.2017, 04:45   #19
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Цитата:
Сообщение от kropotkina-alice Посмотреть сообщение
Ну почему?
Я в своем примере просто выделяю текст в эдите, жму CTRL+C и в буфере текст из эдита...
А может он хочет вставить цитату из умной книги
Копировать текст из эдита через комбинацию это просто, но это не то, что мне нужно.

Цитата:
Сообщение от evg_m Посмотреть сообщение
а где код для ПОМЕЩЕНИЯ в буфер? WM_COPY | clipbard.asText:= ....
если ничего не поместить, то ничего и не вставить.
Так вот я и не знаю где его разместить...Возможно конфликт из-за расположения строк кода, что-то чему-то мешает.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 11.07.2017, 09:24   #20
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
если ничего не поместить, то ничего и не вставить.
Цитата:
Я в своем примере просто выделяю текст в эдите, жму CTRL+C
а что же это как не помещение в буфер. выполняемое действие не имеющее отражения в посте.
практически уверен, что ничего подобного TC не делает.
Да и на удобстве(надежности) работы программы скажется.
Ну забыл человек сделать Ctrl +С и получил незнамо что
1. ничего не вставил (это полбеды). Увидел что нет ничего, да и повторил действия правильно.
2. вставил да не то, какое-то прошлое копирование. Увидел что данные изменились, НО... не проверил что правильно, понадеялся, привык к правильным, сработал на автомате. (уж беда так беда).

Цитата:
Так вот я и не знаю где его разместить...
там же где и вставка WM_PASTE (в той же процедуре), но ДО FormTarget.Close; см. пример выше.
только вот боюсь dblClick будет сбивать выделение текста, так что копироваться будет не совсем то, что нужно.
программа — запись алгоритма на языке понятном транслятору

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


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вставка текста из буфера werovulv Microsoft Office Word 4 11.09.2015 07:24
В позицию курсора MyLastHit Общие вопросы Delphi 8 31.08.2010 21:16
Как отловить позицию курсора (|). X,Y Alex Cones Общие вопросы Delphi 9 27.12.2009 20:44
Как узнать позицию курсора в файле? DarkEvil Win Api 3 21.09.2009 00:10
Delphi 7 вставка текста в Richedit в позицию курсора newbee-dust Помощь студентам 3 10.06.2009 12:58