На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! user posted image
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.

Соблюдайте общие правила форума

Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как запустить программу/файл? (и дождаться ее завершения)
5. Как перехватить API-функции, поставить hook? (перехват сообщений от мыши, клавиатуры - внедрение в удаленное адресное прстранство)
... (продолжение следует) ...

Внимание:
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки - бан.
Мат в разделе - бан на три месяца...

Полезные ссылки:
user posted image MSDN Library user posted image FAQ раздела user posted image Поиск по разделу user posted image Как правильно задавать вопросы


Выразить свое отношение к модераторам раздела можно здесь: user posted image Rouse_, user posted image Krid

Модераторы: Rouse_, Krid
  
> Вставка таблицы в Ворд , Через буфер обмена
    А как в буфер отмена вставить некотрые данные , которые бы потом Word считал бы таблицей .Те при вставки в Ворд вставлялася таблица.

    В пониманимании офиса талица это форматированный текст , разделенныый #9 и 'прямоугольный'

    С каим параметром надо обратится к SetClipboardData(тип_вставляемого,ссылка_на_вставляемое);

    вот пример пихания таблицы в буфер обмена на которую реагируе Ексель.

    =========================
    procedure TForm1.Button2Click(Sender: TObject);
    var
    hData: HGlobal;
    pData: pointer;
    Len: LongInt;
    sss:string;

    begin
    zzz:=1; //Фрмат 1-текст
    sss:='1_1'#9'1_2'#13#10'2_1'#9'2_2';
    OpenClipboard(Application.Handle);
    Len:=length( sss);

    hData:=GlobalAlloc(GMEM_MOVEABLE or GMEM_DDESHARE, Len);
    pData:=GlobalLock(hData);
    Move(PChar(sss)^, pData^, Len);
    EmptyClipboard;
    SetClipboardData( zzz,hData);
    GlobalUnlock(hData);
    CloseClipboard;
    end;
    ====================

    После этого можно запустить ексель и вставить , и вот чего вставится
    -----------------
    1_1 | 1_2 |
    ------------------
    2_1 | 2_2 |
    -----------------

    Чуствую надо парамтр zzz (SetClipboardData) поменять , а на что не знаю.

    А хочется вставлять именно в ворд , и чтоб он считал что в буфере обмена таблица.
    Вот... Есть какиенибудь идеи ?
      Ну например:
      ExpandedWrap disabled
        Procedure CopyStringGridToClipBoard(StringGrid: TStringGrid);
        { Процедура копирует TStringGrid, переданный в качестве параметра в буфер обмена }
        Var S: String;
            t,r: Integer;
        Begin
         S:='';
         With StringGrid Do For t:=0 to RowCount-1 Do
          Begin
           For r:=0 to ColCount-1 Do IF r = ColCount-1 then S:=S+Cells[r,t] else S:=S+Cells[r,t]+#9;
           S:=S+#13#10;
          End; {For}
          { Включаем русский язык на время копирования }
         ActivateKeyboardLayout(LoadKeyboardLayout('00000419',0),0);
         ClipBoard.AsText:=S;
        End;
        Думаю что лучше не через буфер это передавать, а работать с объектом ворд напрямую.
          var
          APP : variant;

          begin


          APP:= CreateOleObject('Word.Application');
          APP.Visible := true;
          APP.Documents.Add;
          APP.Selection.TypeText('Hello'#13#10'Hello');
          APP.Selection.TypeText('Hello'#13#10'Hello');
          APP.Selection.TypeText('Hello'#13#10'Hello');
          APP.Selection.TypeParagraph;
          APP.Selection.TypeText('Hello1310Hello');
          //APP.Selection.Paste;
          А вот так я хочу вставить таблицу
          тока сначала надоеё в буфер обмена .

          end;
            Diamond, лучше то, лучше это. Все молчат как рыбы, как только запостишь пример, начинают лучше то лучше это. Вот бы и дал пример как
            Цитата
            Diamond, 14.01.04, 10:36
            а работать с объектом ворд напрямую

            ?
              Цитата Song @ 14.01.04, 11:46
              Вот бы и дал пример как.

              Ну что ж, тогда я дам пример. Насколько я понимаю, автору важно вставить таблицу в Word, а не важно вставить её именно из буфера обмена или откуда-нибудь ещё, тогда примите обработчик:
              ExpandedWrap disabled
                procedure TForm1.Button2Click(Sender: TObject);
                var
                App: OLEVariant;
                i:integer;
                arange, tabl, tabls, doc: variant;
                begin
                APP:= CreateOleObject('Word.Application');
                APP.Visible := true;
                //берём указатель на документ
                doc:=APP.Documents.Add;
                //всё выделяем в документе
                ARange:=Doc.Range(EmptyParam,EmptyParam);
                //получаем из всего массив таблиц
                tabls:=ARange.Tables;
                // добавляем новую таблицу размером 2 на 4
                tabl:=tabls.Add(arange,2,4);
                  // в цикле задаем значение ячеек
                  for i := 1 to 2 do
                    tabl.Cell(i,1).Range.Text := 'Символы строки'+inttostr(i);
                end;
              Сообщение отредактировано: startinger -
              1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script execution time: 0,0517 ]   [ 15 queries used ]   [ Generated: 20.05.24, 00:45 GMT ]