Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.044 c
15-1167799269
Думкин
2007-01-03 07:41
2007.01.21
На юге Москвы пасмурно, на СЗ столицы.. , на Дальнем Востоке +5.


2-1167371820
hero
2006-12-29 08:57
2007.01.21
Как имея ID процесса узнать имя файла и путь этого процесса?


15-1167698649
Германн
2007-01-02 03:44
2007.01.21
Оч трудно работать компоновщиком


6-1156377385
dexer
2006-08-24 03:56
2007.01.21
Как передать файл, от ServerSockets к ClientSockets


6-1155796601
vodvorezlaya
2006-08-17 10:36
2007.01.21
Как выловить Http адрес





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский