Jump to content

DBGrid копирование в буфер на стороне клиента,


OlegTimkiv

Recommended Posts

Добрый день! Подскажите пожалуйста, как можно скопировать значение выделенной ячейки в буфер, на стороне клиента если editing = false;  

"document.execCommand(''copy'')"

Link to comment
Share on other sites

On 3/6/2020 at 4:48 PM, Sherzod said:

Добрый день!

Может Вам нужно использовать такой подход?


function copyToClipboard(text) {
  window.prompt("Copy to clipboard: Ctrl+C, Enter", text);
}

 

В некоторых браузерах есть checkbox -"Не давать этой странице создавать дополнительные диалоговые окна".  Хотелось бы, сразу в буфер копировать.  Такое тоже работать не будет "window.clipboardData.setData("Text", MainForm.UniEdit1.getValue());"

Link to comment
Share on other sites

On 3/6/2020 at 3:26 PM, OlegTimkiv said:

как можно скопировать значение выделенной ячейки в буфер, на стороне клиента если editing = false

Добрый день,

Пожалуйста еще раз уточните...

Каким образом Вы хотите скопировать значение, с помощью Ctrl+C, "ButtonCopy.Click", ... ?

Link to comment
Share on other sites

Just now, Sherzod said:

Добрый день,

Пожалуйста еще раз уточните...

Каким образом Вы хотите скопировать значение, с помощью Ctrl+C, "ButtonCopy.Click", ... ?

ButtonCopy.Click

Link to comment
Share on other sites

17 minutes ago, OlegTimkiv said:

ButtonCopy.Click

Попробуйте...

1. UniDBGrid1.ClientEvents.UniEvents ->

function beforeInit(sender, config) 
{
    sender.copyToClipboard = str => {
        const el = document.createElement('textarea');
        el.value = sender.getSelection()[0].data[sender.uniCol];
        document.body.appendChild(el);
        el.select();
        document.execCommand('copy');
        document.body.removeChild(el);
    };
}

2. Использование:

procedure TMainForm.UniButton2Click(Sender: TObject);
begin
  UniDBGrid1.JSInterface.JSCall('copyToClipboard', []);
end;

 

Link to comment
Share on other sites

3 minutes ago, Sherzod said:

Попробуйте...

1. UniDBGrid1.ClientEvents.UniEvents ->


function beforeInit(sender, config) 
{
    sender.copyToClipboard = str => {
        const el = document.createElement('textarea');
        el.value = sender.getSelection()[0].data[sender.uniCol];
        document.body.appendChild(el);
        el.select();
        document.execCommand('copy');
        document.body.removeChild(el);
    };
}

2. Использование:


procedure TMainForm.UniButton2Click(Sender: TObject);
begin
  UniDBGrid1.JSInterface.JSCall('copyToClipboard', []);
end;

 

Огромное Вам спасибо! Всё работает!  

  • Like 1
Link to comment
Share on other sites

  • 10 months later...

С последними FF кстати не работает, дает ошибку 

Quote

document.execCommand(‘cut’/‘copy’) was denied because it was not called from inside a short running user-generated event handler.

 

Link to comment
Share on other sites

странно, тогда неясно почему у меня в PaleMoon не работает который на базе ff сделан. да и про ошибку такого типа на ff есть обсуждения, да она обходится, но городить огород ради каких-то нюансов отдельных браузеров не хочется :) 

https://stackoverflow.com/questions/41094318/firefox-document-execcommand-cut-copy-was-denied-because-it-was-not-calle

Link to comment
Share on other sites

3 minutes ago, zilav said:

странно, тогда неясно почему у меня в PaleMoon не работает который на базе ff сделан. да и про ошибку такого типа на ff есть обсуждения, да она обходится, но городить огород ради каких-то нюансов отдельных браузеров не хочется :) 

https://stackoverflow.com/questions/41094318/firefox-document-execcommand-cut-copy-was-denied-because-it-was-not-calle

 

On 3/11/2020 at 11:35 AM, Sherzod said:

procedure TMainForm.UniButton2Click(Sender: TObject); begin UniDBGrid1.JSInterface.JSCall('copyToClipboard', []); end;

Можно еще попробовать перенести код на клиентскую сторону, в функцию click.

Link to comment
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
×
×
  • Create New...