Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TreeView / 9 сообщений из 9, страница 1 из 1
26.11.2003, 19:55
    #32336005
Papka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TreeView
Всем привет!

Появилась необходимость распечатать TreeView. Может кто-что посоветует?
Компоненту какую или идею как правильно и красиво это реализовать.
...
Рейтинг: 0 / 0
26.11.2003, 20:48
    #32336033
Hammer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TreeView
procedure PrintTreeView;
var
Stream: TMemoryStream;
List: TStrings;
Font: TFont;
begin
Stream := TMemoryStream.Create;
try
TreeView.SaveToStream( Stream );
List := TStringList.Create;
try
List.LoadFromStream( Stream );
PrintStrings( List, Font, 'Title' );
finally
List.Free;
end;
finally
Stream.Free;
end;
end;

procedure PrintStrings(S: TStrings; Font: TFont; Title: string);
var
LeftMargin, TopMargin, LineCoord, LineOnPage, LinesOnDoc,
CurrentLine, TextHeight, LinesPerPage, LineInterval: integer;

procedure StartDoc;
begin
LinesOnDoc := S.Count;
Printer.Canvas.Font.Assign(Font);
Printer.Canvas.TextOut(0, 0, ' ');
LeftMargin := (Printer.Canvas.Font.PixelsPerInch) div 2;
TopMargin := (Printer.Canvas.Font.PixelsPerInch) div 2;
TextHeight := Abs(Printer.Canvas.Font.Height);
LineInterval := TextHeight + (TextHeight div 2);
LinesPerPage := (Printer.PageHeight - TopMargin) div LineInterval;
CurrentLine := 0;
end;

function MorePages:boolean;
begin
Result := (CurrentLine < LinesOnDoc) and
not Printer.Aborted;
end;

procedure StartPage;
begin
LineOnPage := 0;
LineCoord := TopMargin;
end;

procedure NextPage;
begin
if MorePages then Printer.NewPage;
end;

function MoreLines:boolean;
begin
Result := (LineOnPage < LinesPerPage) and
(LineOnPage < LinesOnDoc) and
not Printer.Aborted;
end;

procedure NextLine;
begin
Inc(LineOnPage);
Inc(LineCoord, LineInterval);
Inc(CurrentLine);
end;

procedure PrintLine;
begin
Printer.Canvas.TextOut(LeftMargin, LineCoord,
S.Strings[CurrentLine]);
end;

begin
Printer.Title := Title;
Printer.BeginDoc;
StartDoc;
while MorePages do begin
StartPage;
while MoreLines do begin
PrintLine;
NextLine;
Application.ProcessMessages;
end;
NextPage;
end;
Printer.EndDoc;
end;

...
Рейтинг: 0 / 0
27.11.2003, 10:04
    #32336320
Papka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TreeView
Попробоваем. Пасибки.
...
Рейтинг: 0 / 0
27.11.2003, 12:57
    #32336613
Papka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TreeView
Че-то не то. Пустой лист фигарит.
...
Рейтинг: 0 / 0
27.11.2003, 15:22
    #32336872
Papka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TreeView
List.LoadFromStream( Stream )

Не грузит. В чем может быть проблема?
...
Рейтинг: 0 / 0
27.11.2003, 19:19
    #32337183
Hammer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TreeView
Могет быть. Ты просил идею - вот тебе идея.


...
Рейтинг: 0 / 0
28.11.2003, 10:40
    #32337488
Papka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TreeView
Ну это да. LoadFromFile - работает. НО, в принципе хотелось получить распечатку со всеми линиями и боксами. Но все равно за идею пасибки.
Может еще у кого идеи будут?
...
Рейтинг: 0 / 0
01.12.2003, 08:31
    #32338928
Song
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TreeView
Вместо того длиннющего исходника вот и всего-то:

procedure TFindForm.NClick(Sender: TObject);
Var ff: TextFile;
Procedure PrintNode(Node: TTreeNode);
Var t: Integer;
Begin
WriteLn(ff,StringOfChar(#9,Node.Level-Tree.Selected.Level)+Node.Text);
With Tree Do For t:=0 to Node.Count-1 Do PrintNode(Node[t]);
End;
begin
AssignPrn(ff);
ReWrite(ff);
try
PrintNode(Tree.Selected);
finally
CloseFile(ff);
end;
end;

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

-----
Прежде чем сказать "Невозможно", подумай, прав ли ты?!
...
Рейтинг: 0 / 0
02.12.2003, 12:57
    #32340591
Papka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TreeView
Это-то понятно. Примеру хоца очень.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TreeView / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]