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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.07.2017, 11:19   #21
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,194
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
Ну забыл человек сделать Ctrl +С и получил незнамо что
1. ничего не вставил (это полбеды). Увидел что нет ничего, да и повторил действия правильно.
2. вставил да не то, какое-то прошлое копирование. Увидел что данные изменились, НО... не проверил что правильно, понадеялся, привык к правильным, сработал на автомате. (уж беда так беда).
Ну, ок, допустим, что значение будет из таблицы №2 браться по Ctrl-C.
Как проверить что буфер поместился текст? Без вставки его куда. Что буфер содержит текст.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 11.07.2017, 11:34   #22
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Цитата:
Как проверить что буфер поместился текст?
видимо где-то его отобразить.
Код:
LabelX.Caption:=Clipbard.AsText;
P.S. для целей отладки может быть достаточно и просто переменной (s: string), НО ... c обязательным использованием после (для исключения работы по оптимизации неиспользуемых данных).

а зачем в таком разе сам буфер. с тем же успехом данные можно "доставать" из LabelX.Caption (и|или s: string).
главное как-то (где-то) менять этот LabelX.Caption. найти такое событие при котором мы будем уверены что вот пора делать "копирование" (перенос данных).
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 11.07.2017 в 11:41.
evg_m на форуме Ответить с цитированием
Старый 12.07.2017, 04:51   #23
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,194
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
главное как-то (где-то) менять этот LabelX.Caption. найти такое событие при котором мы будем уверены что вот пора делать "копирование" (перенос данных).
Например, при нажатии клавиши Enter в таблице №2 стоя на выбранной ячейке.
Значение этой ячейки и должно скопировать в таблицу №1 под курсор.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 12.07.2017, 10:21   #24
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Цитата:
Например, при нажатии клавиши Enter в таблице №2 стоя на выбранной ячейке.
Я конечно же понимаю, что это уже ТРЕТИЙ вариант "полного переписывания", НО тем не менее...

добавляем formTarget СВОЕ событие OnSelectAdress
Код:
TFormTarget =class(Tform)
...
  procedure OnClick(Sender: TObject);// процедура реакции на событие знаменующее собой окончание выбора данных
  procedure OnDBgridKeyPress(sender: TObject; var key: char); // так кажется будет НАЖАТИЕ клавиши
private
  FonSelectAdress: TNotifyEvent;
public
  property OnSelectAdress: TNotifyEvent; //здесь конечно +read +write (или по крайней мере write)
end;

procedure TFormTarget.Onclick(Sender: TObject);
begin
  FOnSelectAdress(self); //мы вызывает некую процедуру из ... (да нам без разницы откуда она) и передаем ей свой объект (себя)
end;

procedure TFormTarget.OnDBGridKeyPress(sender: TObject; var key: char);
begin
  if (key=#13) and <вдруг захотим еще что-то проверить> 
                   ( TmyGrid(self.Dbgrid2).GetSelText<>'' ) //например что мы хоть что-то выбрали
              then begin
        ... //  при желании ЗДЕСЬ можно и заполнить Label если он нам зачем-нибудь понадобиться, но сделать это надо ДО следующей строки
                FonSelectAdress(self);   
             end;
end;
Код:
TFormAdresses =class(TForm)
...
  procedure Dblclick(sender: TObject); //процедура(для события) где инициализируется обращение к formTarget
protected
  procedure SetTargetData(sender: TObject); // вот та процедура которую мы передадим FormTarget она должна соответствовать типу TNotifyEvent (иметь ровно столько параметров[1] и они должны быть соответствующего типа[Tobject] )
end;

procedure TformAdresses.Dblclick(sender: TObject);
begin
  formtarget.Show;
  formtarget.OnSelectAdress:=self.SetTargetData; // и мы ее(процедуру SetTargetData) ПЕРЕДАЛИ!!!! и можем(будем) там внутри formTarget её вызывать
  "просим информировать нас о ..." 
end;
теперь formTarget может забыть о существовании formAdressess.
все что ей нужно помнить о некой процедуре которую она должна вызвать при определенных условиях.
и теперь мы сможем без малейших изменений использовать и для других аналогичных выборов в другие формы.
а мы(formAdresses) можем спокойно "спать" ( или делать все что угодно) Formtarget САМА сообщит(OnSelectAdress) нам когда выбор будет сделан.

Код:
type
TMyGrid =class(TDBGrid) // дополним DBGrid двумя действиями получить/заменить текст InplaceEditor
(Если они нам конечно же нужны еще будут)
protected
  procedure ReplaceText(const rt: string);
  function GetRepalceText: string;
end;  

TmyGrid.ReplaceText(const rt: string);
begin
  self.InplaceEditor.selText:=rt;
end;

TMyGrid.GetReplaceText: string;
begin
  result:=self.InplaceEditor.SelText;
end;
Код:
procedure TformAdresses.SetTargetData(sender: TObject);
var
  r: string;
  f: TFormTarget;
begin 
  f:=sender as TFormTarget;  //МЫ и так знаем КАКУЮ форму мы вызывали

// formtarget здесь пока еще активна и можно многое сделать
  r:=TmyGrid(f.DBGrid2).GetReplaceText; //получить ИСХОДНЫЙ(выбранный) текст (на самом деле о будет из FormTarget.DBGrid.InplaceEditor)
  // НУ или другой код r:= f.DBgrid2.Selectcolumn.Field.AsString; ""Значение этой ячейки и должно скопировать в таблицу №1 под курсор.  ""
  // или же  r:=f.LabelX.Caption; если все-таки будем пользоваться Label

  f.Close; //formTarget нам пока больше не нужна можем ее прикрыть
  self.Show; //а про себя тоже знаем что пора "работать"

  TmyGrid(Self.Dbgrid).ReplaceData(r); // и заменить им НАШ текст.  (это будет formAdresses.Dbgrid1.InplaceEditor)
end;
И никаких буферов обмена!!! достаточно одной переменной. А можно и вообще без неё.
Но с ней удобней(наглядней).
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 12.07.2017 в 10:34.
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