Форум: "Основная";
Текущий архив: 2007.01.21;
Скачать: [xml.tar.bz2];
ВнизПроблема при копировании таблиц через ClipBoard Найти похожие ветки
← →
Krants (2006-11-30 11:28) [0]var
st,t:string;
p,c:integer;
h:thandle;
...
FClipBrdItems.Clear;
OpenClipBoard(0);
h:=GetClipboardData(CF_TEXT);
if h<>0 then
begin
try
t:=PChar(GlobalLock(h))+char(13);
finally
GlobalUnlock(h);
end;
repeat
p:=pos(char(13),t);
if p>0 then
begin
{ st:=copy(t,0,p-1)+char(9);
repeat
c:=pos(char(9),st);
if c>0 then
begin
FClipBrdItems.Add(trim(copy(st,0,c-1)));
Delete(st,1,c);
end;
until c=0; }
FClipBrdItems.Add(trim(copy(t,0,p-1)));//При добавлении только строк
Delete(t,1,p);
end;
until p=0;
end;
CloseClipBoard;
← →
Krants (2006-11-30 11:31) [1]При копировании таблицы, можно и текста копируется только 44 или 37 записей. Почему так, не понимаю. Может кто-то сталкивался с похожей проблемой?
← →
Сергей М. © (2006-11-30 12:48) [2]Не знаю уж, где тут фигурирует "таблица", но GlobalUnlock ты рановато вызываешь : сначала д.б. упомянутый цикл и только потом вызов GlobalUnlock
← →
Сергей М. © (2006-11-30 12:54) [3]А, пардон ...
Я не обратил внимания на
t:=PChar(GlobalLock(h))+char(13);
Лучше бы, конечно, было сделать
t:=StrPas(GlobalLock(h)) + #13;
Здесь - явное копирование.
А в каков формат имеют текстовые данные в буфере ?
Приведи образец ...
← →
Krants (2006-11-30 12:56) [4]Сергей М. ©
try
t:=PChar(GlobalLock(h))+char(13);
finally
GlobalUnlock(h);
end;
- почти аналог TClipBoard.AsText
а проблема была решена заменой:
t:=PChar(GlobalLock(h))+char(13)
на
t:=PChar(GlobalLock(h))+#10#13;
Хотя особой причины возникновения ошибок я не понял...
← →
Сергей М. © (2006-11-30 12:59) [5]А чем TStringList не угодил ?
Он все это умеет делать, автоматически и в наилучшем виде ..
← →
Krants (2006-11-30 13:05) [6]этот код для удобного получения индексов, которые могут браться как из текстовых редакторов так и из таблиц экселя и прочих.
TStringList вроде так не может...
← →
Сергей М. © (2006-11-30 13:09) [7]
> TStringList вроде так не может
Что он не может-то ? Разбить исх.строку, содержащую некие заранее известные символы-разделители, на подстроки ?
Да запросто !)
← →
Anatoly Podgoretsky © (2006-11-30 13:11) [8]> Krants (30.11.2006 12:56:04) [4]
Ну вот из одной крайности в другую. Закер что ли?
← →
Krants (2006-11-30 13:16) [9]
> Anatoly Podgoretsky © (30.11.06 13:11) [8]
А кто такой "Закер"?
← →
Сергей М. © (2006-11-30 13:18) [10]"Закер"
Закер = замученный проблемами хакер)
← →
Krants (2006-11-30 13:40) [11]
> Сергей М. © (30.11.06 12:59) [5]
> А чем TStringList не угодил ?
>
> Он все это умеет делать, автоматически и в наилучшем виде ..
можно примерчик... каким образом он может разбивать на подстроки и копировать с буфура?
← →
Сергей М. © (2006-11-30 13:59) [12]
> копировать с буфура
Причем здесь буфер ?
Есть некая строка (взятая хоть из буфера хоть с Луны - не суть как важно, лишь бы она заканчивалась нуль-терминирующим символом)
Задача: разбить эту строку на подстроки, используя заранее известный символ-разделитель.
Так ?
Я тоже думаю что так.
Пусть известно, что разделителем строк выступает либо символ #13, либо #10, либо их комбинация в любой последовательности.
Тогда вызов StringList.Text := t решает задачу
← →
Krants (2006-11-30 14:09) [13]
> Сергей М. © (30.11.06 13:59) [12]
мы наверное друг-друга не правильно поняли...
да я и так использую ТStringList (в примере FClipBrdItems). разбиваю буфер на подстроки через разделители "#9" и "#13", которые и сохраняю в FClipBrdItems.
Но все равно спасибо.
← →
Сергей М. © (2006-11-30 14:40) [14]
> я и так использую ТStringList (в примере FClipBrdItems).
> разбиваю буфер на подстроки через разделители "#9" и "#13",
> которые и сохраняю в FClipBrdItems.
Ты же при этом дублируешь аналогичную функциональность TStringList - он способен делать тоже самое.. Повода для такого дублирования я не вижу, потому и заострил твое внимание на его методе Text()
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2007.01.21;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.071 c