imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 03.11.2004, 01:11     # 1
LAndrew2
Full Member
 
Аватар для LAndrew2
 
Регистрация: 15.11.2002
Адрес: Moscow
Сообщения: 834

LAndrew2 Луч света в тёмном царствеLAndrew2 Луч света в тёмном царствеLAndrew2 Луч света в тёмном царствеLAndrew2 Луч света в тёмном царствеLAndrew2 Луч света в тёмном царстве
Excel + буфер обмена

Необходимо написать на Delphi небольшую программку, которая могла бы помещать в буфер обмена данные так, как будто они были скопированы туда из двух (трех, четырех и т.д.) соседних ячеек Excel'я
/excel.gif/
после вставки содержимого из буфера (скопированного из Excel) в другую программу - получаем следующее:
/progok.gif/
т.е. программа понимает, что текст скопирован из разных ячеек и раскидывает текст в разные поля
когда же моя программа генерирует текст и помещает его в буфер, то после вставки имеем следующее:
/prog.gif/
т.е. программа не раскидала текст по полям

после разбора содержимого буфера (скопированного из Excel) обнаружил, что символ разделитель ячеек - Tab - #9, а в конец строки добавляется символ переноса строки - #10#13... аналогично формирую свою строку -
Код:
'text1'+#9+'text2'+#10#13
но это почему-то не помогает...

может кто помочь?
Изображения
Тип файла: gif excel.gif (1.6 Кбайт, 4 просмотров - Кто скачивал? )
Тип файла: gif progok.gif (1.6 Кбайт, 4 просмотров - Кто скачивал? )
Тип файла: gif prog.gif (1.5 Кбайт, 4 просмотров - Кто скачивал? )
LAndrew2 вне форума  
Старый 03.11.2004, 11:54     # 2
/7y3uK
Advanced Member
 
Аватар для /7y3uK
 
Регистрация: 09.03.2004
Адрес: толстозадая Москва
Сообщения: 498

/7y3uK Реально крут(а)/7y3uK Реально крут(а)/7y3uK Реально крут(а)/7y3uK Реально крут(а)
Опиши какими символьными типами ты пользуешься для хранения-передачи данных, и кусок кода покажи, где у тебя не получается выцепить данные правильно. ИМХО тут в типе STRING заморочка.
/7y3uK вне форума  
Старый 03.11.2004, 15:21     # 3
ЧересЧеловек
Guest
 
Сообщения: n/a

>'text1'+#9+'text2'+#10#13

А попробуй вот так, если я не туплю, конечно.

'text1'+'#9'+'text2'+'#10#13'

Ну а у меня сейчас вот так получилось в С++ Билдер 5 и вставлял в офис2003

Edit1->Text = Edit2->Text+" "+Edit3->Text; // в ковычках 5 пробелов
Edit1->SetFocus();
Edit1->CopyToClipboard();

Ну а в Делфи просто заменяешь -> на .
" на '
 
Старый 03.11.2004, 18:34     # 4
LAndrew2
Full Member
 
Аватар для LAndrew2
 
Регистрация: 15.11.2002
Адрес: Moscow
Сообщения: 834

