MMPropEd.pas
上传用户:hylc_2004
上传日期:2014-01-23
资源大小:46800k
文件大小:10k
源码类别:

Delphi控件源码

开发平台:

Delphi

  1. {========================================================================}
  2. {=                (c) 1995-98 SwiftSoft Ronald Dittrich                 =}
  3. {========================================================================}
  4. {=                          All Rights Reserved                         =}
  5. {========================================================================}
  6. {=  D 01099 Dresden             = Tel.: +0351-8012255                   =}
  7. {=  Loewenstr.7a                = info@swiftsoft.de                     =}
  8. {========================================================================}
  9. {=  Actual versions on http://www.swiftsoft.de/mmtools.html             =}
  10. {========================================================================}
  11. {=  This code is for reference purposes only and may not be copied or   =}
  12. {=  distributed in any format electronic or otherwise except one copy   =}
  13. {=  for backup purposes.                                                =}
  14. {=                                                                      =}
  15. {=  No Delphi Component Kit or Component individually or in a collection=}
  16. {=  subclassed or otherwise from the code in this unit, or associated   =}
  17. {=  .pas, .dfm, .dcu, .asm or .obj files may be sold or distributed     =}
  18. {=  without express permission from SwiftSoft.                          =}
  19. {=                                                                      =}
  20. {=  For more licence informations please refer to the associated        =}
  21. {=  HelpFile.                                                           =}
  22. {========================================================================}
  23. {=  $Date: 20.01.1998 - 18:00:00 $                                      =}
  24. {========================================================================}
  25. unit MMPropEd;
  26. {$I COMPILER.INC}
  27. interface
  28. uses
  29.     Windows,
  30.     SysUtils,
  31.     Classes,
  32.     Controls,
  33.     Dialogs,
  34.     {$IFDEF DELPHI6}
  35.     DesignIntf,
  36.     DesignEditors,
  37.     {$ELSE}
  38.     DsgnIntf,
  39.     {$ENDIF}
  40.     MMObj,
  41.     MMUtils,
  42.     MMAbout,
  43.     MMProps,
  44.     MMMemMap,
  45.     MMSplit,
  46.     MMLEDs;
  47. type
  48.     {$IFDEF TRIAL}
  49.     {-- TMMAboutBoxEditor -----------------------------------------------------}
  50.     TMMAboutBoxEditor = class(TPropertyEditor)
  51.     public
  52.         function  GetAttributes: TPropertyAttributes; override;
  53.         procedure Edit; override;
  54.         function  GetValue: string; override;
  55.     end;
  56.     {$ENDIF}
  57.     {-- TMMPropertiesEditor ---------------------------------------------------}
  58.     TMMPropertiesEditor = class(TComponentEditor)
  59.     public
  60.         procedure ExecuteVerb(Index: Integer); override;
  61.         function  GetVerb(Index: Integer): string; override;
  62.         function  GetVerbCount: Integer; override;
  63.     end;
  64.     {-- TMMMemMapFileNameProperty ---------------------------------------------}
  65.     TMMMemMapFileNameProperty = class(TStringProperty)
  66.     public
  67.        procedure Edit; override;
  68.        function  GetAttributes: TPropertyAttributes; override;
  69.     end;
  70.     {-- TMMSplitterSizeControlEditor ------------------------------------------}
  71.     TMMSplitterSizeControlEditor = class(TComponentProperty)
  72.     public
  73.        procedure GetValues(Proc: TGetStrProc); override;
  74.     end;
  75.     {-- TMMLEDDigitConnectEditor ----------------------------------------------}
  76.     TMMLEDDigitConnectEditor = class(TComponentProperty)
  77.     public
  78.       procedure GetValues(Proc: TGetStrProc); override;
  79.     end;
  80.     {-- TMMIntegerProperty ----------------------------------------------------}
  81.     TMMIntegerProperty = class(TIntegerProperty)
  82.     private
  83.         FIntToIdent: TIntToIdent;
  84.         FIdentToInt: TIdentToInt;
  85.     protected
  86.         procedure GetConverters(var IntToIdent: TIntToIdent; var IdentToInt: TIdentToInt); virtual; abstract;
  87.         procedure GetConsts(List: TList); virtual; abstract;
  88.     public
  89.         procedure Initialize; override;
  90.         function  GetAttributes: TPropertyAttributes; override;
  91.         function  GetValue: string; override;
  92.         procedure SetValue(const Value: string); override;
  93.         procedure GetValues(Proc: TGetStrProc); override;
  94.     end;
  95.     {-- TMMDeviceIdProperty ---------------------------------------------------}
  96.     TMMDeviceIdProperty = class(TMMIntegerProperty)
  97.     protected
  98.         procedure GetConverters(var IntToIdent: TIntToIdent; var IdentToInt: TIdentToInt); override;
  99.         procedure GetConsts(List: TList); override;
  100.     end;
  101. implementation
  102. uses
  103.     Consts
  104.     {$IFDEF DELPHI6}
  105.     ,RTLConsts
  106.     {$ENDIF}
  107.     ;
  108. {$IFDEF TRIAL}
  109. {== TMMAboutBoxEditor =========================================================}
  110. function TMMAboutBoxEditor.GetAttributes;
  111. begin
  112.      Result := inherited GetAttributes + [paDialog,paReadOnly];
  113. end;
  114. {------------------------------------------------------------------------------}
  115. function TMMAboutBoxEditor.GetValue: string;
  116. begin
  117.      {This is the caption displayed in the Object Inspector}
  118.      Result := 'About...';
  119. end;
  120. {------------------------------------------------------------------------------}
  121. Procedure TMMAboutBoxEditor.Edit;
  122. begin
  123.      with TMMAboutBox.Create(NIL) do
  124.      try
  125.         MessageBeep(0);
  126.         ShowModal;
  127.      finally
  128. Free;
  129.      end;
  130. end;
  131. {$ENDIF}
  132. {== TMMPropertiesEditor =======================================================}
  133. procedure TMMPropertiesEditor.ExecuteVerb(Index: Integer);
  134. begin
  135.    TMMPropertiesDialog(Component).Execute;
  136. end;
  137. {-- TMMPropertiesEditor -------------------------------------------------------}
  138. function TMMPropertiesEditor.GetVerb(Index: Integer): string;
  139. begin
  140.    Result := 'Execute Dialog...';
  141. end;
  142. {-- TMMPropertiesEditor -------------------------------------------------------}
  143. function TMMPropertiesEditor.GetVerbCount: Integer;
  144. begin
  145.    Result := 1;
  146. end;
  147. {== TMMMemMapFileNameProperty =================================================}
  148. procedure TMMMemMapFileNameProperty.Edit;
  149. begin
  150.    with TOpenDialog.Create(nil) do
  151.    try
  152.       FileName := GetStrValue;
  153.       Filter := {$IFDEF DELPHI3}SDefaultFilter{$ELSE}LoadStr(SDefaultFilter){$ENDIF};
  154.       Options := Options + [ofPathMustExist, ofFileMustExist, ofHideReadOnly];
  155.       Title := LoadResStr(IDS_SELECTFILE);
  156.       if Execute then SetValue(FileName);
  157.    finally
  158.       Free;
  159.    end;
  160. end;
  161. {-- TMMMemMapFileNameProperty -------------------------------------------------}
  162. function TMMMemMapFileNameProperty.GetAttributes: TPropertyAttributes;
  163. begin
  164.    Result := [paDialog];
  165. end;
  166. {== TMMSplitterSizeControlEditor ========================================}
  167. procedure TMMSplitterSizeControlEditor.GetValues(Proc: TGetStrProc);
  168. var
  169.   i: Integer;
  170.   Splitter: TMMSplitter;
  171.   P1: TWinControl;
  172. begin
  173.    Splitter := GetComponent(0) as TMMSplitter;
  174.    for i := 0 to Splitter.Parent.ControlCount-1 do
  175.    begin
  176.       P1 := TWinControl(Splitter.Parent.Controls[i]);
  177.       if (P1.Name <> '') and (P1 is TWinControl) and not (P1 is TMMSplitter) and
  178.          (P1.Align in [alLeft,alRight,alTop,alBottom]) then
  179.          Proc(P1.Name);
  180.    end;
  181. end;
  182. {== TMMLEDDigitConnectEditor ============================================}
  183. procedure TMMLEDDigitConnectEditor.GetValues(Proc: TGetStrProc);
  184. type
  185.   TGetStrFunc = function(const Value: string): Integer of object;
  186. var
  187.    i: Integer;
  188.    LED: TMMLEDDigit;
  189.    Component: TComponent;
  190. begin
  191.    LED := GetComponent(0) as TMMLEDDigit;
  192.    {$IFDEF DELPHI6}
  193.    for i := 0 to Designer.Root.ComponentCount-1 do
  194.    {$ELSE}
  195.    for i := 0 to Designer.Form.ComponentCount-1 do
  196.    {$ENDIF}
  197.    begin
  198.       {$IFDEF DELPHI6}
  199.       Component := Designer.Root.Components[i];
  200.       {$ELSE}
  201.       Component := Designer.Form.Components[i];
  202.       {$ENDIF}
  203.       if (Component.Name <> '') then
  204.          if (Component is TMMLEDDigit) and (Component <> LED) then
  205.             Proc(Component.Name);
  206.    end;
  207. end;
  208. {== TMMIntegerProperty ========================================================}
  209. procedure TMMIntegerProperty.Initialize;
  210. begin
  211.    inherited Initialize;
  212.    GetConverters(FIntToIdent,FIdentToInt);
  213. end;
  214. {-- TMMIntegerProperty --------------------------------------------------------}
  215. function TMMIntegerProperty.GetAttributes: TPropertyAttributes;
  216. begin
  217.    Result := [paMultiSelect,paValueList{$IFDEF WIN32},paRevertable{$ENDIF}];
  218. end;
  219. {-- TMMIntegerProperty --------------------------------------------------------}
  220. function TMMIntegerProperty.GetValue: string;
  221. begin
  222.    if (@FIntToIdent = nil) or not FIntToIdent(GetOrdValue,Result) then
  223.        Result := IntToStr(GetOrdValue);
  224. end;
  225. {-- TMMIntegerProperty --------------------------------------------------------}
  226. procedure TMMIntegerProperty.SetValue(const Value: string);
  227. var
  228.     IV: LongInt;
  229. begin
  230.    if (@FIdentToInt = nil) or not FIdentToInt(Value,IV) then
  231.        IV := StrToInt(Value);
  232.    SetOrdValue(IV);
  233. end;
  234. {-- TMMIntegerProperty --------------------------------------------------------}
  235. procedure TMMIntegerProperty.GetValues(Proc: TGetStrProc);
  236. var
  237.    Vals : TList;
  238.    i    : Integer;
  239.    S    : string;
  240. begin
  241.    if @FIntToIdent <> nil then
  242.    begin
  243.       Vals := TList.Create;
  244.       try
  245.          GetConsts(Vals);
  246.          for i := 0 to Vals.Count - 1 do
  247.              if FIntToIdent(LongInt(Vals[i]),S) then
  248.                 Proc(S);
  249.       finally
  250.          Vals.Free;
  251.       end;
  252.    end;
  253. end;
  254. {== TMMDeviceIdProperty =======================================================}
  255. procedure TMMDeviceIdProperty.GetConverters(var IntToIdent: TIntToIdent; var IdentToInt: TIdentToInt);
  256. begin
  257.    IntToIdent := DeviceIdToIdent;
  258.    IdentToInt := IdentToDeviceId;
  259. end;
  260. {-- TMMDeviceIdProperty -------------------------------------------------------}
  261. procedure TMMDeviceIdProperty.GetConsts(List: TList);
  262. begin
  263.    List.Add(Pointer(MapperId));
  264.    List.Add(Pointer(InvalidId));
  265. end;
  266. end.