Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   In Design: Control no has parent window (https://www.clubdelphi.com/foros/showthread.php?t=39660)

Negegoca 26-01-2007 10:33:11

In Design: Control no has parent window
 
Tengo varios días tratando de corregir este error, solo me da en tiempo de diseño, basicamente es un TEdit multi-uso (Alianeación, numeros con formato, decimales, un caracter fijo, etc), el componente funciona perfectamente en run-time, pero en Design-time me da el error: 'Control "TEditEx1" no has parent window' y lo borra del formulario. He leido varios foros (en ingles) y no dan una solución concreta solo dicen que el error se da en "CreateWnd" de TWinControl. Pongo el código para que se den una idea...

Código Delphi [-]
{**** TCustomEditEx *****}
constructor TCustomEditEx.Create(AOwner: TComponent);
begin
   Inherited Create(AOwner);
   FRangeChar := [];
   FFixedChar := #0;
   FFixedPos := fpLeft;
   FHasSign := False;
   FDecimals := 0;
   FThousands := False;
   FNumPadDot := False;
   FValidChars := [];
   FPorcent := False;
   Formating := False;
   _FixedChar := False;
   FCreating := True;
   FAlignment := taLeftJustify;
   FRangeChar := [rcNumber, rcAlpha, rcSymbol, rcExtended];
end;

procedure TCustomEditEx.CreateWnd;
var
  FixedWidth: LongInt;
begin
   FCreating := True;
  try
     inherited CreateWnd; { <-- Aquí adentro es el error, especificamente en TWinControl.CreateWnd: 
     ... 
     if (WndParent = 0) and (Style and WS_CHILD <> 0) then
        if (Owner <> nil) and (csReading in Owner.ComponentState) and
           (Owner is TWinControl) then
           WndParent := TWinControl(Owner).Handle
        else
           raise EInvalidOperation.CreateFmt(SParentRequired, [Name]);
     ... 
     }
  finally
     FCreating := False;
  end;
  if FFixedChar <> #0 then
   begin
      if FFixedPos = fpLeft then
         FixedWidth := MakeLong(GetFixedWidth, 0)
      else
         FixedWidth := MakeLong(0, GetFixedWidth);
      SendMessage(Handle, EM_SETMARGINS, EC_LeftMargin or EC_RightMargin, FixedWidth);
   end;
end;

procedure TCustomEditEx.CreateParams(var params: TCreateParams);
const
   Styles : Array [TAlignment] of DWORD = (ES_LEFT, ES_RIGHT, ES_CENTER );
begin
   inherited;
   params.style := params.style or Styles[FAlignment];
end;

destructor TCustomEditEx.Destroy;
begin
   inherited Destroy;
end;

Elimine todo posible llamada al Api o al VCL usando tecnicas de Borland pero nada, sigue el mismo error...
:confused: :confused: :confused:

Si quieren todo el resto del código, solo diganme donde subirlo

Estaba identado, no se que paso cuando lo pegé... :-p

roman 26-01-2007 18:26:36

Por favor, indenta tu código. Es muy difícil entenderlo así.

// Saludos


La franja horaria es GMT +2. Ahora son las 19:31:03.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi