Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
TreeView
|
|||
|---|---|---|---|
|
#18+
Всем привет! Появилась необходимость распечатать TreeView. Может кто-что посоветует? Компоненту какую или идею как правильно и красиво это реализовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2003, 19:55 |
|
||
|
TreeView
|
|||
|---|---|---|---|
|
#18+
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; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2003, 20:48 |
|
||
|
TreeView
|
|||
|---|---|---|---|
|
#18+
Че-то не то. Пустой лист фигарит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2003, 12:57 |
|
||
|
TreeView
|
|||
|---|---|---|---|
|
#18+
List.LoadFromStream( Stream ) Не грузит. В чем может быть проблема? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2003, 15:22 |
|
||
|
TreeView
|
|||
|---|---|---|---|
|
#18+
Ну это да. LoadFromFile - работает. НО, в принципе хотелось получить распечатку со всеми линиями и боксами. Но все равно за идею пасибки. Может еще у кого идеи будут? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2003, 10:40 |
|
||
|
TreeView
|
|||
|---|---|---|---|
|
#18+
Вместо того длиннющего исходника вот и всего-то: 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 ----- Прежде чем сказать "Невозможно", подумай, прав ли ты?! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2003, 08:31 |
|
||
|
|

start [/forum/topic.php?fid=58&fpage=1977&tid=2115648]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
38ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 245ms |
| total: | 359ms |

| 0 / 0 |