LAndrew2 Луч света в тёмном царствеLAndrew2 Луч света в тёмном царствеLAndrew2 Луч света в тёмном царствеLAndrew2 Луч света в тёмном царствеLAndrew2 Луч света в тёмном царстве
Цитата:
Опиши какими символьными типами ты пользуешься для хранения-передачи данных, и кусок кода покажи, где у тебя не получается выцепить данные правильно. ИМХО тут в типе STRING заморочка.
в буфер я копирую текст так:
Код:
Clipboard.SetTextBuf(PChar(  eBuilding.Text+#9+#9+AnsiUpperCase(cbStreetsList.Text)+#9+#9+AnsiUpperCase(cbCitiesList.Text)+#9+#9+eIndex.Text+#10#13))
соответвственно, все типы - String.
по два #9 - это так и надо, ибо надо вставлять данные в поля через 2


для проверки того, как передаются поля из Excel'a в буфер и из моей проги, использовал следующий код:
Код:
procedure TZipForm.Button2Click(Sender: TObject);
var
  MyHandle: THandle;
  TextPtr: PChar;
  MyString,S: string;
  i:Integer;
begin
  ClipBoard.Open;
try
  MyHandle := Clipboard.GetAsHandle(CF_TEXT);
  TextPtr := GlobalLock(MyHandle);
  MyString := StrPas(TextPtr);
  GlobalUnlock(MyHandle);
finally
  Clipboard.Close;
end;

 if Clipboard.HasFormat(CF_TEXT) then
  S:='';
  lFullStreet.Caption:=MyString ;
  for i:=1 to length(MyString)
  do S:=S+IntToStr(Ord(MyString[i]))+' ';
 lFullStreet.Caption:=S;

end;
анализирует содержимое буфера по нажатию клавиши, в результате в строку S передается через пробел ASCII коды того, что есть в буфере (может проблема в том, что текст в буфере НЕ надо принимать за текст?). анализ этого показывает, что моя программа и Excel передают данные в одинаковом формате... но вот другая прога (куда их вставляют) понимает их по-разному...

Цитата:
ЧересЧеловек:
'text1'+'#9'+'text2'+'#10#13'
тогда просто в буфере будет строка 'text1#9text2#10#13'

Цитата:
ЧересЧеловек:
и вставлял в офис2003
мне нужно не в офис вставлять, а в другую прогу! (офис сам пробелы или Tab заменяет на некий разделитель ячеек), мне нужно сделать такое содержимое буфера, как будто эти данные были переданы из офиса!
LAndrew2 вне форума  
Старый 03.11.2004, 21:42     # 5
/7y3uK
Advanced Member
 
Аватар для /7y3uK
 
Регистрация: 09.03.2004
Адрес: толстозадая Москва
Сообщения: 498

/7y3uK Реально крут(а)/7y3uK Реально крут(а)/7y3uK Реально крут(а)/7y3uK Реально крут(а)
а не пробовал забирать данные вот так: Clipboard.AsText; ? А проверочку содержимого так и так нужно делать. Вроде PChar (указатель с нулем вконце) не должон влиять на получаемы/запихиваемый в буфер текст.
/7y3uK вне форума  
Старый 03.11.2004, 22:04     # 6
LAndrew2
Full Member
 
Аватар для LAndrew2
 
Регистрация: 15.11.2002
Адрес: Moscow
Сообщения: 834

LAndrew2 Луч света в тёмном царствеLAndrew2 Луч света в тёмном царствеLAndrew2 Луч света в тёмном царствеLAndrew2 Луч света в тёмном царствеLAndrew2 Луч света в тёмном царстве
Цитата:
/7y3uK:
а не пробовал забирать данные вот так: Clipboard.AsText;
пробовал - то же самое...
LAndrew2 вне форума  
Старый 05.11.2004, 11:02     # 7
ЧересЧеловек
Guest
 
Сообщения: n/a

Да, фигнню я напорол с #9. Невыспался был. Звиняй.

>может проблема в том, что текст в буфере НЕ надо принимать за текст?

Но все таки Ехсель должен что то пихать в буфер помимо текста. Ворд по Ехселевскому буферу сразу таблицу рисует.
У класса Clipbord помимо функции GetTextBuf (по сути, то что у тебя), есть и GetComponent.
По GetAsHandle(CF_TEXT) ты выдергиваешь только текст (только, то что в буфере отформатировано как текст), но там одновремено, может быть и CF_BITMAP и CF_METAFILEPICT и CF_COMPONENT и др.
А как сделать я не знаю. Это были так мысли вслух, чисто: "Я тАк думаю"(с)
 


Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 23:30.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.