Главная страница
    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.047 c
2-1166968934
Wahnsinng
2006-12-24 17:02
2007.01.21
Копировать на FTp


2-1167295896
Riply
2006-12-28 11:51
2007.01.21
PERF_COUNTER_DEFINITION Преобразование значения счетчика в строку


8-1148563758
MetalFan
2006-05-25 17:29
2007.01.21
Пережать видео...


15-1167149940
oldman
2006-12-26 19:19
2007.01.21
не хочется насиловать комп, поэтому лучше спросить...


15-1167601161
Anatoly Podgoretsky
2007-01-01 00:39
2007.01.21
Новый год





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский