Newsgroup: it.comp.lang.delphi
Titolo: Aiuto

Perchè quando clicco nel Button1 il Button2 non si muove?
Ecco il codice:
var
  Form1: TForm1;
  stato : boolean = false;
implementation
....................
procedure TForm1.Button1Click(Sender: TObject);
begin
  stato := not (stato);
  if (stato) then
    button1.caption := 'Stop!'
   else
    button1.caption := 'Start!';
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
  while (stato) do
    begin
      randomize;
      button2.top := random (280) + 34;
      button2.left := random (422) + 34;
    end;
end;
--
Posted from [195.223.215.6] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 end;
Scusa ma non capisco. Perchè secondo te dovrebbe muoversi ?
Ciao

Perchè cliccando cambia il valore della variabile "stato" e di conseguenza
dovrebbe muoversi il button2 modificando la sue proprietà top e left. Solo
che questo avviene solo se clicco sul Button2. Come posso fare ad
attivare/disattivare il movimento del button2 tramite il button1 ?
Grazie


Devi semplicemente aggiungere il codice per il Button2 all'interno
della procedura del Button1.
Lawrence Oluyede
rhy...@tiscalinet.it
"Se ti credono rozzo,
  fai il raffinato;
se ti credono raffinato,
  mostrati rozzo."
Johnny Mnemonic
On 31 Aug 2000 17:59:38 +0200, 
lui...@sicilyonline.it
 ("Luigi")
wrote:


>
Perchè quando clicco nel Button1 il Button2 non si muove?
[...]
procedure TForm1.Button2Click(Sender: TObject);
begin
  while (stato) do
    begin
      randomize;
      button2.top := random (280) + 34;
      button2.left := random (422) + 34;
    end;
end;
<<
4 cose:
1) perchè li codice di Button2click sia eseguito devi: o cliccare su button
2 o postargli un messaggio di click o chiamare Button2.Click o
Button2Click(Button2).
2) randomize all'interno del ciclo fa in modo che siano generati sempre gli
stessi numeri casuali.
3) se vuoi poter usare Button1 per fermare Button2, metti un
Application.ProcessMessages all'interno del ciclo.
4) potrebbe essere necessario forzare un repaint.
Saluti
Paolo Arosio

 attivare/disattivare il movimento del button2 tramite il button1 ?
 Come ultima istuzione di Button1Click richiama esplicitamente Button2Click
e ricordati di inserire nel loop While un Application.ProcessMessages in
modo che mentre viene eseguito il loop, il programma possa intercettare gli
eventi Click su Button1. Poi guarda l'effetto, ma, se ho ben capito, non
sarà esattamente quello che ti aspetti.
Ciao

Se clicco su Button2 funziona.
Il problema è che non risco a comandarlo con il button1.
Randomize ho sempre saputo (e anche verificato) che serve a far generare
numeri casuali (quasi) sempre  diversi.
Ciao


E cioč?


E se introducessimo un bel TIMER ?
In questo modo potresti anche impostare la velocità del movimento
modificando la proprietà INTERVALLE del timer !
Il codice verrebbe così... Dove il Button2 serve solo come oggetto che si
muove (non vedo perchè la procedura di movimento debba essere messa lì)....
procedure TForm1.Timer1Timer(Sender: TObject);
begin
 randomize;
 button2.top := random (280) + 34;
 button2.left := random (422) + 34;
 // al posto di BUTTON2 potresti mettere un qualsiasi altro oggetto !!!
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if Timer1.Enabled
   then begin
        Button1.Caption:= 'Start !';
        Timer1.Enabled:= false;
        end
   else begin
        Button1.Caption:= 'Stop !';
        Timer1.Enabled:= true;
        end;
end;