Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.10.15;
Скачать: [xml.tar.bz2];

Вниз

Что использовать?   Найти похожие ветки 

 
webpauk   (2006-09-27 13:21) [0]

У меня необходимо выводить отчет.
Каждая из строк состоит из 3 частей: свойство, значение, примечание.
Каждая из частей может выводится разным шрифтом, а нажав примечание - нужно открывать подотчет.
Отчет нужно распечатывать.
Какой компонент лучше использовать?

webbrowser - не хотелось бы.
Richedit - трудно добавлять форматированные разным шрифтом строки.


 
Eraser ©   (2006-09-27 13:25) [1]

> Richedit - трудно добавлять форматированные разным шрифтом
> строки.

и в чем же трудности? :)


 
webpauk   (2006-09-27 13:26) [2]

Добавь такую строку


 
clickmaker ©   (2006-09-27 13:29) [3]


> Добавь такую строку

RE.Lines.Add("Добавь такую строку");
RE.SelStart := 0;
RE.SelLength := 3;
RE.SelAttributes.Style := [fsBold];
RE.SelStart := 4;
RE.SelLength := 7
RE.SelAttributes.Style := [fsUnderline];
RE.SelStart := 8;
RE.SelLength := 9;
RE.SelAttributes.Style := [fsItalic];

сложно?


 
webpauk   (2006-09-27 13:30) [4]

нет
добавь 1000 строк...


 
clickmaker ©   (2006-09-27 13:34) [5]


> [4] webpauk   (27.09.06 13:30)

procedure FormatLine(ASelStart: integer; ASelLen: integer; AFmt: TFontStyles);
begin
  RE.SelStart := ASelStart;
  RE.SelLength := ASelLen;
  RE.SelAttributes := AFmt;
end;

тем более, что "Каждая из строк состоит из 3 частей: свойство, значение, примечание" - то есть формализация налицо.


 
Eraser ©   (2006-09-27 13:40) [6]

> [2] webpauk   (27.09.06 13:26)


> [3] clickmaker ©   (27.09.06 13:29)

обогнал )


 
webpauk   (2006-09-27 13:44) [7]

ASelStart:=?
для каждой строки <>0


 
clickmaker ©   (2006-09-27 13:44) [8]

т.е. если окончательно все формализовать, например так:
Property: Value (Comment)

то в цикле, парся разделители, можно легко отформатировать строку


 
webpauk   (2006-09-27 13:49) [9]

и как организовать гиперссылки (для перехода к подотчету)?


 
webpauk   (2006-09-27 13:54) [10]


> clickmaker ©   (27.09.06 13:34) [5]

как определить ASelStart для каждой новой строки?


 
clickmaker ©   (2006-09-27 13:57) [11]

OnMouseDown, EM_CHARFROMPOS, EM_LINEFROMCHAR и т.д.


 
Eraser ©   (2006-09-27 14:15) [12]

> [9] webpauk   (27.09.06 13:49)
> и как организовать гиперссылки (для перехода к подотчету)
> ?

лучше сразу используй TJvRichEdit из JEDI VCL, там такие фитчи, вроде гиперссылок уже организованы )


 
clickmaker ©   (2006-09-27 14:46) [13]


> как определить ASelStart для каждой новой строки?

EM_LINEINDEX


> TJvRichEdit из JEDI VCL

да, но там она должна иметь соотв. формат. file://, http:// и т.д.


 
webpauk   (2006-09-27 15:14) [14]

function GetStart(fRich: TRichEdit): Integer;
begin
 Result:=fRich.Perform(EM_LINEINDEX, fRich.Lines.Count, 0);
end;

procedure RichAdd(fProperty: String; fFont1: TFont; fValue: String; fFont2: TFont; fHyperLink: String);
var
 fSelStart: Integer;
begin
 fSelStart:=GetStart(RE);

 RE.Lines.Add(fProperty+fValue+"  "+fHyperLink);

 RE.SelStart:=fSelStart;
 RE.SelLength:=Length(fProperty);
 RE.SelAttributes.Assign(fFont1);

 RE.SelStart:=fSelStart+Length(fProperty);
 RE.SelLength:=Length(fValue);
 RE.SelAttributes.Assign(fFont2);

 RE.SelStart:=fSelStart+Length(fProperty)+Length(fValue);
 RE.SelLength:=Length(fHyperLink);
 RE.SelAttributes.Assign(f5);
end;


вроде работает


 
Eraser ©   (2006-09-27 16:47) [15]

> [13] clickmaker ©   (27.09.06 14:46)


> да, но там она должна иметь соотв. формат. file://, http:
> // и т.д.

не обязательно.

выделяем текс, потом нажимаем кнопку, собработчиком
procedure TForm1.Button1Click(Sender: TObject);
begin
 JvRichEdit1.SelAttributes.Link := True;
end;


НО,
Text that represents a link is underlined and colored blue. If the user clicks on the link text an OnURLClick event is fired.
Note that the link is not persistent, ie. if you save the text to a (RTF) file the links will not be saved.

You could also insert a link by inserting RTF codes. Such a link will also not be saved for rich edit dll version 3.0 and below, but it will be saved for rich edit dll version 4.0 and up.

 const
   cHyperlink = "{\rtf1{\field {\*\fldinst {HYPERLINK "%s" }}{\fldrslt {\ul %s }}}}";
 var
   S: string;
   Stream: TStream;
 begin
   S := Format(cHyperLink, ["http://jvcl.sourceforge.net", "JVCL"]);

   Stream := TMemoryStream.Create;
   try
     Stream.Write(PChar(S)^, Length(S));
     Stream.Position := 0;

     JvRichEdit1.StreamFormat := sfRichText;
     JvRichEdit1.StreamMode := [smSelection, smPlainRtf];
     JvRichEdit1.Lines.LoadFromStream(Stream);
     { Don"t forget to clear the smSelection flag: normally we want to save
        the whole text, and such a flag is easily forgotten }
     JvRichEdit1.StreamMode := [];
   finally
     Stream.Free;
   end;
 end;

(c) JVCL HELP.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.10.15;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.046 c
15-1158963826
Axis_of_Evil
2006-09-23 02:23
2006.10.15
а вы говорили, медвед не вырвется за пределы тырнета


2-1159698030
redlord
2006-10-01 14:20
2006.10.15
listbox выводить текст разным цветом


6-1148208866
ChainikDenis
2006-05-21 14:54
2006.10.15
Тупой вопрос по UDP


2-1159692706
Fantasy
2006-10-01 12:51
2006.10.15
Message


15-1159036017
Andy BitOff
2006-09-23 22:26
2006.10.15
Срочно!!!!! Ссылку на страничку с описанием как ...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский