Procedimento para mudar cursor em tempo de execução..erro...
16/06/2008
0
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:
mas os edits são todos criados em tempo de execução:
mas quando eu passo o cursor em cima dos edits acontece esse erro.
o que será de errado ?
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 ?
Robinhocne
Curtir tópico
+ 0
Responder
Posts
16/06/2008
Emerson Nascimento
teste com esse código:
aqui você cria os Edits:
este é o procedimento para a troca do cursor (note que não é necessário o laço):
e não dá problema com o cursor global, pois estou alterando somente o cursor do componente.
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:
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 ?
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
Clique aqui para fazer login e interagir na Comunidade :)