Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.01.21;
Скачать: CL | DM;

Вниз

Проблема при копировании таблиц через 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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.035 c
15-1167335892
Palladin
2006-12-28 22:58
2007.01.21
Ну емае... куда девался старый добрый рейв...


2-1167221075
harusha
2006-12-27 15:04
2007.01.21
DLL


15-1167174176
Andy BitOff
2006-12-27 02:02
2007.01.21
Или я туплю, или одно из двух


15-1166814079
Cerberus
2006-12-22 22:01
2007.01.21
Заканчивается год.


15-1167619282
Petr V. Abramov
2007-01-01 05:41
2007.01.21
просьба никому 10 мин не постиь ниче!