El inspector de objetos Delphi no muestra las propiedades adicionales de los descendientes de TFrame por diseño. Las personas tienden a sugerir el uso de un truco conocido que se usa comúnmente para mostrar las propiedades del descendiente de TForm en el inspector de objetos. El truco es: Registrar módulo personalizado para los descendientes TForm a Delphi IDE a través de diseño de paquete momento como:Mostrando las propiedades adicionales del descendiente de TFrame en el inspector de objetos
RegisterCustomModule(TMyFrame, TCustomModule);
El inspector de objetos puede mostrar propiedades adicionales de la instancia del TFrame Descendiente de esta manera, pero pierde sus comportamientos marco, si bien es incrustado en una forma. No se puede redistribuir, no es posible implementar eventos para sus subcomponentes y acepta controles secundarios (lo que no debería ser). Pero se comporta normalmente en su propia área de diseño.
Parece, esos comportamientos proporcionados por Delphi IDE especialmente solo para TFrame. Problaly no son tipo de instalaciones genéricas.
¿Hay alguna otra forma de lograr esto sin perder comportamientos de cuadros?
estoy usando Delphi 2007
@Tondrej,
Leer comentarios para el problema, gracias de antemano.
frameunit.dfm:
object MyFrame: TMyFrame
Left = 0
Top = 0
Width = 303
Height = 172
TabOrder = 0
object Edit1: TEdit
Left = 66
Top = 60
Width = 151
Height = 21
TabOrder = 0
Text = 'Edit1'
end
end
unit frameunit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TBaseFrame = Class(TFrame)
protected
Fstr: string;
procedure Setstr(const Value: string);virtual;
published
Property str:string read Fstr write Setstr;
End;
TMyFrame = class(TBaseFrame)
Edit1: TEdit;
private
// This won't be called in designtime. But i need this to be called in designtime
Procedure Setstr(const Value: string);override;
end;
implementation
{$R *.dfm}
{ TBaseFrame }
procedure TBaseFrame.Setstr(const Value: string);
begin
Fstr := Value;
end;
{ TMyFrame }
procedure TMyFrame.Setstr(const Value: string);
begin
inherited;
Edit1.Text := Fstr;
// Sadly this code won't work and Edit1 won't be updated in designtime.
end;
end.
unit RegisterUnit;
interface
procedure Register;
implementation
uses
Windows, DesignIntf, frameunit;
procedure Register;
var
delphivclide: THandle;
TFrameModule: TCustomModuleClass;
begin
delphivclide := GetModuleHandle('delphivclide100.bpl');
if delphivclide <> 0 then
begin
TFrameModule := GetProcAddress(delphivclide, '@[email protected]@');
if Assigned(TFrameModule) then
begin
RegisterCustomModule(frameunit.TBaseFrame, TFrameModule);
// Just registering that won't cause Tmyframe to loose its frame behaviours
// but additional properties won't work well.
//RegisterCustomModule(frameunit.TMyFrame, TFrameModule);
// That would cause Tmyframe to lose its frame behaviours
// But additional properties would work well.
end;
end;
end;
end.
Niza, que havn't marcos utilizado durante algún tiempo, porque creo que no vale la pena la molestia. Pero voy a probar este. –