Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > FireMonkey
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-03-2022
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.333
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Realmente es curioso y aunque no estoy familiarizado con la creación de componentes en FMX, no veo nada raro en el código.
Es más, he probado el mismo componente para VCL y funciona correctamente.



Habrá que mirarse esto:
https://docwiki.embarcadero.com/RADS...ponent_(Delphi)

Y esto:
https://docwiki.embarcadero.com/RADS...mponents_Guide
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #2  
Antiguo 10-03-2022
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.333
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Me acabo de dar cuenta de que el efecto también pasa en diseño (no sólo en ejecución) cuando pasas a la visión del DFM (ALT+F12).
Es como si el componente (Navigator) no destruyera el rectángulo de su interior y luego lo volviera a crear.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 10-03-2022
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.333
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Bueno, aclarado.
El problema está en la línea que asigna en Parent, que imagino que en FMX la lía. por el tema este de que puedes crear subcomponentes "dentro" de otros componentes (siempre que estos lo permita).

Eliminala y de paso puedes simplificar un poco el código. Esto funciona perfectamente:

Código Delphi [-]
constructor TNavegadorGrid.Create(AOwner: TComponent);
begin
  inherited;

  Height := 25;
  Width := 268;
  Stroke.Kind := Stroke.Kind.bkNone;
  fill.Color := TAlphaColorRec.White;

  if not Assigned(RecBtFirst) then
  begin
    RecBtFirst := TRectangle.Create(self);
    With RecBtFirst do
    begin
////////////      parent := self;
      Align := TAlignLayout.Left;
      Stroke.Kind := Stroke.Kind.bkNone;
      fill.Color := TAlphaColorRec.red;
    end;

    ImFirst := Timage.Create(RecBtFirst);
    ImFirst.parent := RecBtFirst;
    ImFirst.Align := ImFirst.Align.alClient;
    ImFirst.Bitmap.LoadFromStream(TResourceStream.Create(HInstance, 'RES_IMG_OK_16X', RT_RCDATA));
  end;
end;
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #4  
Antiguo 11-03-2022
juank1971 juank1971 is offline
Miembro
 
Registrado: feb 2008
Posts: 230
Poder: 17
juank1971 Va por buen camino
gracias por la ayuda .
Responder Con Cita
  #5  
Antiguo 29-04-2022
juank1971 juank1971 is offline
Miembro
 
Registrado: feb 2008
Posts: 230
Poder: 17
juank1971 Va por buen camino
continuando con el tema

bueno amigos continuando con el navegador donde nos quedamos, ahora quise poner un dataset a la clase como propiedad Published con la idea de enlazar ese componente navegador, con un dataset en tiempo diseño y

funciona bien hasta el momento en que quise comunicarme con el dataset para interceptar algun evento del mismo

pero me da error, creo que es la forma en que estoy tratando de instanciar la clase dataset, no estoy seguro como debo hacerlo

me queda de esta manera el fragmento de código: el error lo da en vDataSet.AfterPost:= DataSetAfterPost ;


Código Delphi [-]
TNavegadorGrid = class(TRectangle)
  private
  var
    // Propiedades del contenedor Principal
    vDataSet: Tdataset;
    vbtActivo: TRectangle;
    // botones
    RecBtFirst, RecBtPrior, RecBtNext, RecBtLast, RecBtEdit, RecBtPost, RecBtDelete, RecBtFiltrar, RecBtAppend,
      RecBtRefresh, RecBtCancel: TRectangle;
    // imagenes
    ImFirst, ImPrior, ImNext, ImLast, ImEdit, ImPost, ImDelete, ImFiltrar, ImAppend, ImRefresh, ImCancel: Timage;
    // LabelContador de records
    RecordCantidad, RecordActual: integer;
    LCantidad: TLabel;
  protected
  public
    property btActivo: TRectangle read vbtActivo write vbtActivo;
    constructor Create(AOwner: TComponent); override;
    procedure ImageClick(Sender: TObject);
    procedure ActualizaRegistros;
    procedure HabilitaBoton(bt: Timage; Ha: boolean);
    procedure DataSetAfterPost(DataSet: Tdataset);
  published
    property DataSet: Tdataset read vDataSet write vDataSet;
  end;

procedure Register;

implementation
........
procedure Register;
begin
  RegisterComponents('MyComponents', [TNavegadorGrid]);
