trichview.support
Re: HTML links in table content |
Author |
Message |
Chris |
Posted: 01/08/2003 20:40:09 That works as expected. The problem is setting the ItemTag in the first place. At the moment I have to loop throgh all items to find any table with a selected cell then use the InPlaceEditor for that cell to set the ItemTag..., see the code snip below. I will also have to extend this to cope with nested tables, is there a better way? *************************************************************** procedure TForm1.btnExternalLinkClick(Sender: TObject); var URL: String; i: integer; jmpStyle: integer; selStart, selEnd: integer; startOffs, endOffs: integer; info: TRVTableItemInfo; editor: TCustomRichViewEdit; begin //initially assume selection is not in a table editor := rve; //go looking for tables for i := 0 to rve.ItemCount - 1 do begin if rve.GetItem(i).ClassName = 'TRVTableItemInfo' then begin info := rve.GetItem(i) as TRVTableItemInfo; //see if there is an InplaceEditor (ie at least one cell is selected) if info.FInplaceEditor <> nil then begin //test for a selection in InplaceEditor if info.FInplaceEditor.SelectionExists then //set the working editor to be the InplaceEditor editor := info.FInplaceEditor; end; end; end; if editor.SelectionExists then begin for i := 0 to editor.Style.TextStyles.Count - 1 do begin if Pos('_JUMP',editor.Style.TextStyles[i].StyleName) > 0 then begin jmpStyle := i; break; end; end; if jmpStyle <> 0 then begin URL := 'http://'; startOffs := 0; endOffs := 1; editor.GetSelectionBounds(selStart,startOffs,selEnd,endOffs,false); for i := min(selStart,selEnd) to max(selStart,selEnd) do begin if Length(editor.GetItemText(i)) > 0 then begin if PChar(editor.GetItemTag(i)) <> '' then URL := PChar(editor.GetItemTag(i)); break; end; end; if InputQuery('URL','Type in URL',URL) then begin editor.ApplyTextStyle(jmpStyle); //redo GetSelectionBounds because ApplyTextStyle clears the selection(?) editor.GetSelectionBounds(selStart,startOffs,selEnd,endOffs,true); for i := min(selStart,selEnd) to max(selStart,selEnd) do begin if TRVGraphicItemInfo(editor.RVData.Items.Objects[i]).StyleNo = -3 then begin editor.ConvertToHotPicture(i); end; editor.SetItemTagEd(i,Integer(StrNew(PChar(URL)))); end; end; end; end else MessageDlg('Please make a selection before creating a link.',mtInformation,[mbOK],0); end; *************************************************************** >"Sergey Tkachenko" <[email protected]> wrote: >>You need to process OnURLNeeded event. In this event you need to return >URL >>target: >> >>procedure TfrmMain.rveURLNeeded(Sender: TCustomRichView; id: Integer; >> var url: String); >>var ItemNo: Integer; >> RVData: TCustomRVFormattedData; >>begin >> rve.GetJumpPointLocation(id, RVData, ItemNo); >> url := PChar(RVData.GetItemTag(ItemNo)); >>end; >> >> >>> >>> When I make the contents of a table cell into a link (eg >>rve.SetItemTagEd(i,Integer(StrNew(PChar(URL))));) >>> I can set the tag OK but when I do SaveHTMLToStreamEx I do not get the >>link >>> in the HTML output. In fact if I check the tag property of the table cell >>> content later(outside the procedure where I set it) the tag is lost. How >>> can I keep the tag value and export it to HTML? >>> >>> A related point, how do I know if the item returned by GetCurrentItem >is >>> an entry in a table? >>> >>> Any help would be very welcome. >>> >>> Chris >> >> > |
Powered by ABC Amber Outlook Express Converter