Главная страница
    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.012 c
2-1157845105
RASkov
2006-09-10 03:38
2006.10.01
Добавление свойства


3-1153910073
Алексий
2006-07-26 14:34
2006.10.01
ZeosDBO и SHH


2-1157812850
Juri
2006-09-09 18:40
2006.10.01
Как программно узнать день недели любой даты?


2-1158053185
ice321
2006-09-12 13:26
2006.10.01
SQL запрос


2-1157707753
Тыгыдым
2006-09-08 13:29
2006.10.01
Работа с записями





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