mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-12 03:35:57 +02:00
added new session property storage editor from Michael VC
git-svn-id: trunk@7459 -
This commit is contained in:
parent
cc5784c6eb
commit
01daa56c38
3
.gitattributes
vendored
3
.gitattributes
vendored
@ -951,6 +951,9 @@ ideintf/fieldslist.lfm svneol=native#text/plain
|
||||
ideintf/fieldslist.lrs svneol=native#text/pascal
|
||||
ideintf/fieldslist.pas svneol=native#text/pascal
|
||||
ideintf/formeditingintf.pas svneol=native#text/pascal
|
||||
ideintf/frmselectprops.lfm svneol=native#text/plain
|
||||
ideintf/frmselectprops.lrs svneol=native#text/plain
|
||||
ideintf/frmselectprops.pas svneol=native#text/plain
|
||||
ideintf/graphpropedits.pas svneol=native#text/pascal
|
||||
ideintf/helpfpdoc.pas svneol=native#text/pascal
|
||||
ideintf/helphtml.pas svneol=native#text/pascal
|
||||
|
@ -93,6 +93,10 @@ begin
|
||||
Add(TCustomCheckBox,'Checked');
|
||||
Add(TCustomRadioGroup,'Items');
|
||||
Add(TCustomRadioGroup,'ItemIndex');
|
||||
Add(TCustomForm,'OnCreate');
|
||||
Add(TCustomForm,'OnDestroy');
|
||||
Add(TCustomForm,'OnResize');
|
||||
Add(TCustomListBox,'Items');
|
||||
Result.DeleteDoubles;
|
||||
end;
|
||||
|
||||
|
@ -25,7 +25,7 @@ uses
|
||||
ImageListEditor, ComponentTreeView, ActionsEditor, HelpIntf, TextTools,
|
||||
FormEditingIntf, SrcEditorIntf, ComponentReg, PackageIntf, HelpHTML,
|
||||
FieldsEditor, ConfigStorage, HelpFPDoc, ProjectIntf, LazIDEIntf, NewItemIntf,
|
||||
MacroIntf, MenuIntf;
|
||||
MacroIntf, MenuIntf, FrmSelectProps;
|
||||
|
||||
implementation
|
||||
|
||||
|
187
ideintf/frmselectprops.lfm
Normal file
187
ideintf/frmselectprops.lfm
Normal file
@ -0,0 +1,187 @@
|
||||
object SelectPropertiesForm: TSelectPropertiesForm
|
||||
Caption = 'Select properties'
|
||||
ClientHeight = 462
|
||||
ClientWidth = 485
|
||||
OnCreate = SelectPropertiesFormCreate
|
||||
PixelsPerInch = 112
|
||||
Position = poDesktopCenter
|
||||
HorzScrollBar.Page = 484
|
||||
VertScrollBar.Page = 461
|
||||
Left = 411
|
||||
Height = 462
|
||||
Top = 175
|
||||
Width = 485
|
||||
object PTop: TPanel
|
||||
Align = alTop
|
||||
BevelOuter = bvNone
|
||||
ClientHeight = 248
|
||||
ClientWidth = 485
|
||||
FullRepaint = False
|
||||
TabOrder = 0
|
||||
OnResize = PTopResize
|
||||
Height = 248
|
||||
Width = 485
|
||||
object PProperties: TPanel
|
||||
Align = alRight
|
||||
BevelOuter = bvNone
|
||||
ClientHeight = 248
|
||||
ClientWidth = 221
|
||||
FullRepaint = False
|
||||
TabOrder = 0
|
||||
Left = 264
|
||||
Height = 248
|
||||
Width = 221
|
||||
object LProperties: TLabel
|
||||
Align = alTop
|
||||
BorderSpacing.OnChange = nil
|
||||
BorderSpacing.Around = 3
|
||||
Caption = '&Properties'
|
||||
Color = clNone
|
||||
Layout = tlCenter
|
||||
Left = 3
|
||||
Height = 25
|
||||
Top = 3
|
||||
Width = 215
|
||||
end
|
||||
object LBProperties: TListBox
|
||||
Align = alClient
|
||||
BorderSpacing.OnChange = nil
|
||||
MultiSelect = True
|
||||
Sorted = True
|
||||
TabOrder = 0
|
||||
TopIndex = -1
|
||||
Height = 217
|
||||
Top = 31
|
||||
Width = 221
|
||||
end
|
||||
end
|
||||
object PComponents: TPanel
|
||||
Align = alLeft
|
||||
BevelOuter = bvNone
|
||||
Caption = 'PComponents'
|
||||
ClientHeight = 248
|
||||
ClientWidth = 200
|
||||
FullRepaint = False
|
||||
TabOrder = 1
|
||||
Height = 248
|
||||
Width = 200
|
||||
object LComponents: TLabel
|
||||
Align = alTop
|
||||
Anchors = [akTop, akLeft]
|
||||
BorderSpacing.Around = 3
|
||||
Caption = 'Co&mponents'
|
||||
Color = clNone
|
||||
Layout = tlCenter
|
||||
Left = 3
|
||||
Height = 23
|
||||
Top = 3
|
||||
Width = 194
|
||||
end
|
||||
object LBComponents: TListBox
|
||||
Align = alClient
|
||||
OnSelectionChange = LBComponentsSelectionChange
|
||||
Sorted = True
|
||||
TabOrder = 0
|
||||
TopIndex = -1
|
||||
Height = 219
|
||||
Top = 29
|
||||
Width = 200
|
||||
end
|
||||
end
|
||||
end
|
||||
object VSplitter: TSplitter
|
||||
Align = alTop
|
||||
Beveled = True
|
||||
Cursor = crVSplit
|
||||
Height = 8
|
||||
ParentColor = True
|
||||
Width = 485
|
||||
Cursor = crVSplit
|
||||
Height = 8
|
||||
Top = 248
|
||||
Width = 485
|
||||
end
|
||||
object PBottom: TPanel
|
||||
Align = alClient
|
||||
BevelOuter = bvNone
|
||||
ClientHeight = 206
|
||||
ClientWidth = 485
|
||||
Constraints.MinHeight = 190
|
||||
FullRepaint = False
|
||||
TabOrder = 1
|
||||
Height = 206
|
||||
Top = 256
|
||||
Width = 485
|
||||
object LLBSelected: TLabel
|
||||
BorderSpacing.Around = 3
|
||||
Caption = '&Selected Properties'
|
||||
Color = clNone
|
||||
Left = 10
|
||||
Height = 17
|
||||
Top = 3
|
||||
Width = 286
|
||||
end
|
||||
object LBSelected: TListBox
|
||||
Anchors = [akTop, akLeft, akRight, akBottom]
|
||||
MultiSelect = True
|
||||
TabOrder = 0
|
||||
TopIndex = -1
|
||||
Left = 8
|
||||
Height = 177
|
||||
Top = 24
|
||||
Width = 375
|
||||
end
|
||||
object BAdd: TButton
|
||||
Anchors = [akTop, akRight]
|
||||
Caption = '&Add'
|
||||
OnClick = BAddClick
|
||||
TabOrder = 1
|
||||
Left = 399
|
||||
Height = 25
|
||||
Top = 24
|
||||
Width = 75
|
||||
end
|
||||
object BDelete: TButton
|
||||
Anchors = [akTop, akRight]
|
||||
Caption = '&Delete'
|
||||
OnClick = BDeleteClick
|
||||
TabOrder = 2
|
||||
Left = 399
|
||||
Height = 25
|
||||
Top = 56
|
||||
Width = 75
|
||||
end
|
||||
object BClear: TButton
|
||||
Anchors = [akTop, akRight]
|
||||
Caption = 'C&lear'
|
||||
OnClick = BClearClick
|
||||
TabOrder = 3
|
||||
Left = 399
|
||||
Height = 25
|
||||
Top = 88
|
||||
Width = 75
|
||||
end
|
||||
object BOK: TButton
|
||||
Anchors = [akRight, akBottom]
|
||||
Caption = '&OK'
|
||||
Default = True
|
||||
ModalResult = 1
|
||||
TabOrder = 4
|
||||
Left = 399
|
||||
Height = 25
|
||||
Top = 169
|
||||
Width = 75
|
||||
end
|
||||
object BCancel: TButton
|
||||
Anchors = [akRight, akBottom]
|
||||
Cancel = True
|
||||
Caption = '&Cancel'
|
||||
ModalResult = 2
|
||||
TabOrder = 5
|
||||
Left = 399
|
||||
Height = 25
|
||||
Top = 137
|
||||
Width = 75
|
||||
end
|
||||
end
|
||||
end
|
53
ideintf/frmselectprops.lrs
Normal file
53
ideintf/frmselectprops.lrs
Normal file
@ -0,0 +1,53 @@
|
||||
{ This is an automatically generated lazarus resource file }
|
||||
|
||||
LazarusResources.Add('TSelectPropertiesForm','FORMDATA',[
|
||||
'TPF0'#21'TSelectPropertiesForm'#20'SelectPropertiesForm'#7'Caption'#6#17'Sel'
|
||||
+'ect properties'#12'ClientHeight'#3#206#1#11'ClientWidth'#3#229#1#8'OnCreate'
|
||||
+#7#26'SelectPropertiesFormCreate'#13'PixelsPerInch'#2'p'#8'Position'#7#15'po'
|
||||
+'DesktopCenter'#18'HorzScrollBar.Page'#3#228#1#18'VertScrollBar.Page'#3#205#1
|
||||
+#4'Left'#3#155#1#6'Height'#3#206#1#3'Top'#3#175#0#5'Width'#3#229#1#0#6'TPane'
|
||||
+'l'#4'PTop'#5'Align'#7#5'alTop'#10'BevelOuter'#7#6'bvNone'#12'ClientHeight'#3
|
||||
+#248#0#11'ClientWidth'#3#229#1#11'FullRepaint'#8#8'TabOrder'#2#0#8'OnResize'
|
||||
+#7#10'PTopResize'#6'Height'#3#248#0#5'Width'#3#229#1#0#6'TPanel'#11'PPropert'
|
||||
+'ies'#5'Align'#7#7'alRight'#10'BevelOuter'#7#6'bvNone'#12'ClientHeight'#3#248
|
||||
+#0#11'ClientWidth'#3#221#0#11'FullRepaint'#8#8'TabOrder'#2#0#4'Left'#3#8#1#6
|
||||
+'Height'#3#248#0#5'Width'#3#221#0#0#6'TLabel'#11'LProperties'#5'Align'#7#5'a'
|
||||
+'lTop'#22'BorderSpacing.OnChange'#13#20'BorderSpacing.Around'#2#3#7'Caption'
|
||||
+#6#11'&Properties'#5'Color'#7#6'clNone'#6'Layout'#7#8'tlCenter'#4'Left'#2#3#6
|
||||
+'Height'#2#25#3'Top'#2#3#5'Width'#3#215#0#0#0#8'TListBox'#12'LBProperties'#5
|
||||
+'Align'#7#8'alClient'#22'BorderSpacing.OnChange'#13#11'MultiSelect'#9#6'Sort'
|
||||
+'ed'#9#8'TabOrder'#2#0#8'TopIndex'#2#255#6'Height'#3#217#0#3'Top'#2#31#5'Wid'
|
||||
+'th'#3#221#0#0#0#0#6'TPanel'#11'PComponents'#5'Align'#7#6'alLeft'#10'BevelOu'
|
||||
+'ter'#7#6'bvNone'#7'Caption'#6#11'PComponents'#12'ClientHeight'#3#248#0#11'C'
|
||||
+'lientWidth'#3#200#0#11'FullRepaint'#8#8'TabOrder'#2#1#6'Height'#3#248#0#5'W'
|
||||
+'idth'#3#200#0#0#6'TLabel'#11'LComponents'#5'Align'#7#5'alTop'#7'Anchors'#11
|
||||
+#5'akTop'#6'akLeft'#0#20'BorderSpacing.Around'#2#3#7'Caption'#6#11'Co&mponen'
|
||||
+'ts'#5'Color'#7#6'clNone'#6'Layout'#7#8'tlCenter'#4'Left'#2#3#6'Height'#2#23
|
||||
+#3'Top'#2#3#5'Width'#3#194#0#0#0#8'TListBox'#12'LBComponents'#5'Align'#7#8'a'
|
||||
+'lClient'#17'OnSelectionChange'#7#27'LBComponentsSelectionChange'#6'Sorted'#9
|
||||
+#8'TabOrder'#2#0#8'TopIndex'#2#255#6'Height'#3#219#0#3'Top'#2#29#5'Width'#3
|
||||
+#200#0#0#0#0#0#9'TSplitter'#9'VSplitter'#5'Align'#7#5'alTop'#7'Beveled'#9#6
|
||||
+'Cursor'#7#8'crVSplit'#6'Height'#2#8#11'ParentColor'#9#5'Width'#3#229#1#6'Cu'
|
||||
+'rsor'#7#8'crVSplit'#6'Height'#2#8#3'Top'#3#248#0#5'Width'#3#229#1#0#0#6'TPa'
|
||||
+'nel'#7'PBottom'#5'Align'#7#8'alClient'#10'BevelOuter'#7#6'bvNone'#12'Client'
|
||||
+'Height'#3#206#0#11'ClientWidth'#3#229#1#21'Constraints.MinHeight'#3#190#0#11
|
||||
+'FullRepaint'#8#8'TabOrder'#2#1#6'Height'#3#206#0#3'Top'#3#0#1#5'Width'#3#229
|
||||
+#1#0#6'TLabel'#11'LLBSelected'#20'BorderSpacing.Around'#2#3#7'Caption'#6#20
|
||||
+'&Selected Properties'#5'Color'#7#6'clNone'#4'Left'#2#10#6'Height'#2#17#3'To'
|
||||
+'p'#2#3#5'Width'#3#30#1#0#0#8'TListBox'#10'LBSelected'#7'Anchors'#11#5'akTop'
|
||||
+#6'akLeft'#7'akRight'#8'akBottom'#0#11'MultiSelect'#9#8'TabOrder'#2#0#8'TopI'
|
||||
+'ndex'#2#255#4'Left'#2#8#6'Height'#3#177#0#3'Top'#2#24#5'Width'#3'w'#1#0#0#7
|
||||
+'TButton'#4'BAdd'#7'Anchors'#11#5'akTop'#7'akRight'#0#7'Caption'#6#4'&Add'#7
|
||||
+'OnClick'#7#9'BAddClick'#8'TabOrder'#2#1#4'Left'#3#143#1#6'Height'#2#25#3'To'
|
||||
+'p'#2#24#5'Width'#2'K'#0#0#7'TButton'#7'BDelete'#7'Anchors'#11#5'akTop'#7'ak'
|
||||
+'Right'#0#7'Caption'#6#7'&Delete'#7'OnClick'#7#12'BDeleteClick'#8'TabOrder'#2
|
||||
+#2#4'Left'#3#143#1#6'Height'#2#25#3'Top'#2'8'#5'Width'#2'K'#0#0#7'TButton'#6
|
||||
+'BClear'#7'Anchors'#11#5'akTop'#7'akRight'#0#7'Caption'#6#6'C&lear'#7'OnClic'
|
||||
+'k'#7#11'BClearClick'#8'TabOrder'#2#3#4'Left'#3#143#1#6'Height'#2#25#3'Top'#2
|
||||
+'X'#5'Width'#2'K'#0#0#7'TButton'#3'BOK'#7'Anchors'#11#7'akRight'#8'akBottom'
|
||||
+#0#7'Caption'#6#3'&OK'#7'Default'#9#11'ModalResult'#2#1#8'TabOrder'#2#4#4'Le'
|
||||
+'ft'#3#143#1#6'Height'#2#25#3'Top'#3#169#0#5'Width'#2'K'#0#0#7'TButton'#7'BC'
|
||||
+'ancel'#7'Anchors'#11#7'akRight'#8'akBottom'#0#6'Cancel'#9#7'Caption'#6#7'&C'
|
||||
+'ancel'#11'ModalResult'#2#2#8'TabOrder'#2#5#4'Left'#3#143#1#6'Height'#2#25#3
|
||||
+'Top'#3#137#0#5'Width'#2'K'#0#0#0#0
|
||||
]);
|
276
ideintf/frmselectprops.pas
Normal file
276
ideintf/frmselectprops.pas
Normal file
@ -0,0 +1,276 @@
|
||||
{
|
||||
*****************************************************************************
|
||||
* *
|
||||
* See the file COPYING.modifiedLGPL, included in this distribution, *
|
||||
* for details about the copyright. *
|
||||
* *
|
||||
* This program is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
|
||||
* *
|
||||
*****************************************************************************
|
||||
|
||||
Author: Michael Van Canneyt
|
||||
}
|
||||
unit frmSelectProps;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls,
|
||||
ObjInspStrConsts, Buttons, ExtCtrls;
|
||||
|
||||
type
|
||||
|
||||
{ TSelectPropertiesForm }
|
||||
|
||||
TSelectPropertiesForm = class(TForm)
|
||||
BAdd: TButton;
|
||||
BDelete: TButton;
|
||||
BClear: TButton;
|
||||
BOK: TButton;
|
||||
BCancel: TButton;
|
||||
LLBSelected: TLabel;
|
||||
LBComponents: TListBox;
|
||||
LComponents: TLabel;
|
||||
LBProperties: TListBox;
|
||||
LBSelected: TListBox;
|
||||
PBottom: TPanel;
|
||||
PComponents: TPanel;
|
||||
PTop: TPanel;
|
||||
PProperties: TPanel;
|
||||
LProperties: TLabel;
|
||||
VSplitter: TSplitter;
|
||||
procedure BAddClick(Sender: TObject);
|
||||
procedure BClearClick(Sender: TObject);
|
||||
procedure BDeleteClick(Sender: TObject);
|
||||
procedure LBComponentsSelectionChange(Sender: TObject; User: boolean);
|
||||
procedure PTopResize(Sender: TObject);
|
||||
procedure SelectPropertiesFormCreate(Sender: TObject);
|
||||
private
|
||||
FSelectedComponent : TComponent;
|
||||
FPropComponent: TComponent;
|
||||
function GetSelectedProps: String;
|
||||
procedure SetPropComponent(const AValue: TComponent);
|
||||
procedure SetSelectedProps(const AValue: String);
|
||||
Procedure ShowComponents;
|
||||
Procedure ShowProperties(C : TComponent);
|
||||
Procedure AddSelectedProperties;
|
||||
Procedure DeleteSelectedProperties;
|
||||
public
|
||||
Property PropertyComponent : TComponent Read FPropComponent Write SetPropComponent;
|
||||
Property SelectedProperties : String Read GetSelectedProps Write SetSelectedProps;
|
||||
end;
|
||||
|
||||
var
|
||||
SelectPropertiesForm: TSelectPropertiesForm;
|
||||
|
||||
implementation
|
||||
|
||||
uses TypInfo, RTTIUtils;
|
||||
|
||||
{ TSelectPropertiesForm }
|
||||
|
||||
procedure TSelectPropertiesForm.SetPropComponent(const AValue: TComponent);
|
||||
begin
|
||||
if FPropComponent=AValue then exit;
|
||||
begin
|
||||
FPropComponent:=AValue;
|
||||
ShowComponents;
|
||||
end
|
||||
end;
|
||||
|
||||
procedure TSelectPropertiesForm.LBComponentsSelectionChange(Sender: TObject;
|
||||
User: boolean);
|
||||
|
||||
Var
|
||||
C : TComponent;
|
||||
|
||||
begin
|
||||
With Sender as TListBox do
|
||||
if ItemIndex=-1 then
|
||||
C:=Nil
|
||||
else
|
||||
C:=Items.Objects[ItemIndex] as TComponent;
|
||||
ShowProperties(C);
|
||||
end;
|
||||
|
||||
procedure TSelectPropertiesForm.PTopResize(Sender: TObject);
|
||||
|
||||
Var
|
||||
W : Integer;
|
||||
|
||||
begin
|
||||
W:=(PTop.Width-50) div 2;
|
||||
PProperties.Width:=W;
|
||||
PComponents.Width:=W;
|
||||
end;
|
||||
|
||||
procedure TSelectPropertiesForm.SelectPropertiesFormCreate(Sender: TObject);
|
||||
begin
|
||||
BAdd.Caption:=ilesAdd;
|
||||
BDelete.Caption:=oisDelete;
|
||||
BClear.Caption:=sccsILBtnClear;
|
||||
BOK.Caption:=oisOk;
|
||||
BCancel.Caption:=oiStdActDataSetCancel1Hint;
|
||||
LComponents.Caption:=oisComponents;
|
||||
LProperties.Caption:=oisProperties;
|
||||
end;
|
||||
|
||||
procedure TSelectPropertiesForm.BAddClick(Sender: TObject);
|
||||
begin
|
||||
AddSelectedProperties;
|
||||
end;
|
||||
|
||||
procedure TSelectPropertiesForm.BClearClick(Sender: TObject);
|
||||
begin
|
||||
LBSelected.Items.Clear;
|
||||
ShowProperties(FSelectedComponent);
|
||||
end;
|
||||
|
||||
procedure TSelectPropertiesForm.BDeleteClick(Sender: TObject);
|
||||
begin
|
||||
DeleteSelectedProperties;
|
||||
end;
|
||||
|
||||
function TSelectPropertiesForm.GetSelectedProps: String;
|
||||
begin
|
||||
LBSelected.Items.Delimiter:=';';
|
||||
Result:=LBSelected.Items.DelimitedText;
|
||||
end;
|
||||
|
||||
procedure TSelectPropertiesForm.SetSelectedProps(const AValue: String);
|
||||
|
||||
Var
|
||||
L : TStringList;
|
||||
I : Integer;
|
||||
|
||||
begin
|
||||
L:=TStringList.Create;
|
||||
Try
|
||||
L.Delimiter:=';';
|
||||
L.DelimitedText:=AValue;
|
||||
For I:=0 to L.Count-1 do
|
||||
L[i]:=Trim(L[i]);
|
||||
L.Sort;
|
||||
LBSelected.Items.Assign(L);
|
||||
Finally
|
||||
L.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TSelectPropertiesForm.ShowComponents;
|
||||
|
||||
Var
|
||||
C : TComponent;
|
||||
I : Integer;
|
||||
|
||||
begin
|
||||
With LBComponents.Items do
|
||||
try
|
||||
BeginUpdate;
|
||||
Clear;
|
||||
If Assigned(FPropComponent) then
|
||||
begin
|
||||
AddObject(FPropComponent.Name,FPropComponent);
|
||||
For I:=0 to FPropComponent.ComponentCount-1 do
|
||||
begin
|
||||
C:=FPropComponent.Components[I];
|
||||
AddObject(C.Name,C);
|
||||
end;
|
||||
end;
|
||||
Finally
|
||||
EndUpdate;
|
||||
end;
|
||||
If LBComponents.Items.Count>0 then
|
||||
LBComponents.ItemIndex:=0;
|
||||
end;
|
||||
|
||||
procedure TSelectPropertiesForm.ShowProperties(C : TComponent);
|
||||
|
||||
Var
|
||||
L : TPropInfoList;
|
||||
I : Integer;
|
||||
N,S : String;
|
||||
P : PPropInfo;
|
||||
|
||||
begin
|
||||
With LBProperties do
|
||||
try
|
||||
Items.BeginUpdate;
|
||||
Clear;
|
||||
FSelectedComponent:=C;
|
||||
If (C<>Nil) then
|
||||
begin
|
||||
N:=C.Name;
|
||||
L:=TPropInfoList.Create(C,tkProperties);
|
||||
Try
|
||||
For I:=0 to L.Count-1 do
|
||||
begin
|
||||
P:=L[I];
|
||||
If (C<>FPropComponent) then
|
||||
S:=N+'.'+P^.Name;
|
||||
If LBSelected.Items.IndexOf(S)=-1 then
|
||||
LBProperties.Items.Add(P^.Name);
|
||||
end;
|
||||
Finally
|
||||
L.Free;
|
||||
end;
|
||||
end;
|
||||
Finally
|
||||
Items.EndUpdate;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TSelectPropertiesForm.AddSelectedProperties;
|
||||
|
||||
Var
|
||||
I : Integer;
|
||||
N : String;
|
||||
|
||||
begin
|
||||
If Assigned(FSelectedComponent) then
|
||||
With LBProperties do
|
||||
try
|
||||
Items.BeginUpdate;
|
||||
LBSelected.Items.BeginUpdate;
|
||||
For I:=Items.Count-1 downto 0 do
|
||||
If Selected[i] then
|
||||
begin
|
||||
N:=Items[i];
|
||||
If (FSelectedComponent<>FPropComponent) then
|
||||
N:=FSelectedComponent.Name+'.'+N;
|
||||
LBSelected.Items.Add(N);
|
||||
Items.Delete(I);
|
||||
end;
|
||||
Finally
|
||||
LBSelected.Items.EndUpdate;
|
||||
Items.EndUpdate;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TSelectPropertiesForm.DeleteSelectedProperties;
|
||||
|
||||
Var
|
||||
I : Integer;
|
||||
|
||||
begin
|
||||
With LBSelected do
|
||||
try
|
||||
Items.BeginUpdate;
|
||||
For I:=Items.Count-1 downto 0 do
|
||||
If Selected[i] then
|
||||
Items.Delete(I);
|
||||
Finally
|
||||
Items.EndUpdate;
|
||||
end;
|
||||
ShowProperties(FSelectedComponent);
|
||||
end;
|
||||
|
||||
initialization
|
||||
{$I frmselectprops.lrs}
|
||||
|
||||
end.
|
||||
|
@ -189,6 +189,7 @@ resourcestring
|
||||
oiStdActDataSetEditHint = 'Edit';
|
||||
oiStdActDataSetPostHint = 'Post';
|
||||
oiStdActDataSetCancel1Hint = 'Cancel';
|
||||
oisComponents = 'Components';
|
||||
oiStdActDataSetRefreshHint = 'Refresh';
|
||||
|
||||
oisStdActionListEditor = 'Standard Action Classes';
|
||||
@ -196,11 +197,18 @@ resourcestring
|
||||
|
||||
// TFileNamePropertyEditor
|
||||
oisSelectAFile = 'Select a file';
|
||||
oisPropertiesOf = 'Properties of %s';
|
||||
oisAllFiles = 'All files (*.*)|*.*';
|
||||
|
||||
// property editors
|
||||
oisSort = 'Sort';
|
||||
oisDLinesDChars = '%d lines, %d chars';
|
||||
oisStringsEditorDialog = 'Strings Editor Dialog';
|
||||
ois0Lines0Chars = '0 lines, 0 chars';
|
||||
oisInvalidPropertyValue = 'Invalid property value';
|
||||
oisNone = '(none)';
|
||||
oisComponentNameIsNotAValidIdentifier = 'Component name %s%s%s is not a '
|
||||
+'valid identifier';
|
||||
oisHelpTheHelpDatabaseWasUnableToFindFile = 'The help database %s%s%s was '
|
||||
+'unable to find file %s%s%s.';
|
||||
oisHelpTheMacroSInBrowserParamsWillBeReplacedByTheURL = 'The macro %s in '
|
||||
@ -231,7 +239,7 @@ resourcestring
|
||||
oisClearPicture = 'Clear picture';
|
||||
oisLoad = '&Load';
|
||||
oisSave = '&Save';
|
||||
oisCLear = 'C&lear';
|
||||
oisClear = 'C&lear';
|
||||
oisErrorLoadingImage = 'Error loading image';
|
||||
oisErrorLoadingImage2 = 'Error loading image %s%s%s:%s%s';
|
||||
|
||||
|
@ -19,12 +19,7 @@
|
||||
For more information see the big comment part below.
|
||||
|
||||
ToDo:
|
||||
-digits for floattypes -> I hope, I guessed right
|
||||
-TIntegerSet missing -> taking my own
|
||||
-Save ColorDialog settings
|
||||
-System.TypeInfo(Type) missing -> exists already in the fpc 1.1 version
|
||||
but because I want it now with the stable version I will use my
|
||||
workaround
|
||||
-StrToInt64 has a bug. It prints infinitly "something happened"
|
||||
-> taking my own
|
||||
|
||||
@ -39,19 +34,13 @@ unit PropEdits;
|
||||
|
||||
interface
|
||||
|
||||
{$IFNDEF VER1_0}
|
||||
{$DEFINE EnableSessionProps}
|
||||
{$ENDIF}
|
||||
{$DEFINE NewListPropEdit}
|
||||
|
||||
uses
|
||||
Classes, TypInfo, SysUtils, LCLProc, Forms, Controls, GraphType, Graphics,
|
||||
StdCtrls, Buttons, ComCtrls, Menus, LCLType, ExtCtrls, LCLIntf, Dialogs,
|
||||
Grids, EditBtn,
|
||||
{$IFDEF EnableSessionProps}
|
||||
PropertyStorage,
|
||||
{$ENDIF}
|
||||
TextTools, ColumnDlg, ObjInspStrConsts;
|
||||
Grids, EditBtn, PropertyStorage, TextTools, FrmSelectProps, ColumnDlg,
|
||||
ObjInspStrConsts;
|
||||
|
||||
const
|
||||
MaxIdentLength: Byte = 63;
|
||||
@ -2085,199 +2074,6 @@ begin
|
||||
IValue:=0;
|
||||
end;
|
||||
|
||||
{$IFDEF VER1_0 workaround}
|
||||
Function CallSingleFunc(s : Pointer; Address : Pointer;
|
||||
Index, IValue : Longint) : Single; assembler;
|
||||
{$asmmode att}
|
||||
var
|
||||
saveedi,saveesi : dword;
|
||||
asm
|
||||
movl %edi,saveedi
|
||||
movl %esi,saveesi
|
||||
movl S,%esi
|
||||
movl Address,%edi
|
||||
// ? Indexed Function
|
||||
movl Index,%eax
|
||||
testl %eax,%eax
|
||||
je .LINoPush
|
||||
movl IValue,%eax
|
||||
pushl %eax
|
||||
.LINoPush:
|
||||
push %esi
|
||||
call %edi
|
||||
//
|
||||
movl saveedi,%edi
|
||||
movl saveesi,%esi
|
||||
end;
|
||||
|
||||
Function CallDoubleFunc(s : Pointer; Address : Pointer;
|
||||
Index, IValue : Longint) : Double; assembler;
|
||||
var
|
||||
saveedi,saveesi : dword;
|
||||
asm
|
||||
movl %edi,saveedi
|
||||
movl %esi,saveesi
|
||||
movl S,%esi
|
||||
movl Address,%edi
|
||||
// ? Indexed Function
|
||||
movl Index,%eax
|
||||
testl %eax,%eax
|
||||
je .LINoPush
|
||||
movl IValue,%eax
|
||||
pushl %eax
|
||||
.LINoPush:
|
||||
push %esi
|
||||
call %edi
|
||||
//
|
||||
movl saveedi,%edi
|
||||
movl saveesi,%esi
|
||||
end;
|
||||
|
||||
Function CallExtendedFunc(s : Pointer; Address : Pointer;
|
||||
Index, IValue : Longint) : Extended; assembler;
|
||||
var
|
||||
saveedi,saveesi : dword;
|
||||
asm
|
||||
movl %edi,saveedi
|
||||
movl %esi,saveesi
|
||||
movl S,%esi
|
||||
movl Address,%edi
|
||||
// ? Indexed Function
|
||||
movl Index,%eax
|
||||
testl %eax,%eax
|
||||
je .LINoPush
|
||||
movl IValue,%eax
|
||||
pushl %eax
|
||||
.LINoPush:
|
||||
push %esi
|
||||
call %edi
|
||||
//
|
||||
movl saveedi,%edi
|
||||
movl saveesi,%esi
|
||||
end;
|
||||
|
||||
Function GetFloatProp(Instance : TObject;PropInfo : PPropInfo) : Extended;
|
||||
|
||||
var
|
||||
Index,Ivalue : longint;
|
||||
Value : Extended;
|
||||
|
||||
begin
|
||||
SetIndexValues(PropInfo,Index,Ivalue);
|
||||
case (PropInfo^.PropProcs) and 3 of
|
||||
ptField:
|
||||
Case GetTypeData(PropInfo^.PropType)^.FloatType of
|
||||
ftSingle:
|
||||
Value:=PSingle(Pointer(Instance)+Longint(PropInfo^.GetProc))^;
|
||||
ftDouble:
|
||||
Value:=PDouble(Pointer(Instance)+Longint(PropInfo^.GetProc))^;
|
||||
ftExtended:
|
||||
Value:=PExtended(Pointer(Instance)+Longint(PropInfo^.GetProc))^;
|
||||
{$ifndef m68k}
|
||||
ftcomp:
|
||||
Value:=PComp(Pointer(Instance)+Longint(PropInfo^.GetProc))^;
|
||||
{$endif m68k}
|
||||
end;
|
||||
|
||||
ptStatic:
|
||||
Case GetTypeData(PropInfo^.PropType)^.FloatType of
|
||||
ftSingle:
|
||||
Value:=CallSingleFunc(Instance,PropInfo^.GetProc,Index,IValue);
|
||||
ftDouble:
|
||||
Value:=CallDoubleFunc(Instance,PropInfo^.GetProc,Index,IValue);
|
||||
ftExtended:
|
||||
Value:=CallExtendedFunc(Instance,PropInfo^.GetProc,Index,IValue);
|
||||
end;
|
||||
|
||||
ptVirtual:
|
||||
Case GetTypeData(PropInfo^.PropType)^.FloatType of
|
||||
ftSingle:
|
||||
Value:=CallSingleFunc(Instance,
|
||||
PPointer(Pointer(Instance.ClassType)+Longint(PropInfo^.GetProc))^,
|
||||
Index,IValue);
|
||||
ftDouble:
|
||||
Value:=CallDoubleFunc(Instance,
|
||||
PPointer(Pointer(Instance.ClassType)+Longint(PropInfo^.GetProc))^,
|
||||
Index,IValue);
|
||||
ftExtended:
|
||||
Value:=CallExtendedFunc(Instance,
|
||||
PPointer(Pointer(Instance.ClassType)+Longint(PropInfo^.GetProc))^,
|
||||
Index,IValue);
|
||||
end;
|
||||
end;
|
||||
Result:=Value;
|
||||
end;
|
||||
|
||||
Procedure SetFloatProp(Instance : TObject;PropInfo : PPropInfo;
|
||||
Value : Extended);
|
||||
|
||||
type
|
||||
TMySetExtendedProc = procedure(const AValue: Extended) of object;
|
||||
TMySetExtendedProcIndex = procedure(Index: integer; const AValue: Extended) of object;
|
||||
TMySetDoubleProc = procedure(const AValue: Double) of object;
|
||||
TMySetDoubleProcIndex = procedure(Index: integer; const AValue: Double) of object;
|
||||
TMySetSingleProc = procedure(const AValue: Single) of object;
|
||||
TMySetSingleProcIndex = procedure(Index: integer; const AValue: Single) of object;
|
||||
|
||||
Var IValue,Index : longint;
|
||||
AMethod: TMethod;
|
||||
|
||||
begin
|
||||
SetIndexValues(PropInfo,Index,Ivalue);
|
||||
case (PropInfo^.PropProcs shr 2) and 3 of
|
||||
|
||||
ptfield:
|
||||
Case GetTypeData(PropInfo^.PropType)^.FloatType of
|
||||
ftSingle:
|
||||
PSingle(Pointer(Instance)+Longint(PropInfo^.SetProc))^:=Single(Value);
|
||||
ftDouble:
|
||||
PDouble(Pointer(Instance)+Longint(PropInfo^.SetProc))^:=Double(Value);
|
||||
ftExtended:
|
||||
PExtended(Pointer(Instance)+Longint(PropInfo^.SetProc))^:=Value;
|
||||
{$ifndef m68k}
|
||||
ftcomp:
|
||||
PComp(Pointer(Instance)+Longint(PropInfo^.SetProc))^:=Comp(Value);
|
||||
{$endif m68k}
|
||||
{ Uncommenting this code results in an internal error!!
|
||||
ftFixed16:
|
||||
PFixed16(Pointer(Instance)+Longint(PropInfo^.SetProc))^:=Value;
|
||||
ftfixed32:
|
||||
PFixed32(Pointer(Instance)+Longint(PropInfo^.SetProc))^:=Value;
|
||||
}
|
||||
end;
|
||||
|
||||
ptStatic, ptVirtual:
|
||||
begin
|
||||
if ((PropInfo^.PropProcs shr 2) and 3)=ptStatic then
|
||||
AMethod.Code:=PropInfo^.SetProc
|
||||
else
|
||||
AMethod.Code:=
|
||||
PPointer(Pointer(Instance.ClassType)+Longint(PropInfo^.SetProc))^;
|
||||
AMethod.Data:=Instance;
|
||||
Case GetTypeData(PropInfo^.PropType)^.FloatType of
|
||||
ftSingle:
|
||||
if Index=0 then
|
||||
TMySetSingleProc(AMethod)(Single(Value))
|
||||
else
|
||||
TMySetSingleProcIndex(AMethod)(IValue,Single(Value));
|
||||
|
||||
ftDouble:
|
||||
if Index=0 then
|
||||
TMySetDoubleProc(AMethod)(Double(Value))
|
||||
else
|
||||
TMySetDoubleProcIndex(AMethod)(IValue,Double(Value));
|
||||
|
||||
ftExtended:
|
||||
if Index=0 then
|
||||
TMySetExtendedProc(AMethod)(Value)
|
||||
else
|
||||
TMySetExtendedProcIndex(AMethod)(IValue,Value);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
{$ENDIF VER1_0}
|
||||
|
||||
function TPropertyEditor.GetFloatValueAt(Index:Integer):Extended;
|
||||
begin
|
||||
with FPropList^[Index] do Result:=GetFloatProp(Instance,PropInfo);
|
||||
@ -2336,15 +2132,6 @@ end;
|
||||
function TPropertyEditor.GetName:shortstring;
|
||||
begin
|
||||
Result:=FPropList^[0].PropInfo^.Name;
|
||||
{$IFDEF Ver1_0}
|
||||
// the 1.0.x fpc has only uppercase RTTI
|
||||
// -> make it a little bit nicer
|
||||
Result:=lowercase(Result);
|
||||
if length(Result)>0 then
|
||||
Result[1]:=upcase(Result[1]);
|
||||
if (length(Result)>2) and (Result[1]='O') and (Result[2]='n') then
|
||||
Result[3]:=upcase(Result[3]);
|
||||
{$ENDIF}
|
||||
end;
|
||||
|
||||
function TPropertyEditor.GetOrdValue:Longint;
|
||||
@ -3063,11 +2850,7 @@ end;
|
||||
|
||||
function TFloatPropertyEditor.GetValue: ansistring;
|
||||
const
|
||||
Precisions: array[TFloatType] of Integer = (7, 15, 19, 19, 19
|
||||
{$ifdef VER1_0}
|
||||
, 15, 31
|
||||
{$endif VER1_0}
|
||||
);
|
||||
Precisions: array[TFloatType] of Integer = (7, 15, 19, 19, 19);
|
||||
begin
|
||||
Result := FloatToStrF(GetFloatValue, ffGeneral,
|
||||
Precisions[GetTypeData(GetPropType)^.FloatType], 0);
|
||||
@ -4037,11 +3820,6 @@ begin
|
||||
and (Result[1] in ['O','o']) and (Result[2] in ['N','n'])
|
||||
then
|
||||
System.Delete(Result,1,2);
|
||||
{$IFDEF Ver1_0}
|
||||
// the 1.0.x compilers have only uppercase RTTI. Make the names a little more
|
||||
// nicer
|
||||
Result := copy(Result,1,1)+lowercase(copy(Result,2,length(Result)-1));
|
||||
{$ENDIF}
|
||||
end;
|
||||
|
||||
function TMethodPropertyEditor.GetValue: ansistring;
|
||||
@ -4051,37 +3829,12 @@ end;
|
||||
|
||||
procedure TMethodPropertyEditor.GetValues(Proc: TGetStringProc);
|
||||
begin
|
||||
DebugLn('### TMethodPropertyEditor.GetValues');
|
||||
Proc('(None)');
|
||||
//DebugLn('### TMethodPropertyEditor.GetValues');
|
||||
Proc(oisNone);
|
||||
PropertyHook.GetMethods(GetTypeData(GetPropType), Proc);
|
||||
end;
|
||||
|
||||
procedure TMethodPropertyEditor.SetValue(const NewValue: ansistring);
|
||||
{
|
||||
procedure CheckChainCall(const MethodName: shortstring; Method: TMethod);
|
||||
var
|
||||
Persistent: TPersistent;
|
||||
Component: TComponent;
|
||||
InstanceMethod: shortstring;
|
||||
Instance: TComponent;
|
||||
begin
|
||||
Persistent := GetComponent(0);
|
||||
if Persistent is TComponent then begin
|
||||
Component := TComponent(Persistent);
|
||||
if (Component.Name <> '')
|
||||
and (TObject(Method.Data) <> PropertyHook.LookupRoot)
|
||||
and (TObject(Method.Data) is TComponent) then
|
||||
begin
|
||||
Instance := TComponent(Method.Data);
|
||||
InstanceMethod := Instance.MethodName(Method.Code);
|
||||
if InstanceMethod <> '' then begin
|
||||
PropertyHook.ChainCall(MethodName, Instance.Name, InstanceMethod,
|
||||
GetTypeData(GetPropType));
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
}
|
||||
var
|
||||
CreateNewMethod: Boolean;
|
||||
CurValue: ansistring;
|
||||
@ -4091,7 +3844,7 @@ var
|
||||
begin
|
||||
CurValue:=GetValue;
|
||||
if CurValue=NewValue then exit;
|
||||
DebugLn('### TMethodPropertyEditor.SetValue A OldValue="',CurValue,'" NewValue=',NewValue);
|
||||
//DebugLn('### TMethodPropertyEditor.SetValue A OldValue="',CurValue,'" NewValue=',NewValue);
|
||||
NewMethodExists:=IsValidIdent(NewValue)
|
||||
and PropertyHook.MethodExists(NewValue,GetTypeData(GetPropType),
|
||||
NewMethodIsCompatible,NewMethodIsPublished,NewIdentIsMethod);
|
||||
@ -4148,13 +3901,13 @@ begin
|
||||
PropertyHook.ShowMethod(NewValue);
|
||||
end;
|
||||
end;
|
||||
DebugLn('### TMethodPropertyEditor.SetValue END NewValue=',GetValue);
|
||||
//DebugLn('### TMethodPropertyEditor.SetValue END NewValue=',GetValue);
|
||||
end;
|
||||
|
||||
{ TPersistentPropertyEditor }
|
||||
|
||||
function TPersistentPropertyEditor.FilterFunc(
|
||||
const ATestEditor: TPropertyEditor{IProperty}): Boolean;
|
||||
const ATestEditor: TPropertyEditor): Boolean;
|
||||
begin
|
||||
Result := not (paNotNestable in ATestEditor.GetAttributes);
|
||||
end;
|
||||
@ -4165,7 +3918,7 @@ begin
|
||||
end;
|
||||
|
||||
function TPersistentPropertyEditor.GetSelections:
|
||||
TPersistentSelectionList{IDesignerSelections};
|
||||
TPersistentSelectionList;
|
||||
var
|
||||
I: Integer;
|
||||
begin
|
||||
@ -4224,13 +3977,10 @@ end;
|
||||
procedure TPersistentPropertyEditor.GetProperties(Proc:TGetPropEditProc);
|
||||
var
|
||||
LPersistents: TPersistentSelectionList;
|
||||
//LDesigner: TIDesigner;
|
||||
begin
|
||||
LPersistents := GetSelections;
|
||||
if LPersistents <> nil then
|
||||
begin
|
||||
//if not Supports(FindRootDesigner(LPersistents[0]), IDesigner, LDesigner) then
|
||||
// LDesigner := Designer;
|
||||
GetPersistentProperties(LPersistents, tkAny, PropertyHook, Proc, nil);
|
||||
end;
|
||||
end;
|
||||
@ -4262,7 +4012,7 @@ end;
|
||||
|
||||
procedure TPersistentPropertyEditor.GetValues(Proc: TGetStringProc);
|
||||
begin
|
||||
Proc('(none)');
|
||||
Proc(oisNone);
|
||||
if Assigned(PropertyHook) then
|
||||
PropertyHook.GetComponentNames(GetTypeData(GetPropType), Proc);
|
||||
end;
|
||||
@ -4271,13 +4021,13 @@ procedure TPersistentPropertyEditor.SetValue(const NewValue: ansistring);
|
||||
var Component: TComponent;
|
||||
begin
|
||||
if NewValue=GetValue then exit;
|
||||
if (NewValue = '') or (NewValue='(none)') then
|
||||
if (NewValue = '') or (NewValue=oisNone) then
|
||||
Component := nil
|
||||
else begin
|
||||
if Assigned(PropertyHook) then begin
|
||||
Component := PropertyHook.GetComponent(NewValue);
|
||||
if not (Component is GetTypeData(GetPropType)^.ClassType) then begin
|
||||
raise EPropertyError.Create('Invalid property value'{@SInvalidPropertyValue});
|
||||
raise EPropertyError.Create(oisInvalidPropertyValue);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
@ -4404,7 +4154,8 @@ end;
|
||||
procedure TComponentNamePropertyEditor.SetValue(const NewValue: ansistring);
|
||||
begin
|
||||
if (not IsValidIdent(NewValue)) or (NewValue='') then
|
||||
raise Exception.Create('Component name "'+NewValue+'" is not a valid identifier');
|
||||
raise Exception.Create(Format(oisComponentNameIsNotAValidIdentifier, ['"',
|
||||
NewValue, '"']));
|
||||
inherited SetValue(NewValue);
|
||||
PropertyHook.ComponentRenamed(TComponent(GetComponent(0)));
|
||||
end;
|
||||
@ -4748,7 +4499,7 @@ var
|
||||
begin
|
||||
CurValue := TShortCut(OrdValue);
|
||||
if CurValue = scNone then
|
||||
Result := '(None)'//srNone
|
||||
Result := oisNone
|
||||
else
|
||||
Result := ShortCutToText(CurValue);
|
||||
end;
|
||||
@ -4757,7 +4508,7 @@ procedure TShortCutPropertyEditor.GetValues(Proc: TGetStrProc);
|
||||
var
|
||||
I: Integer;
|
||||
begin
|
||||
Proc('(none)'{srNone});
|
||||
Proc(oisNone);
|
||||
for I := 1 to High(ShortCuts) do Proc(ShortCutToText(ShortCuts[I]));
|
||||
end;
|
||||
|
||||
@ -4766,11 +4517,11 @@ var
|
||||
NewValue: TShortCut;
|
||||
begin
|
||||
NewValue := 0;
|
||||
if (Value <> '') and (AnsiCompareText(Value, '(none)'{srNone}) <> 0) then
|
||||
if (Value <> '') and (AnsiCompareText(Value, oisNone) <> 0) then
|
||||
begin
|
||||
NewValue := TextToShortCut(Value);
|
||||
if NewValue = 0 then
|
||||
raise EPropertyError.Create('Invalid Property Value'{@SInvalidPropertyValue});
|
||||
raise EPropertyError.Create(oisInvalidPropertyValue);
|
||||
end;
|
||||
SetOrdValue(NewValue);
|
||||
end;
|
||||
@ -4824,7 +4575,7 @@ begin
|
||||
Parent:= Self;
|
||||
SetBounds(x,y,MaxX-2*x, Height);
|
||||
Anchors:= [akLeft, akTop, akRight];
|
||||
Caption:= '0 lines, 0 chars';
|
||||
Caption:= ois0Lines0Chars;
|
||||
end;
|
||||
|
||||
Memo := TMemo.Create(self);
|
||||
@ -4899,7 +4650,7 @@ end;
|
||||
|
||||
procedure TStringsPropEditorDlg.MemoChanged(Sender : TObject);
|
||||
begin
|
||||
StatusLabel.Text:= Format('%d lines, %d chars', [Memo.Lines.Count,
|
||||
StatusLabel.Text:= Format(oisDLinesDChars, [Memo.Lines.Count,
|
||||
(Length(Memo.Lines.Text) - Memo.Lines.Count * Length(LineEnding))]);
|
||||
end;
|
||||
|
||||
@ -5246,36 +4997,17 @@ begin
|
||||
end;
|
||||
|
||||
procedure TSessionPropertiesPropertyEditor.Edit;
|
||||
var
|
||||
Dialog: TStringsPropEditorDlg;
|
||||
s: String;
|
||||
i: Integer;
|
||||
c: Char;
|
||||
begin
|
||||
Dialog:=TStringsPropEditorDlg.Create(nil);
|
||||
try
|
||||
Dialog.Editor:=Self;
|
||||
s:=GetStrValue;
|
||||
for i:=1 to length(s) do if s[i]=';' then s[i]:=#10;
|
||||
Dialog.Memo.Text:=s;
|
||||
if Dialog.ShowModal=mrOk then begin
|
||||
s:=Dialog.Memo.Text;
|
||||
i:=1;
|
||||
while i<=length(s) do begin
|
||||
c:=s[i];
|
||||
if c in [#13,#10] then begin
|
||||
s[i]:=';';
|
||||
inc(i);
|
||||
if (i<=length(s)) and (s[i] in [#10,#13]) and (c<>s[i]) then
|
||||
System.Delete(s,i,1);
|
||||
end else
|
||||
inc(i);
|
||||
end;
|
||||
SetStrValue(s);
|
||||
With TSelectPropertiesForm.Create(Application) do
|
||||
Try
|
||||
PropertyComponent:=GetComponent(0) as TComponent;
|
||||
SelectedProperties:=GetStrValue;
|
||||
Caption:=Format(oisPropertiesOf, [TComponent(GetComponent(0)).Name]);
|
||||
If (ShowModal=mrOK) then
|
||||
SetStrValue(SelectedProperties);
|
||||
Finally
|
||||
Free;
|
||||
end;
|
||||
finally
|
||||
Dialog.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
//==============================================================================
|
||||
@ -6404,10 +6136,8 @@ begin
|
||||
nil, 'AnchorSideRight', THiddenPropertyEditor);
|
||||
RegisterPropertyEditor(DummyClassForPropTypes.PTypeInfos('TAnchorSide'),
|
||||
nil, 'AnchorSideBottom', THiddenPropertyEditor);
|
||||
{$IFDEF EnableSessionProps}
|
||||
RegisterPropertyEditor(DummyClassForPropTypes.PTypeInfos('AnsiString'),
|
||||
TCustomPropertyStorage, 'Filename', TFileNamePropertyEditor);
|
||||
{$ENDIF}
|
||||
end;
|
||||
|
||||
procedure FinalPropEdits;
|
||||
|
Loading…
Reference in New Issue
Block a user