git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.jvcl@12 7f62d464-2af8-f54e-996c-e91b33f51cbe
274 lines
8.0 KiB
ObjectPascal
274 lines
8.0 KiB
ObjectPascal
{-----------------------------------------------------------------------------
|
|
The contents of this file are subject to the Mozilla Public License
|
|
Version 1.1 (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.mozilla.org/MPL/MPL-1.1.html
|
|
|
|
Software distributed under the License is distributed on an "AS IS" basis,
|
|
WITHOUT WARRANTY OF ANY KIND, either expressed or implied. See the License for
|
|
the specific language governing rights and limitations under the License.
|
|
|
|
The Original Code is: JvgMultiResources.PAS, released on 2003-01-15.
|
|
|
|
The Initial Developer of the Original Code is Andrey V. Chudin, [chudin att yandex dott ru]
|
|
Portions created by Andrey V. Chudin are Copyright (C) 2003 Andrey V. Chudin.
|
|
All Rights Reserved.
|
|
|
|
Contributor(s):
|
|
Michael Beck [mbeck att bigfoot dott com].
|
|
|
|
You may retrieve the latest version of this file at the Project JEDI's JVCL home page,
|
|
located at http://jvcl.sourceforge.net
|
|
|
|
Known Issues:
|
|
-----------------------------------------------------------------------------}
|
|
// $Id: JvgMultiResources.pas 10610 2006-05-19 13:35:08Z elahn $
|
|
|
|
unit JvgMultiResources;
|
|
|
|
{$I jvcl.inc}
|
|
|
|
interface
|
|
|
|
uses
|
|
Windows, Controls, Classes, Forms, SysUtils,
|
|
Dialogs, TypInfo,
|
|
{$IFDEF USEJVCL}
|
|
JvComponentBase,
|
|
{$ENDIF USEJVCL}
|
|
{$IFDEF COMPILER6_UP}
|
|
DesignIntf, DesignEditors, PropertyCategories;
|
|
{$ELSE}
|
|
DsgnIntf;
|
|
{$ENDIF COMPILER6_UP}
|
|
|
|
type
|
|
TJvgResStringList = class(TStringList);
|
|
|
|
{$IFDEF USEJVCL}
|
|
TJvgMultipleResources = class(TJvComponent)
|
|
{$ELSE}
|
|
TJvgMultipleResources = class(TComponent)
|
|
{$ENDIF USEJVCL}
|
|
private
|
|
FComps: TStringList;
|
|
FResources: TJvgResStringList;
|
|
// FCompList: TList;
|
|
// function GetName(Component: TComponent): string;
|
|
// procedure ProcessNewComponent(Component: TComponent);
|
|
procedure GetComponentData(C: TComponent; SLNames: TStringList);
|
|
// procedure GetPropEditor(Prop: TPropertyEditor);
|
|
// procedure E(const S: string);
|
|
protected
|
|
procedure Notification(Component: TComponent; Operation: TOperation); override;
|
|
procedure Loaded; override;
|
|
public
|
|
// property CompList: TList read FCompList write FCompList;
|
|
constructor Create(AOwner: TComponent); override;
|
|
destructor Destroy; override;
|
|
procedure Update;
|
|
published
|
|
property Resources: TJvgResStringList read FResources write FResources;
|
|
property Comps: TStringList read FComps write FComps;
|
|
end;
|
|
|
|
implementation
|
|
|
|
uses
|
|
StdCtrls, Contnrs; //, JvgMultiResourceEditor, JvDsgnTypes;
|
|
|
|
constructor TJvgMultipleResources.Create(AOwner: TComponent);
|
|
var
|
|
I: Integer;
|
|
begin
|
|
inherited Create(AOwner);
|
|
FResources := TJvgResStringList.Create;
|
|
FComps := TStringList.Create;
|
|
// FCompList := TList.Create;
|
|
{ FResources.Add('Form1#Label1#Caption1');
|
|
FResources.Add('Form2#Label2#Caption2');
|
|
FResources.Add('Form3#Label3#Caption3');
|
|
FResources.Add('Form4#Label4#Caption4');}
|
|
if (csDesigning in ComponentState) and (FComps.Count = 0) then
|
|
with TForm(AOwner) do
|
|
begin
|
|
for I := 0 to ControlCount - 1 do
|
|
if TComponent(Comps[I]) is TLabel then
|
|
FComps.Add(TComponent(Comps[I]).Name);
|
|
//FResources.Add( Comps[I].Name+'#'+TLabel(Comps[I]).Caption );
|
|
end;
|
|
end;
|
|
|
|
destructor TJvgMultipleResources.Destroy;
|
|
begin
|
|
FComps.Free;
|
|
FResources.Free;
|
|
// FCompList.Free;
|
|
inherited Destroy;
|
|
end;
|
|
|
|
procedure TJvgMultipleResources.Notification(Component: TComponent;
|
|
Operation: TOperation);
|
|
begin
|
|
inherited Notification(Component, Operation);
|
|
// if (Component <> Self)and(Operation = opInsert) then ProcessNewComponent(Component);
|
|
//if (Component <> Self)and(Operation = opRename)and(Assigned(LastComponent)) then ProcessNewComponent(Component);
|
|
// raise Exception.Create('Cannot create more than one instance of TJvgMultipleResources component');
|
|
if (Component <> Self) and (Operation = opInsert) then
|
|
if (Component is TLabel) or (Component is TListBox) then
|
|
begin
|
|
Comps.AddObject(Component.Name, Component);
|
|
Resources.Add('');
|
|
end;
|
|
{ if (Component <> Self)and(Operation = opRemove) then
|
|
for I := 0 to CompList.Count-1 do if CompList[I] = Component then
|
|
begin
|
|
CompList.Delete(I);
|
|
//for J := Comps.Count-1 downto 0 do
|
|
// if Pos( Component.Name Comps[] )
|
|
Break;
|
|
end;}
|
|
end;
|
|
|
|
procedure TJvgMultipleResources.Update;
|
|
var
|
|
I, J, Ind: Integer;
|
|
C: TComponent;
|
|
NameOfC: string;
|
|
SLNames: TStringList;
|
|
begin
|
|
SLNames := TStringList.Create;
|
|
try
|
|
for I := 0 to Comps.Count - 1 do
|
|
begin
|
|
NameOfC := '';
|
|
C := TComponent(Comps.Objects[I]);
|
|
if C = nil then
|
|
begin
|
|
for J := 1 to length(Comps[I]) do
|
|
if Comps[I][J] = '.' then
|
|
Break;
|
|
NameOfC := Copy(Comps[I], 0, J - 1);
|
|
C := Owner.FindComponent(NameOfC);
|
|
end;
|
|
if C = nil then
|
|
Exit;
|
|
|
|
if NameOfC <> '' then
|
|
for J := 0 to Comps.Count - 1 do
|
|
if Pos(NameOfC + '.', Comps[I]) = 1 then
|
|
Comps.Objects[I] := C;
|
|
|
|
if C.Name = '' then
|
|
Continue;
|
|
SLNames.Clear; //SLNames.Sorted := True;
|
|
GetComponentData(C, SLNames);
|
|
for J := 0 to SLNames.Count - 1 do
|
|
begin
|
|
//IndexOfObject(
|
|
Ind := Comps.IndexOf(C.Name + '.' + SLNames.Names[J]);
|
|
if Ind = -1 then
|
|
begin
|
|
Comps.Insert(Comps.IndexOfObject(C), C.Name + '.' +
|
|
SLNames.Names[J]);
|
|
Resources.Add(SLNames.Values[SLNames.Names[J]]);
|
|
end
|
|
else
|
|
Resources[Ind] := SLNames.Values[SLNames.Names[J]];
|
|
end;
|
|
if Comps[Comps.IndexOfObject(C)] = '' then
|
|
begin
|
|
Resources.Delete(Comps.IndexOfObject(C) - 1);
|
|
Comps.Delete(Comps.IndexOfObject(C));
|
|
end;
|
|
end;
|
|
finally
|
|
SLNames.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TJvgMultipleResources.GetComponentData(C: TComponent;
|
|
SLNames: TStringList);
|
|
var
|
|
I: Integer;
|
|
begin
|
|
if C is TLabel then
|
|
SLNames.Add('Caption=' + TLabel(C).Caption)
|
|
else
|
|
if C is TListBox then
|
|
for I := 0 to TListBox(C).Items.Count - 1 do
|
|
SLNames.Add('Items[' + IntToStr(I) + ']=' + TListBox(C).Items[I]);
|
|
end;
|
|
|
|
procedure TJvgMultipleResources.Loaded;
|
|
begin
|
|
inherited Loaded;
|
|
if not (csDesigning in ComponentState) then
|
|
begin
|
|
end;
|
|
end;
|
|
|
|
(*
|
|
function TJvgMultipleResources.GetName(Component: TComponent): string;
|
|
var
|
|
I: Integer;
|
|
BaseName: string;
|
|
begin
|
|
if Component.Name <> '' then
|
|
begin
|
|
Result := Component.Name;
|
|
Exit;
|
|
end;
|
|
I := 1;
|
|
BaseName := Copy(Component.ClassName, 2, Length(Component.ClassName));
|
|
while Owner.FindComponent(BaseName + IntToStr(I)) <> nil do
|
|
inc(I);
|
|
Result := BaseName + IntToStr(I);
|
|
end;
|
|
*)
|
|
|
|
(*
|
|
procedure TJvgMultipleResources.ProcessNewComponent(Component: TComponent);
|
|
var
|
|
SLNames, SLValues: TStringList;
|
|
CompList: TComponentList;
|
|
begin
|
|
// (p3) I don't see how this codse will ever work...
|
|
if not (Component is TControl) then
|
|
Exit;
|
|
SLNames := TStringList.Create;
|
|
SLValues := TStringList.Create;
|
|
// CompList := TComponentList.Create;
|
|
// FormDesigner := IJvFormDesigner.Create;
|
|
if (Component is TLabel) or (Component is TListBox) then
|
|
CompList.Add(Component);
|
|
|
|
try
|
|
{ if Component is TLabel then
|
|
Comps.Add( GetName( Component ) );
|
|
if Component is TListBox then //with TListBox(Component) do
|
|
for I:=0 to TListBox(Component).Items.Count-1 do
|
|
Comps.Add( GetName( Component )+'.Items['+IntToStr(I)+']' );
|
|
}
|
|
finally
|
|
/// FormDesigner.Free;
|
|
// CompList.Free;
|
|
SLNames.Free;
|
|
SLValues.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TJvgMultipleResources.E(const S: string);
|
|
begin
|
|
// ShowMessage(s);
|
|
end;
|
|
|
|
procedure TJvgMultipleResources.GetPropEditor(Prop: TPropertyEditor);
|
|
begin
|
|
// ShowMessage(s);
|
|
end;
|
|
*)
|
|
|
|
end.
|
|
|