Ir ao conteúdo

Posts recomendados

Postado

 Como atribuir focus a componente criado em tempo de execuçao, conforme abaixo:

  As stringAligGrid representarão volantes vazios da lotomania , que serão preenchidos depois.

 então suponha que o usuario precise de 10 volantes,,,,ele clica 10 vezes e constroi os volantes vazios.

 Após criar os volantes ele vai preenche-los um a um. Ao clicar em determinado numero (celula) a referida deverá ficar verde.

Não consigo colorir a celula da stringgrid (volante) clicada, O EVENTO ACONTECE ou seja a celula fica marcada  mais ao invés disso acontecer na stringaliggrid clicada  acontece na ultima  stringAligngrid CRIADA, como se apos o ultimo volante SER criado ele ficara preso na memoria.. e nao consigo dar o setfocus ou acessar  nenhum outro volante que foi criado em tempo de execuçao.  ....Obrigado

unit grade_virtual;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Grids, Aligrid, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure colorir(Sender :TObject);
    procedure ENCHER;
    procedure colorir_celula(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
var
  grade:TStringAlignGrid;
  ESQUERDA:Integer;
  ALTura:Integer;
  CONTADOR:Integer;
  numeral:Integer;
  col,lin:Integer;
  cor:tcolor;
  x1:string;
  compcomponent:TStringAlignGrid;
{$R *.DFM}
procedure tform1.colorir(Sender :TObject);
begin
  //grade.ColorCell[col,lin]:=clGreen;
end;

procedure tform1.colorir_celula(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);

  begin

  grade.SetFocus;
  col:=acol;
  lin:=arow;
  grade.ColorCell[col,lin]:=clGreen;
 end;

procedure TForm1.Button1Click(Sender: TObject);
begin
grade:=TStringAlignGrid.Create(form1);
grade.top:=ALTura;
grade.LEFT:=10 +esquerda;
grade.RowCount:=10;
grade.ColCount:=10;
grade.FixedRows:=0;
grade.FixedCols:=0;
grade.DefaultColWidth:=20;
grade.DefaultRowHeight:=20;
grade.Width:=215;
grade.Height:=215;
grade.Parent:=Self;

//grade.Name:='Grade_' + FormatFloat('00',numeral);

grade.OnSelectCell:=colorir_celula;
grade.OnClick:=colorir;
 grade.hint:='grade.name';
 grade.ShowHint:=True;
ENCHER;
Inc(CONTADOR);
Inc(numeral);
if (contador > 0) and (CONTADOR <6) then
begin
esquerda:= esquerda  + 220;
end;
if CONTADOR > 5 then
  begin
    contador:=1;
    esquerda:=10;
    altura:= ALTura +230;
  end;
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
CONTADOR:=1;
ESQUERDA:=10;
altura:=70;
end;

procedure Tform1.ENCHER;
var
i,c,l:integer;
N:STRING;
begin
c:=0;
l:=0;
  for i:=1 to 100 do
    begin
    N:=FORMATFLOAT('00',I);
     if i=100 then
       begin
         grade.Cells[c,l]:='00';
         exit;
       end;
     if i<>100 then
       begin
         GRADE.Cells[c,l]:=N;
       end;
       C:=C+1;
    if c=10 then
        begin
          L:=L+1;
        if i=100 then
            begin
               grade.Cells[10,10]:='00';
            end;
          c:=0;
        end;
    end;
    end;


 

  • Curtir 1
Postado
13 horas atrás, FBO_COUTINHO disse:

Dentro da função "colorir_celula" troque os comandos "grade." por "TStringAlignGrid(Sender)." que deve resolver

Excelente companheiro.  funcionou perfeitamente, embora ainda nao saiba bem o porque......mais valeu

  • Curtir 1
Postado

Vou tentar explicar.

Você vinculou vários componentes uma única função "OnSelectSell" que você chamou de "colorir_celula".

Quando esta função é chamada por um componente, o endereço deste componente é passado pra função sob o nome "Sender". Para que você acesse os atributos deste componente dentro da função você deve usar o endereço "Sender". 

Deu errado seu codigo anterior porque dentro da funçao "colorir_celula" você estava acessando os atributos do ultimo componente criado e endereçado sob o nome "grade".

Por isso ao usar o comando ""TStringAlignGrid(Sender)." deu certo xD

  • Curtir 1
  • 2 semanas depois...
Postado

Ficou claro obrigado....mais uma coisa interessante. Ate ontem funcionou bem um procedimento que visava o seguinte.: Apos o usuario criar os cartoes necessarios, ele poderia carregar os numeros de sua preferência de um arquivo texto, o que era feito da seguinte forma,,,,Na criaçao do cartao será criado tb um Tmemo  e um Tedit que ficam associados ao determinado cartao pela semelhança dos ultimos 2 digitos do nome.>>>>Ao clicar em um cartao, pega-se o nome do dito cujo e joga para o LABEL1....Desta forma pode-se dar um With stringaligngrid(Findcomponent(label1.caption). do      para que o cartao do interesse tenha as celulas coloridas com os numeros carregados do arquivo no Memo1 (open dialog1.execute) .  OS MEMOS criados em tempo de execuçao servem para quando o usuario colore ou seja preenche os cartoes clicando nas celulas dos mesmos.  Desta forma poderao ser salvos individualmente cada conjunto de numeros marcados em cada cartao.

Em tempo: Delphi 5.0

grade_virtual.zip

  • Curtir 1
Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!