Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проблема при копировании таблиц через ClipBoard


Krants ©   (2006-11-30 11:28:00) 

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;


Сергей М.   (2006-11-30 14:40:00) [1]


> я и так использую ТStringList (в примере FClipBrdItems).
>   разбиваю буфер на подстрокичерез разделители "#9" и "#13",
>  которые и сохраняю в FClipBrdItems.


Ты же при этом дублируешь аналогичнуюфункциональность TStringList - он способен делать тоже самое.. Повода для такого дублирования я не вижу, потому и заострил твое внимание на его методе Text()


Krants   (2006-11-30 14:09:00) [2]


> Сергей М. ©   (30.11.06 13:59) [12]


мы наверное друг-друга не правильно поняли...
да я и так использую ТStringList (в примере FClipBrdItems). разбиваю буфер на подстроки через разделители "#9" и "#13", которые и сохраняю в FClipBrdItems.
Но все равно спасибо.


Сергей М.   (2006-11-30 13:59:00) [3]


> копировать с буфура


Причем здесь буфер ?

Есть некая строка (взятая хоть из буфера хоть с Луны - не суть как важно, лишь бы она заканчивалась нуль-терминирующим символом)
Задача: разбить эту строку на подстроки, используя заранее известный символ-разделитель.

Так ?

Я тоже думаю что так.

Пусть известно, что разделителем строк выступает либо символ #13, либо #10, либо их комбинация в любой последовательности.

Тогда вызов StringList.Text := t решает задачу


Krants   (2006-11-30 13:40:00) [4]


> Сергей М. ©   (30.11.06 12:59) [5]
> А чем TStringList не угодил ?
>
> Он все это умеет делать, автоматически и в наилучшем виде ..


можно примерчик... каким образом он может разбивать на подстроки и копировать с буфура?


Сергей М.   (2006-11-30 13:18:00) [5]

"Закер"

Закер = замученный проблемами хакер)


Krants   (2006-11-30 13:16:00) [6]


> Anatoly Podgoretsky ©   (30.11.06 13:11) [8]


А кто такой "Закер"?


Anatoly Podgoretsky   (2006-11-30 13:11:00) [7]

> Krants  (30.11.2006 12:56:04)  [4]

Ну вот из одной крайности в другую. Закер что ли?


Сергей М.   (2006-11-30 13:09:00) [8]


> TStringList вроде так не может


Что он не может-то ? Разбить исх.строку, содержащую некие заранее известные символы-разделители, на подстроки ?
Да запросто !)


Krants   (2006-11-30 13:05:00) [9]

этот код для удобного получения индексов, которые могут браться как из текстовых редакторов так и из таблиц экселя и прочих.

TStringList вроде так не может...


Сергей М.   (2006-11-30 12:59:00) [10]

А чем TStringList не угодил ?

Он все это умеет делать, автоматически и в наилучшем виде ..


Krants   (2006-11-30 12:56:00) [11]

Сергей М. ©
  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:54:00) [12]

А, пардон ...

Я не обратил внимания на

t:=PChar(GlobalLock(h))+char(13);

Лучше бы, конечно, было сделать

t:=StrPas(GlobalLock(h)) + #13;

Здесь - явноекопирование.

А в каков формат имеют текстовые данные в буфере ?

Приведи образец ...


Сергей М.   (2006-11-30 12:48:00) [13]

Не знаю уж, где тут фигурирует "таблица", но GlobalUnlock ты рановато вызываешь : сначала д.б. упомянутый цикл и только потомвызов GlobalUnlock


Krants   (2006-11-30 11:31:00) [14]

При копировании таблицы, можно и текста копируется только 44 или 37 записей. Почему так, не понимаю. Может кто-то сталкивался с похожей проблемой?


Наверх

Титульная страница Поиск, карта сайта Написать письмо