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

Вниз

Доступ к закладкам в .rtf   Найти похожие ветки 

 
Dell3r ©   (2006-08-16 11:20) [0]

Уважаемые мастера, подскажите есть ли возможность обращаться к закладкам документа? Документ в формате rtf отображается в RichEdit"e.
Другими словами делаю структуру документа и по щелчку в TreeView в RichEdit"e документ должен перелистнуть на определенный заголовок.


 
clickmaker ©   (2006-08-16 11:58) [1]


>  делаю структуру документа и по щелчку в TreeView

как делаешь и как она в тривью попадает?


 
Dell3r ©   (2006-08-16 12:17) [2]

Делаю пока через обычный поиск текста (заголовка) Потом прокручиваю Rich так, чтобы заголовок был первой строчкой

var
Find:String;
ypos:inetger;
Begin
Find:=TreeView1.Selected.Text;
//Тут собственно сам поиск.
If P=0 then
SendMessage(RichEdit1.Handle,EM_LINESCROLL,0,0) else
begin
 RichEdit1.SelStart:=P-Buff;
 ypos:= SendMessage(RichEdit1.Handle,EM_LINEFROMCHAR,RichEdit1.SelStart,0);
 SendMessage(RichEdit1.Handle,EM_LINESCROLL,0,-ypos);
 ypos:= SendMessage(RichEdit1.Handle,EM_LINEFROMCHAR,RichEdit1.SelStart,0);
 SendMessage(RichEdit1.Handle,EM_LINESCROLL,0, ypos);

Код пишу по памяти. Иногда у меня ypos увеличивается на 1. Поэтому строка сбивается. Еще боюсь, что когда нибудь часть текста будет соответствовать названию заголовка и неизвестно как себя поведет система. Поэтому хотелось бы использвать закладки.


 
Dell3r ©   (2006-08-16 12:19) [3]

В тревью TreeView.LoadFromFile(заранее подготовленный файл);


 
clickmaker ©   (2006-08-16 12:33) [4]


> Dell3r ©   (16.08.06 12:19) [3]

не уверен что в ричэдит есть подобная функциональность. Разве что недокументированная..


 
Dell3r ©   (2006-08-16 12:42) [5]

Было бы замечательно если бы в Ворде сделать закладки, а потом в Delphi обращаться к ним. Так есть идеи?


 
clickmaker ©   (2006-08-16 12:55) [6]


> Dell3r ©   (16.08.06 12:42) [5]

идеи? изучить формат РТФ на предмет как там хранятся закладки


 
Dell3r ©   (2006-08-16 12:58) [7]

Изучил. Только вот как к ним обращаться?.
Получается, что никому никогда не приходилось сталкиваться с навигацией в документе?


 
clickmaker ©   (2006-08-16 13:23) [8]


> Изучил

ну и? значит ты можешь определить номер строки, где у тебя закладка?


 
Dell3r ©   (2006-08-16 13:28) [9]

Нет. там при просмотре в мемо все символы непонятно на какой строке. Ты же видел РТФ в текстовом варианте? Посему таким способом не получиться


 
Ketmar ©   (2006-08-16 13:49) [10]

нет в RichEdit такого. надо своё писать.


 
clickmaker ©   (2006-08-16 14:55) [11]

набросал на коленке за 20 минут. Ф-ия возвращает номер строки, на которой закладка.

function LocateBookmark(const FileName, BMName: string): integer;
var
 hFile: THandle;
 LSize, BytesRead, i: Cardinal;
 Buff: PByte;
 P: PByte;
 LineCount: integer;
 BMTag, ParTag, PageTag: string;
 StartCountLines: boolean;
begin
 Result := -1;
 BMTag := "bkmkstart";
 ParTag := #13#10"\par";
 PageTag := " \page";
 hFile := CreateFile(PChar(FileName), GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE,
   nil, OPEN_EXISTING, 0, 0);
 if (hFile <> INVALID_HANDLE_VALUE) then begin

   LSize := GetFileSize(hFile, nil);
   Buff := PByte(AllocMem(LSize));
   ReadFile(hFile, Buff^, LSize, BytesRead, nil);
   LineCount := 0;
   P := Buff;
   i := 0;
   StartCountLines := false;
   while (i < LSize) do begin

     if CompareMem(PChar(ParTag), P, Length(ParTag)) and not StartCountLines then begin
       StartCountLines := true;
     end;
     if CompareMem(PChar(BMName), P, Length(BMName)) then begin

       Dec(P, 10);
       if CompareMem(PChar(BMTag), P, Length(BMTag)) then begin

         Result := LineCount;
         break;
       end;
       Inc(P, 10);
     end;
     if (CompareMem(PChar(ParTag), P, Length(ParTag)) or
         CompareMem(PChar(PageTag), P, Length(PageTag))) and StartCountLines then begin
       Inc(LineCount);
    end;
     Inc(i);
     Inc(P);
   end;
   FreeMem(Buff);
   CloseHandle(hFile);
 end;
end;


 
Dell3r ©   (2006-08-21 15:55) [12]

Спасибо. Проверим.



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

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

Наверх





Память: 0.48 MB
Время: 0.013 c
10-1123870709
mufan
2005-08-12 22:18
2006.10.01
Отчет в Word


2-1157984741
SamProf
2006-09-11 18:25
2006.10.01
TForm.onShow или как там


2-1158136961
Gem
2006-09-13 12:42
2006.10.01
Ошибка: Недопустимый флаг преобразования


2-1157721757
K_Lock
2006-09-08 17:22
2006.10.01
Обмен данными (ADO)


3-1153948468
bumper
2006-07-27 01:14
2006.10.01
Где проблема с рус.кодировкой - в FB 1.5.3 или EhLib 3.6?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский