<< Click to Display Table of Contents >> Navigation: Programming > User Interface > Layoutmodes > Multiple Editors for the Same Text > Multiple Editors with a list of TRTFDataCollections and Tabset |
Here we create a program which uses a tabset to switch between different editors.
We need this variables:
RTFSets : TList; // TWPRTFDataCollection
ActiveTab : Integer;
This code initailizes:
procedure TForm2.FormCreate(Sender: TObject);
begin
// RTFSets kann hier nicht erzeugt werden, da die Controls
// bereits vorher angelegt werden.
// Daher WPRichText1InitializeRTFDataObject für beide Editoren
// aufrufen lassen
UpdateTabSet;
end;
procedure TForm2.FormDestroy(Sender: TObject);
var I : Integer;
begin
SelectRTFSet(-1);
for I := 0 to RTFSets.Count-1 do
TWPRTFDataCollection( RTFSets[I] ).Free;
RTFSets.Free;
end;
// Do not use OnInitializedRTFData
procedure TForm2.WPRichText1InitializeRTFDataObject(Sender: TObject;
var RTFDataObject: TWPRTFDataCollection; var RTFPropsObject: TWPRTFProps);
begin
if RTFSets=nil then
begin
RTFSets := TList.Create;
// Hier TWPRTFDataBlockEd verwenden!
RTFSets.Add( TWPRTFDataCollection.Create( TWPRTFDataBlockEd ) );
end;
RTFDataObject := TWPRTFDataCollection( RTFSets[0] );
RTFDataObject.MakeRTFProps;
end;
Add and remove RTFData objects
procedure TForm2.FreeRTFSet(index: Integer);
begin
TWPRTFDataCollection( RTFSets[index] ).Free;
RTFSets.Delete(index);
while index>=RTFSets.Count do dec(index);
SelectRTFSet( index );
end;
procedure TForm2.SelectRTFSet(index: Integer);
begin
WPRichText1.RemoveRTFData;
WPRichText2.RemoveRTFData;
if (index>=0) and (index<RTFSets.Count) then
begin
WPRichText1.SetRTFData(TWPRTFDataCollection( RTFSets[index] ));
WPRichText2.SetRTFData(TWPRTFDataCollection( RTFSets[index] ));
ActiveTab := index;
end
else ActiveTab := -1;
UpdateTabSet;
end;
procedure TForm2.AddRTFSet;
var rtfdata : TWPRTFDataCollection;
begin
rtfdata := TWPRTFDataCollection.Create( TWPRTFDataBlockEd );
rtfdata.MakeRTFProps;
RTFSets.Add( rtfdata );
SelectRTFSet(RTFSets.Count-1);
end;
Update the TabSet
procedure TForm2.WPRichText1AfterLoadText(Sender: TObject);
begin
UpdateTabSet;
end;
procedure TForm2.UpdateTabSet;
var I : Integer;
begin
TabSet1.Tabs.Clear;
for I := 0 to RTFSets.Count-1 do
TabSet1.Tabs.Add(
ExtractFileName(
TWPRTFDataCollection( RTFSets[I] ).LastFileName ));
TabSet1.TabIndex := ActiveTab;
end;
procedure TForm2.TabSet1Change(Sender: TObject; NewTab: Integer;
var AllowChange: Boolean);
begin
if ActiveTab<>NewTab then
SelectRTFSet( NewTab );
end;
Capture the Click on the "New" and "Close" button in the toolbar
procedure TForm2.WPToolbar1IconSelection(Sender: TObject; var Typ: TWpSelNr;
const str: string; const group, num, index: Integer);
begin
// Click auf NEW
if (Typ=wptIconSel) and
(group=WPI_GR_DISK) and
(num=WPI_CO_New) then
begin
AddRTFSet;
WPToolbar1.UpdateIconAfterClick := true;
Typ := wptNone;
end
// Click auf CLOSE
else
if (Typ=wptIconSel) and
(group=WPI_GR_DISK) and
(num=WPI_CO_Close) then
begin
if WPRichText1.CanClose then
begin
if RTFSets.Count>1 then
FreeRTFSet(ActiveTab)
else
begin
WPRichText1.Clear;
WPRichText1.LastFileName := '';
WPRichText1.CheckHasBody;
WPRichText2.CheckHasBody;
end;
end;
UpdateTabSet;
WPToolbar1.UpdateIconAfterClick := true;
Typ := wptNone;
end;
end;