orientação objeto

Delphi

02/05/2003

Oi pessoal,
Alguém sabe como eu posso criar uma nova propriedade para um StringGrid?
Tipo: Grid.Row[i].[b:273e6d5a4d]Drilldown[/b:273e6d5a4d] do tipo boolean, onde ´DrillDown´ seria a propriedade a ser criada...
Até +


Hellen

Hellen

Curtidas 0

Respostas

Schwarze

Schwarze

02/05/2003

Crie um objeto descendente do stringgrid. Assim:

type 
  THellenStringGrid = class(TStringGrid)
  private
    FDrillDown: boolean;
    procedure SetDrillDown(Value: boolean);
  published
    property DrillDown: boolean read FDrillDown write SetDrillDown;
  end;



GOSTEI 0
Hellen

Hellen

02/05/2003

eu devo implementar essas funções? Set e FDrillDown?
e isso, ta certo???:
´procedure Register;
begin
RegisterComponents(´Win32´, [MyGrid]);
end;´


GOSTEI 0
Schwarze

Schwarze

02/05/2003

Tá certo. SetDrillDown é uma função, FDrillDown é apenas um field, uma variável que a propriedade lê direto. Você não precisa escrever uma função Get, se fizer do jeito que eu mostrei.
Não se esqueça de colocar seu objeto num package, pra torná-lo disponível em tempo de desenho.

:twisted: Ok?


GOSTEI 0
Hellen

Hellen

02/05/2003

Valeu mesmo...
funcionou, mas eu esqueci de falar que eu queria essa propriedade booleana dentro de grid.row.drilldown, como eu faço? so mais essa maozinha e eu paro de te encher o saco...
brigadao!


GOSTEI 0
Schwarze

Schwarze

02/05/2003

A propriedade row do stringgrid é do tipo integer. Se fosse um objeto, você poderia criar um tipo de objeto só para ter essa propriedade. Por exemplo, usando Rows ao invés de Row:

  type
    THellenRows = class(TStrings)
    private
       procedure SetDrillDown(Value: boolean);
    public
       property DrillDown: boolean read FDrillDown set SetDrillDown;
    end;
    
    THellenStringGrid = class(TStringGrid)
    private
      FRows: THellenRows;
    public
       property Rows: THellenRows read FRows;
    end;



GOSTEI 0
Hellen

Hellen

02/05/2003

obrigado mesmo!!!


GOSTEI 0
Hellen

Hellen

02/05/2003

minha unit ta assim:
unit MyStrings;

interface

uses
SysUtils, Classes;

type
TMyStrings = class (TStrings)
private
FDrillDown: boolean;
procedure SetDrillDown(Value: boolean);
protected
{ Protected declarations }
public
property DrillDown: boolean read FDrillDown write SetDrillDown;
published
{ Published declarations }
end;

procedure Register;

implementation

procedure Register;
begin
[b:3a43d1bc79] RegisterComponents(´Win32´, [TMyStrings]);[/b:3a43d1bc79]end;

procedure TMyStrings.SetDrillDown(Value: Boolean);
begin
if Value=true then Value:=true;
if Value=false then Value:=false;
end;
end.

da um esso nessa linha, q q pode ser?
Incompatible types: ´TComponentClass´ and ´Class reference´


GOSTEI 0
Schwarze

Schwarze

02/05/2003

Você tá tentando registrar os itens do stringgrid, que não são uma classe descendente de TComponent. Você deve criar o descendente de TStringGrid e registrar essa classe, não seus itens.
Você também errou o SetDrillDown. Se você não precisa fazer nada quando o usuário mudar DrillDown para true, pode declarar sua propriedade assim:

property DrillDrown read FDrillDown write FDrillDown;

e remover o SetDrillDown.

Ok?


GOSTEI 0
POSTAR