Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 21.06.2015, 22:22
pochemuch pochemuch вне форума
Прохожий
 
Регистрация: 10.06.2015
Сообщения: 12
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию формирование структуры документа

Здрасте. У меня такая беда: не знаю, как сделать так, что бы при добавлении строки из таблицы 1 строке присваился номер 1, добавляю из другой таблицы значение 1.1, из второй же таблицы 1.2, из третьей таблицы 1.1.1, 1.2.1...т.е. пунты и подпункты нужно формировать. как это сделать можно? вставляю в дбгрид, значения другого дб грида
Ответить с цитированием
  #2  
Старый 21.06.2015, 23:49
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Я из этой абракадабры ничего не понял.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #3  
Старый 22.06.2015, 00:05
pochemuch pochemuch вне форума
Прохожий
 
Регистрация: 10.06.2015
Сообщения: 12
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

есть 3 таблицы: а,б и ц.
вставляем одно значение из таблицы а. получаем пункт а.
вставляем одно значение из таблицы б. получаем подпункт б. т.е. а.б.
из третьей таблицы вставляется 2 значения, имеем: а.б.ц.ц.
Ответить с цитированием
  #4  
Старый 22.06.2015, 00:06
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Вместо DBGrid используйте для наполнения StringGrid, тогда в завершении забивки можно будет пробежаться по полям и произвести автонумерацию на ваших условиях и без последствий для содержимого таблиц
Ответить с цитированием
  #5  
Старый 22.06.2015, 00:09
pochemuch pochemuch вне форума
Прохожий
 
Регистрация: 10.06.2015
Сообщения: 12
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Alegun
Вместо DBGrid используйте для наполнения StringGrid, тогда в завершении забивки можно будет пробежаться по полям и произвести автонумерацию на ваших условиях и без последствий для содержимого таблиц

таблица в итоге может быть очень большой и нужно автоматически и при помощи именно дб грида
Ответить с цитированием
  #6  
Старый 22.06.2015, 00:13
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

DBGrid является средством визуализации содержимого полей таблицы\результата SQL-запроса, при изменении содержимого ячеек меняется и значение в источнике, что не всегда айс
Ответить с цитированием
  #7  
Старый 22.06.2015, 00:17
pochemuch pochemuch вне форума
Прохожий
 
Регистрация: 10.06.2015
Сообщения: 12
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

получается, что я эту таблицу потом вывожу в ворд, как отчет, здесь это как-то задать можно?
процедура вывода:
Код:
procedure TForm1.N2Click(Sender: TObject);
const//зазадается рапределение данных на листе
  wdAlignParagraphCenter = 1;
  wdAlignParagraphLeft = 0;
  wdAlignParagraphRight = 2;

  wdLineStyleSingle = 1;
var
sd: TSaveDialog;
  wdApp, wdDoc, wdRng, wdTable : OLEVariant;
i, j, Res : Integer;
  D : TDateTime;
  Bm : TBookMark;

