<html><head></head>
<body>
	<link rel="stylesheet" href="docooo.css">
	<img src="img/125x50_1.png" class="icon">
	<div class="supertitle">The OpenOffice.org Documentation Project</div>
	<h1 class="docheader user">Getting Help 101</h1>

	<p><strong>Welcome, Help Seeker!</strong></p>
	 <p>
	  You have probably got here because there is a problem that you cannot resolve or
	  a task that you don't know how to achieve. This page won't give you the answer
	  but it will give you an overview of the places that might have the answer to
	  your question.
	</p>
	
	<h2 class="userbg">Application Help</h2>
	<p>
	  The application help or "online help" is installed with 
	  OpenOffice.org and accessible	for every OpenOffice.org user without going online. It provides
	  a multitude of information, mostly instructions for tasks and functional reference.
	</p>
	<p>You can access the application help from within OpenOffice.org by</p>
	<ul>
	  <li>Pressing <span class="key">F1</span></li>
	  <li>Selecting <span class="menu">Help - OpenOffice.org Help</span> from the main menu</li>
	</ul>
	<p> The features of the application help are described in the help itself:</p>
	<ol>
	  <li>In OpenOffice.org, select <span class="menu">Help - OpenOffice.org Help</span> from the main menu</li>
	  <li>Select any link under <strong>Getting Help</strong> from the main page.
	</ol>
		
	<h2 class="userbg">The Documentation Project</h2>
	  <p>
	    The OpenOffice.org Documentation project provides a variety of information resources that
	    you can use to learn more about OpenOffice.org.
	 </p>
	 <p>Go <a href="..">back to the main project page</a> and
	  select one of the information sources displayed in the left column. Rest your mouse pointer over the
	  rows to get a brief description.
	</p>

	<h2 class="userbg">Mailing Lists</h2>
	<p>
	  OpenOffice.org mailing lists are a valuable source for getting user-to-user help. Many mailing lists are
	  mainly for working on a particular project, but there are some lists that you can use to post general
	  questions:
	</p>
	
	<ul>
	  <li>users@openoffice.apache.org, you can either 
	  <a href="http://www.openoffice.org/servlets/SummarizeList?listName=users">browse</a> or 
	  <a href="http://www.openoffice.org/servlets/SearchList?listName=users">search</a> the message archive
	  or subscribe to the mailing list and start posting</li>
	  <li>users@openoffice.apache.org, you can either 
	  <a href="http://www.openoffice.org/servlets/SummarizeList?listName=discuss">browse</a> or 
	  <a href="http://www.openoffice.org/servlets/SearchList?listName=discuss">search</a> the message archive
	  or subscribe to the mailing list and start posting</li>
	</ul>
	
	<p>
	  <a href="http://www.openoffice.org/mail_list.html">Here is a list of all mailing lists</a> with description and instructions on how to subscribe or unsubscribe.
	</p>
	<P>
	Another option is to <a href="http://www.oooforum.org/">use the forums.</a>
	<h2 class="userbg">Other Resources</h2>
	<p>
	  The <a href="http://support.openoffice.org/index.html">Support page</a> maintains a collection of support resources,
	  free and commercial, inside and outside of OpenOffice.org.
	</p>
	
	<h2 class="userbg">Nothing Found?</h2>
	<p>
	  If you still haven't found your questions answered
	  <a href="mailto:dev@documentation.openoffice.org">please let us know</a> so we can do something
	  about it. Or even better: <strong><a href="http://documentation.openoffice.org/servlets/ProjectMembershipRequest">Join the
	  project</a></strong> and help filling that gap. <strong>No cost, no obligations!</strong>
	</p>

	<div id="docfooter">last change Apr 3, 2006 - send feedback to <a href="mailto:fpe@openoffice.org">fpe</a></div>
</body>
</html>
