Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.01;
Скачать: CL | DM;

Вниз

Доступ к закладкам в .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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.031 c
4-1148823766
ффф
2006-05-28 17:42
2006.10.01
виртуальный com порт


3-1154063559
KygECHuK
2006-07-28 09:12
2006.10.01
Проверка наличия определенной роли у пользователя в ORACLE


1-1155654186
incm
2006-08-15 19:03
2006.10.01
Как передать фокус в миди-форму после TComboBox в главной форме


15-1157957457
Neo Trinitron
2006-09-11 10:50
2006.10.01
PowerDesigner


2-1158090623
Murava
2006-09-12 23:50
2006.10.01
PostMessage(<окно>, wm_LButtonDown, 0, <координаты>)-не пашит :(