Procedimento para mudar cursor em tempo de execução..erro...

16/06/2008

1

Pessoal estou montando um procedimento para que quando eu passe o cursor em cima dos edits e se os edits estiverem preenchidos ele mostra um tipo de cursor e se estiver vazio mostra outro:

procedure Tfrmpraticas.MudarCursor;
var i : Integer;
begin

  for i := 0 to frmpraticas.ComponentCount -1 do
    begin
       if frmpraticas.Components[i] is TEdit then
         begin
            if TEdit(frmpraticas.Components[i]).Text = ´´ then
               begin
                  if frmpraticas.Components[i] is TEdit then
                     TEdit(frmpraticas.Components[i]).Cursor := crHandPoint;
                  end
               else
                  begin
                     if frmpraticas.Components[i] is TEdit then
                        TEdit(frmpraticas.Components[i]).Cursor := crMultiDrag;
                  end;
         end;
    end;
end;


mas os edits são todos criados em tempo de execução:

for a := 1 to 7 do
            begin
               // cria o edit do codigo do aluno
               edits := TEdit.Create( Self );
               with edits do
                  begin

                     Cursor     := crCross;
                     Parent     := sbxPra;
                     Top        := top_edit;
                     Left       := left_edit;
                     Name       := ´ed_´ + IntToStr( a ) + FormatDateTime( ´hhnn´, HoraAtual );
                     Width      := 65;
                     //Enabled   := False;
                     ReadOnly   := True;
                     Text       := ´´;
                     OnDblClick := PreencheEdit;
                     OnKeyDown  := BloqueioDesbloqueio;
                     OnMouseMove := MudarCursor;<<<<<<<<Procedure
                         with Font do
                           Begin
                              Height  := 15;
                              Name    := ´Courier New´;
                              Size    := 10;
                           //   Style   := [fsBold];
                           end;
                  end;

             end;


mas quando eu passo o cursor em cima dos edits acontece esse erro.

Access violation at address 00428690 in module ´sistemacfc.exe´. Read of address 0000010


o que será de errado ?


Responder

Posts

teste com esse código:
aqui você cria os Edits:
var
  a: byte;
  top_edit, left_edit: integer;
begin
  top_edit := 5;
  left_edit := 5;

  for a := 1 to 7 do
  with TEdit.Create( sbxPra ) do
  begin
    Parent := sbxPra;
    Top := top_edit;
    Left := left_edit;
    Name := ´ed_´ + IntToStr(a) + FormatDateTime(´hhnn´, SysUtils.Now);
    Width := 65;
    Text := ´´;
    OnMouseMove := EditMouseMove;
    with Font do
    Begin
      Height := 15;
      Name := ´Courier New´;
      Size := 10;
    end;
    top_edit := top_edit + (Height + 5);
   end;
end;

este é o procedimento para a troca do cursor (note que não é necessário o laço):
procedure TForm1.EditMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if Trim(TEdit(Sender).Text) = ´´ then
    TEdit(Sender).Cursor := crHandPoint
  else
    TEdit(Sender).Cursor := crMultiDrag;
end;

e não dá problema com o cursor global, pois estou alterando somente o cursor do componente.


Responder

18/06/2008

Robinhocne

Ok, certo, só fiz coloquei no procedimento assim:

procedure TForm1.EditMouseMove(Sender: TObject; Shift: TShiftState; X, 
  Y: Integer); 
begin 
  if Trim(TEdit(Sender).Text) = ´´ then 
    TEdit(Sender).Cursor := crHandPoint 
  else 
    TEdit(Sender).Cursor := crMultiDrag; 
end;


e funcionou quase do jeito que eu queria....

Pois tipo para eu colocar os cursores que eu quero eu devo ir na configuração do mouse e mudar o cursor por lá e chamar aqui....

será que tem como eu deixar só em uma pasta e chamar dessa pasta sem precisar mudar a configuração ?


Responder