begin
 Sd := SaveDialog1;
{Сохранение таблицы в документ, запрос разрешения для сохранения}
  if Sd.InitialDir = '' then Sd.InitialDir := ExtractFilePath( ParamStr(0) );
  if not Sd.Execute then Exit;
  if FileExists(Sd.FileName) then begin
    Res := MessageBox(0, Файл с данным именем уже существует. Перазаписать?'
      , Внимание! ', MB_YESNO + MB_ICONQUESTION + MB_APPLMODAL);
    if Res <> IDYES then Exit;
  end;

  // запуск MS Word.
  try
  wdApp:=CreateOleObject('word.Application') ;
  except
    MessageBox(0, ' Не удалось запустить MS Word. Действие отменено..'
      ,’внимание!', MB_OK + MB_ICONERROR + MB_APPLMODAL);
    Exit;
  end;

  //окно MS Word. видимо.
  wdApp.Visible := True;
  //создание нового документа.
  wdDoc := wdApp.Documents.Add;
  wdApp.ScreenUpdating := False;
  try
    wdRng := wdDoc.Content; // Диапазон, охватывающий всё содержимое документа.

    //Заголовок отчета

    wdRng.InsertAfter(План финансово-хозяйственной деятльености' '#13#10);
    //выравнивание по центру
    wdRng.ParagraphFormat.Alignment := wdAlignParagraphCenter;
    //параметры шрифта.
    wdRng.Font.Name := 'Times New Roman';
    wdRng.Font.Bold := True;
    wdRng.Font.Size := 12;

    //диапазон нового параграфа непосредственно за текущим диапазоном.
    wdRng.Start := wdRng.End;
    wdRng.InsertAfter(#13#10);
    D := Now;
    wdRng.InsertAfter('дата: ' + FormatDateTime('dd.mm.yyyy', D) + #13#10);
    wdRng.InsertAfter('время: ' + FormatDateTime('hh:nn:ss', D) + #13#10);
    // Сброс параметров параграфа.
    wdRng.ParagraphFormat.Reset;
    wdRng.InsertAfter('утверждаю '+ #13#10 );
    wdRng.InsertAfter('главный бухгалтер' + #13#10);
    wdRng.InsertAfter('Начальник преприятия + #13#10);
       wdRng.ParagraphFormat.Alignment := wdAlignParagraphRight;
       wdRng.ParagraphFormat.Reset;
    //выравнивание по левому краю.
    wdRng.ParagraphFormat.Alignment := wdAlignParagraphLeft;


    // Параметры шрифта.
    wdRng.Font.Reset;
    wdRng.Font.Size := 12;
    wdRng.Font.Bold := True;

    // Заголовок таблицы.

    wdRng.Start := wdRng.End;
    wdRng.InsertAfter(('Таблица '#13#10);
    wdRng.ParagraphFormat.Reset;
    wdRng.Font.Reset;
    wdRng.Font.Size := 12;
    wdRng.Font.Bold := False;

    // Таблица.

  if not ADOTable1.Active then ADOTable1.Open;

    wdRng.Start := wdRng.End;
    // Добавляем таблицу MS Word. создаём таблицу с двумя строками.
    wdTable := wdDoc.Tables.Add(wdRng.Characters.Last, 2, ADOTable1.Fields.Count);
    // Параметры линий таблицы
    wdTable.Borders.InsideLineStyle := wdLineStyleSingle;
    wdTable.Borders.OutsideLineStyle := wdLineStyleSingle;
    // Сброс параметров параграфа.
    wdRng.ParagraphFormat.Reset;
    // Выравнивание всей таблицы - по левому краю
    wdRng.ParagraphFormat.Alignment := wdAlignParagraphLeft;
    // Оформление шапки
    wdRng := wdTable.Rows.Item(1).Range; // Диапазон первой строки.
    wdRng.ParagraphFormat.Alignment := wdAlignParagraphCenter;
    wdRng.Font.Size := 10;
    wdRng.Font.Bold := True;
    // Оформление первой строки данных - вторая строка в таблице
    // При добавлении следующих строк, их оформление будет копироваться с этой строки.	
    wdRng := wdTable.Rows.Item(2).Range; //Äèàïàçîí âòîðîé ñòðîêè.
    wdRng.ParagraphFormat.Alignment := wdAlignParagraphLeft;
    wdRng.Font.Size := 10;
    wdRng.Font.Bold := False;

    //шапка таблицы.
    for i := 0 to ADOTable1.Fields.Count - 1 do
      wdTable.Cell(1, i + 1).Range.Text := ADOTable1.Fields[i].DisplayName;
    //данные таблиц.
   ADOTable1.DisableControls;
    Bm := ADOTable1.GetBookMark;
    ADOTable1.First;
    i := 1; //текущая строка в MS Word.
    while not ADOTable1.Eof do begin
      Inc(i);
      // Если требуется, добавляем новую строку в конец таблицы.
      if i > 2 then wdTable.Rows.Add;
      // Записываем данные в строку таблицы MS Word.
      for j := 0 to ADOTable1.Fields.Count - 1 do
        wdTable.Cell(i, j + 1).Range.Text := ADOTable1.Fields[j].AsString;
      ADOTable1.Next;
    end;
    ADOTable1.GotoBookMark(Bm);
    ADOTable1.EnableControls;

      finally
    // Включение перерисовки окна MS Word.
    wdApp.ScreenUpdating := True;

Последний раз редактировалось pochemuch, 22.06.2015 в 00:26.
Ответить с цитированием
  #8  
Старый 22.06.2015, 00:20
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Вам необходимо формировать вордовский документ на основе данных из таблиц, а не данные подгонять под шаблон, нумерацию пунктов\подпунктов лучше производить там

З.Ы. Вот пример автонумерации ячеек вордовской таблички нарисовался из drkb
Вложения
Тип файла: rar wrd.rar (2.0 Кбайт, 4 просмотров)

Последний раз редактировалось Alegun, 22.06.2015 в 01:10.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:56.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025