Função MessagBox() e bolinhas

Delphi

27/07/2003

[color=darkblue:7062d080b0]Pessoal to com dois problemas (um de memória - minha - o outro de falta de conhecimento).[/color:7062d080b0]

O primeiro é que eu não lembro quase nada da função MessageBox(). Estava fazendo um editor de textos simples (atoa, como sempre) e vi que não lembrava como funciona essa função (pra confirmar se deseja salvar o arquivo alterado e coisa assim).

O outro (num outro programa que não tem nada a ver com o acima). É que eu tenho que fazer um programa com onde tem um grupo de bolinhas com a aparência tipo a seguinte:

[size=18:7062d080b0] OOOOO [/size:7062d080b0]

Essas bolinhas funcionam da seguinte forma. Você clica em um e ela mais as anteriores ficam roxas por dentro. As que ficam depois ficam/ permanecem brancas. Eu pensei em usar vários componentes shape e eu vi que daria pra fazer usando o envento onclick delas verificar uma a uma. Só que no meu programa tem mais de 30 grupos dessas bolinhas então eu não ia fazer isso. Eu precisaria que alguém me desse uma idéia de como criar um componente ou algo que funcione da forma acima sem que eu tenho que programar. Lembrando que cada bolinha dessa tem um valor numérico (cada uma vale 1 em todos os grupos que preciso).


Hiko Seijuro

Hiko Seijuro

Curtidas 0

Respostas

Fórum Vini

Fórum Vini

27/07/2003

2º)Bolinhas - Você pode criar um array[1..30] of TRect, para desenhar em um offset e desenhar o offset no canvas do formulário(ou de outro componente) com um for no evento OnCreate e OnPaint do formulário.

Você também pode capturar os cliques do mouse no evento OnMouseDown do formulário.
Aqui vai um exemplo(o OnMouseDown não está funcionando ainda...)
implementation
var
  Bol: array[1..30] of TRect;
  OffSet: TBitmap;
{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
var
  cont: integer;
begin
  OffSet:=TBitmap.Create;
  offset.Width:=Screen.Width;
  offset.Height:=Screen.Height;
  offset.Canvas.Brush.Color:=Form1.Color;
  offset.Canvas.Rectangle(0,0,Screen.Width,Screen.Height);
  offset.Canvas.Brush.Color:=$FFFFFF;
  for cont:=1 to 30 do
  begin
    with Bol[cont] do
    begin
      Left:=cont*30;
      Top:=15;
      Right:=Bol[cont].Left+30;
      Bottom:=Bol[cont].Top+30;
    end;
    offset.Canvas.Ellipse(Bol[cont]);
  end;
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
  Form1.Canvas.Draw(15,15,offset); //atualiza o offset no formulário
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  cont: integer;
begin
  for cont:=1 to 30 do
    if (X > bol[cont].Left) and (X < bol[cont].Right)then
    begin
      offset.Canvas.Brush.color:=$CC0000;
      offset.Canvas.Ellipse(Bol[cont]);
      offset.Canvas.Brush.color:=$FFFFFF;
    end;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  offset.free;
end;


Boa sorte!
Espero ter ajudado.

Vinicius


GOSTEI 0
POSTAR