git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@2445 8e941d3f-bd1b-0410-a28a-d453659cc2b4

This commit is contained in:
dopi 2012-05-29 16:15:40 +00:00
parent 559b0a470e
commit dc2d691bd4
7 changed files with 490 additions and 301 deletions

File diff suppressed because it is too large Load Diff

View File

@ -92,6 +92,7 @@ object fMainForm: TfMainForm
Lines.Strings = (
'Memo1'
)
ScrollBars = ssAutoBoth
TabOrder = 0
end
end

View File

@ -6,7 +6,7 @@ interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Menus,
ComCtrls, Buttons, StdCtrls, ExtCtrls, Spin, TDIClass, IpHtml;
ComCtrls, Buttons, StdCtrls, ExtCtrls, Spin, TDIClass;
type
@ -78,6 +78,10 @@ begin
Screen.OnActiveControlChange := @ShowNewControl;
cbxBackgroundCorner.ItemIndex := Integer(TDINoteBook1.BackgroundCorner);
try
Memo1.Lines.LoadFromFile( ExtractFilePath(Application.ExeName)+'..'+PathDelim+'read-me.txt' );
except
end;
end;
procedure TfMainForm.FormDestroy(Sender : TObject) ;

View File

@ -1,10 +1,157 @@
What is TDI ?
Please see:
http://en.wikipedia.org/wiki/Tab_%28GUI%29
http://wiki.freepascal.org/tdi
This is a very alfa post...
I will write a Page on Wiki, and adjust all files for LGPL License
=== Contents ===
Author:
Daniel Simões de Almeida
daniel@djsystem.com.br
1 About
2 Author
3 License
4 Key Features
5 Download
6 Dependencies / System Requirements
7 Screenshot
8 Installation
9 How to Use
10 Methods and Properties
11 Note
=== 1 - About ===
A Tabbed GUI Interface
Lazarus does not have full support for MDI interface yet, and commercial
applications need to open several windows at once without ShowModal.
However, the MDI interface concept has several problems, which may confuse the
novice user. A more complete study on the advantages and disadvantages of the
MDI can be found at wikipedia:
http://en.wikipedia.org/wiki/Multiple_document_interface#
Comparison_with_single_document_interface
The intention of this component is to provide a simple way to create an TDI
interface, similar to that described in Wikipedia.
http://en.wikipedia.org/wiki/Tabbed_document_interface
I used TExtendedNotebook as a base component, introducing new methods and
properties to provide support for TDI. Very few changes will be needed in your
code, and component TTDINotebook will handle the entire process of creation and
destruction of the tabs and menus automatically.
=== 2 - Author ===
Author: Daniel Simões de Almeida
daniel@djsystem.com.br
=== 3 - License ===
LGPL
http://www.opensource.org/licenses/lgpl-license.php
=== 4 - Key Features ===
- Automatically takes care of Creation and Destruction of the tabs,
- Automatically takes care of Main Menu Items related to tabs
- Automatically Close the tabs when the Internal Form is Closed or Destroyed
- Allows you to display a background image in a corner of the Form
- Respects the Max Constraint of Internal Forms, centralizing it on the Tab
- Respects the Internal Forms OnCloseQuery event when closing a Tab
- Allows customization of Labels and Images of the Menu Items Tabs
- Allow to close Tabs with Mouse Middle Button
- Allows Close All Tabs
=== 5 - Download ===
The package can be downloaded from the Lazarus CCR SVN repository.
https://lazarus-ccr.svn.sourceforge.net/svnroot/lazarus-ccr/components/tdi
You will need a SVN Client
On Windows you can use TortoiseSVN: http://tortoisesvn.net/downloads.html
On Linux, use:
svn co https://lazarus-ccr.svn.sourceforge.net/svnroot/lazarus-ccr/components/tdi
=== 6 - Dependencies / System Requirements ===
None
=== 7 - Screenshot ===
http://wiki.freepascal.org/tdi#Screenshot
=== 8 - Installation ===
- Download the package on a directory of your preference
- Open Package File: tdi.lpk.
- Install the Package and let Lazarus rebuild.
=== 9 - How to Use ===
Please open Project tdi\Demo\TDIDemo.lpi
I believe studying the sources and observing the Demo working is the best way
to explain the component
=== 10 - Methods and Properties ===
* procedure ShowFormInPage( AForm: TForm; ImageIndex : Integer = -1 );
Show a already created Form in a new Page. If there is an Page that already
owns this Form variable, it will bring it to front, rather than create a new
Page.
* procedure CreateFormInNewPage( AFormClass: TFormClass; ImageIndex : Integer = -1 ) ;
Create a New AFormClass, in a new Page.
( Remember to assign CloseAction := caFree; on OnClose event of this Form)
* Function CanCloseAPage( APageIndex: Integer): Boolean;
This will fire OnCloseQuery of the Internal Form reference to a APageIndex Tab,
and Returns True if it can be Closed.
* Function FindFormInPages( AForm: TForm): Integer ;
Search an Page that owns AForm variable, returning the TabIndex if found or -1
if doesn't.
* Function CanCloseAllPages: Boolean;
The same as above, but will check All Tabs
* procedure ScrollPage( ToForward: Boolean );
Go to Next ou Prior Page, depending ToForward parameter
* procedure CheckInterface;
Check the TDI Interface, enabling/disabling internal components (This method
is called from inside)
* property BackgroundImage : TImage
* property BackgroundCorner : TTDIBackgroundCorner
TTDIBackgroundCorner = (coTopLeft, coTopRight, coBottomLeft, coBottomRight);
* property MainMenu : TMainMenu
If Assigned, TTDINotebook will use it to Create Menu Items for Tabs operations
(see Image1)
* property CloseTabButtom : TTDICloseTabButtom
TTDICloseTabButtom = (tbNone, tbMenu, tbButtom ) ;
tbNone - None Close Button is showed
tbMenu - Use MainMenu, to draw a Close Button aligned to Right (see Image1)
tbButtom - Draw a small BitButtom, on Right Up corner of TTDINotebook
* property TDIActions : TTDIActions
Allow to customize Label and Images of Menu Items for operations:
TabsMenu, CloseTab, CloseAllTabs, NextTab, PreviousTab
* property TDIOptions : TTDIOptions
TTDIOption = ( tdiMiddleButtomClosePage, tdiRestoreLastActiveControl,
tdiVerifyIfCanChangePage ) ;
TTDIOptions = set of TTDIOption ;
tdiMiddleButtomClosePage - Close Page with Mouse middle button
tdiRestoreLastActiveControl - Restore the focus control to the Last focused
component on Page, after change to a new Page.
tdiVerifyIfCanChangePage - Try to fire OnExit event of current focused control
on Page before leave it. If isn't possible to change
to another control, doesn't change the Page.
* property ShortCutClosePage: TShortCut
The HotKey to Close a Page, default is Ctrl+F4
* property FixedPages : Integer
Number of initial Pages that cannot be closed.

View File

@ -19,7 +19,7 @@
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
You can also get a copy of the license accessing the address:
Http://www.opensource.org/licenses/gpl-license.php
http://www.opensource.org/licenses/lgpl-license.php
Daniel Simões de Almeida - daniel@djsystem.com.br - www.djsystem.com.br
Rua Coronel Aureliano de Camargo, 973 - Tatuí - SP - 18270-170

View File

@ -19,7 +19,7 @@
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
You can also get a copy of the license accessing the address:
Http://www.opensource.org/licenses/gpl-license.php
http://www.opensource.org/licenses/lgpl-license.php
Daniel Simões de Almeida - daniel@djsystem.com.br - www.djsystem.com.br
Rua Coronel Aureliano de Camargo, 973 - Tatuí - SP - 18270-170

View File

@ -19,7 +19,7 @@
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
You can also get a copy of the license accessing the address:
Http://www.opensource.org/licenses/gpl-license.php
http://www.opensource.org/licenses/lgpl-license.php
Daniel Simões de Almeida - daniel@djsystem.com.br - www.djsystem.com.br
Rua Coronel Aureliano de Camargo, 973 - Tatuí - SP - 18270-170