end;

constructor TNavegadorGrid.Create(AOwner: TComponent);
begin
  inherited;

  vDataSet.AfterPost:= DataSetAfterPost ;  // aqui me da error a pesar de estar asignado el dataset en el componente en diseño

  Height := 25;
  Width := 268;
  Stroke.Kind := Stroke.Kind.bkNone;
  fill.Color := TAlphaColorRec.White;
  if not(csDesigning in ComponentState) then
  begin
    // RecFirst
    RecBtFirst := TRectangle.Create(Self);
    RecBtFirst.Name := 'RecFirst';
    RecBtFirst.Parent := Self;
    RecBtFirst.Align := TAlignLayout.MostLeft;
    RecBtFirst.Stroke.Kind := Stroke.Kind.bkNone;
    RecBtFirst.fill.Color := TAlphaColorRec.Darkgray;
    RecBtFirst.Width := 25;
    RecBtFirst.Tag := 1;
    // ImFirst
    ImFirst := Timage.Create(RecBtFirst);
    ImFirst.Name := 'imFirst';
    ImFirst.Parent := RecBtFirst;
    ImFirst.Align := ImFirst.Align.alClient;
    ImFirst.Bitmap.LoadFromStream(TResourceStream.Create(HInstance, 'imFirst', RT_RCDATA));
    ImFirst.OnClick := ImageClick;
    ImFirst.Tag := 1;


...........
procedure TNavegadorGrid.DataSetAfterPost(DataSet: Tdataset);
begin
   ShowMessage ('prueba comunicacion con el dataset');
end
Responder Con Cita
  #6  
Antiguo 29-04-2022
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.333
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Has definido la propiedad Dataset:

Código Delphi [-]
 property DataSet: Tdataset read vDataSet write vDataSet;

Y en el Create estás haciendo esto:

Código Delphi [-]
// aqui me da error a pesar de estar asignado el dataset en el componente en diseño
vDataSet.AfterPost:= DataSetAfterPost ;

El problema es que el orden en que se crean los componentes no siempre es el que queremos y cuando se está creando el componente TNavegadorGrid (y se ejecuta el Create) puede ser que el Dataset al que estás intentando acceder no esté creado.
Además lo lógico es utilizar el writer de la propiedad, porque querrás asignar un Dataset que te configuren en el object inspector. Ese vDataset que estás utilizando ahora, simplemente es una variable sin valor (nil).

Define la propiedad de la siguiente manera y los métodos en la parte privada:

Código Delphi [-]
  private
    ...
    procedure DataSetAfterPost(DataSet: Tdataset);
    procedure SetDataset(const Value: TDataset);    

  published
    property Dataset:TDataset read vDataset write SetDataset;

La implementación será la siguiente:


Código Delphi [-]
procedure TNavegadorGrid.DataSetAfterPost(DataSet: Tdataset);
begin
  ShowMessage ('prueba comunicacion con el dataset; Se ha realizado un post');
end;

procedure TNavegadorGrid.ImageClick(Sender: TObject);
begin
  ShowMessage ('TNavegadorGrid.ImageClick');
end;

procedure TNavegadorGrid.SetDataset(const Value: TDataset);
begin
  vDataSet := Value;
  ShowMessage ('Asignado Dataset');
  if not(csDesigning in ComponentState) then begin
    vDataSet.AfterPost:= DataSetAfterPost ;  // aqui me da error a pesar de estar asignado el dataset en el componente en diseño
    ShowMessage ('Asignado evento AfterPost');
  end;
end;
Ahora podrás crear el componente y asignar la propiedad Dataset desde el ObjectInspector.

Si ejecutas un Post, "salta" el evento del componente sin problemas.

__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #7  
Antiguo 29-04-2022
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.101
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Algunas respuestas valen su peso en oro
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
iconos egostar La Taberna 7 02-10-2012 10:43:24
2 Iconos en Alt + Tab Archer Varios 2 15-06-2008 23:53:01
Iconos .png Lorenzo07 Gráficos 4 30-06-2007 10:47:56
Iconos .bmp CarmaZone Varios 2 11-03-2005 00:46:41
Iconos Sirkius Varios 8 11-06-2004 20:34:31


La franja horaria es GMT +2. Ahora son las 07:13:38.


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
Copyright 1996-2007 Club Delphi