<?xml version="1.0" encoding="UTF-8"?>
<helpdocument version="1.0">
	
<!--***********************************************************
 * 
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 * 
 ***********************************************************-->


 
	
<meta>
      <topic id="textswriter0105060800xml" indexer="include" status="PUBLISH">
         <title xml-lang="en-US" id="tit">Hyperlink</title>
         <filename>/text/swriter/01/05060800.xhp</filename>
      </topic>
   </meta>
   <body>
      <section id="hyperlink">
<bookmark xml-lang="en-US" branch="index" id="bm_id3150980"><bookmark_value>objects; defining hyperlinks</bookmark_value>
         <bookmark_value>frames; defining hyperlinks</bookmark_value>
         <bookmark_value>pictures; defining hyperlinks</bookmark_value>
         <bookmark_value>hyperlinks; for objects</bookmark_value>
</bookmark>
<bookmark xml-lang="en-US" branch="hid/SW_HID_FRM_URL" id="bm_id3153671" localize="false"/>
<paragraph xml-lang="en-US" id="hd_id3150980" role="heading" level="1" l10n="U" oldref="1"><link href="text/swriter/01/05060800.xhp" name="Hyperlink">Hyperlink</link></paragraph>
         <paragraph xml-lang="en-US" id="par_id3154188" role="paragraph" l10n="U" oldref="2"><ahelp hid="HID_FRM_URL">Specify the properties of the hyperlink for the selected graphic, frame or OLE object.</ahelp></paragraph>
      </section>
      <section id="howtoget">
         <embed href="text/swriter/00/00000405.xhp#grahyper"/>
      </section>
      <paragraph xml-lang="en-US" id="hd_id3155180" role="heading" level="2" l10n="U" oldref="3">Link to</paragraph>
      <paragraph xml-lang="en-US" id="par_id3143275" role="paragraph" l10n="U" oldref="4">Set the link properties.</paragraph>
<bookmark xml-lang="en-US" branch="hid/sw:Edit:TP_FRM_URL:ED_URL" id="bm_id3154825" localize="false"/>
<paragraph xml-lang="en-US" id="hd_id3149485" role="heading" level="2" l10n="U" oldref="5">URL</paragraph>
      <paragraph xml-lang="en-US" id="par_id3154831" role="paragraph" l10n="CHG" oldref="6"><ahelp hid="SW:EDIT:TP_FRM_URL:ED_URL">Enter the complete path to the file that you want to open.</ahelp></paragraph>
<bookmark xml-lang="en-US" branch="hid/sw:PushButton:TP_FRM_URL:PB_SEARCH" id="bm_id3149103" localize="false"/>
<paragraph xml-lang="en-US" id="hd_id3151260" role="heading" level="2" l10n="U"
                 oldref="17">Browse</paragraph>
      <paragraph xml-lang="en-US" id="par_id3149109" role="paragraph" l10n="U" oldref="18"><ahelp hid="SW:PUSHBUTTON:TP_FRM_URL:PB_SEARCH">Locate the file that you want the hyperlink to open, and then click <emph>Open</emph>.</ahelp> The target file can be on your machine or on an <link href="text/shared/00/00000002.xhp#ftp" name="FTP server">FTP server</link> in the Internet.</paragraph>
<bookmark xml-lang="en-US" branch="hid/sw:Edit:TP_FRM_URL:ED_NAME" id="bm_id3148983" localize="false"/>
<paragraph xml-lang="en-US" id="hd_id3148972" role="heading" level="2" l10n="U"
                 oldref="19">Name</paragraph>
      <paragraph xml-lang="en-US" id="par_id3147217" role="paragraph" l10n="U" oldref="20"><ahelp hid="SW:EDIT:TP_FRM_URL:ED_NAME">Enter a name for the hyperlink.</ahelp></paragraph>
<bookmark xml-lang="en-US" branch="hid/sw:ComboBox:TP_FRM_URL:CB_FRAME" id="bm_id3149035" localize="false"/>
<paragraph xml-lang="en-US" id="hd_id3153636" role="heading" level="2" l10n="U" oldref="7">Frame</paragraph>
      <paragraph xml-lang="en-US" id="par_id3149042" role="paragraph" l10n="U" oldref="8"><ahelp hid="SW:COMBOBOX:TP_FRM_URL:CB_FRAME">Specify the name of the frame where you want to open the targeted file.</ahelp> The predefined target frame names are described <link href="text/shared/01/01100500.xhp" name="here">here</link>.</paragraph>
      <paragraph xml-lang="en-US" id="hd_id3152772" role="heading" level="2" l10n="U" oldref="9">Image Map</paragraph>
      <paragraph xml-lang="en-US" id="par_id3155138" role="paragraph" l10n="U" oldref="10">Select the type of <link href="text/shared/00/00000002.xhp#imagemap" name="ImageMap">ImageMap</link> that you want to use. The ImageMap settings override the hyperlink settings that you enter on this page.</paragraph>
<bookmark xml-lang="en-US" branch="hid/sw:CheckBox:TP_FRM_URL:CB_SERVER" id="bm_id3149170" localize="false"/>
<paragraph xml-lang="en-US" id="hd_id3153357" role="heading" level="2" l10n="U"
                 oldref="13">Server-side image map</paragraph>
      <paragraph xml-lang="en-US" id="par_id3149176" role="paragraph" l10n="U" oldref="14"><ahelp hid="SW:CHECKBOX:TP_FRM_URL:CB_SERVER">Uses a server-side image map.</ahelp></paragraph>
<bookmark xml-lang="en-US" branch="hid/sw:CheckBox:TP_FRM_URL:CB_CLIENT" id="bm_id3151029" localize="false"/>
<paragraph xml-lang="en-US" id="hd_id3156278" role="heading" level="2" l10n="U"
                 oldref="15">Client-side image map</paragraph>
      <paragraph xml-lang="en-US" id="par_id3151036" role="paragraph" l10n="U" oldref="16"><ahelp hid="SW:CHECKBOX:TP_FRM_URL:CB_CLIENT">Uses the <link href="text/shared/01/02220000.xhp" name="image map">image map</link> that you created for the selected object.</ahelp></paragraph>
      <embed href="text/shared/00/00000004.xhp#related"/>
      <paragraph xml-lang="en-US" id="par_id3151380" role="paragraph" l10n="U" oldref="21"><link href="text/shared/00/00000002.xhp#url" name="URL">URL</link></paragraph>
   </body>
</helpdocument>