witam wszystkich!
mam pytanko: mam na formie przycisk. Jakie wykorzystać zdarzenie (jak obsłużyć przycisk), aby można wykonać jakąś operację po naciśnięciu na button i przytrzymaniu przycisku myszki. Np. naciskam i przytrzymuję przycisk, a w tym momencie np. rośnie pasek postępu.
dzieki za wszelkie podpowiedzi!
a zatrzymuje sie?
dziwne :)
moze chodzi Ci o watki?
Tak jest - wątki bedą tu dobre.
Trzeba:
- stworzyć wątek, który będzie jedynie operował paskiem postepu.. - zmieniał go w pętli
- obsłużyć komunikat WM_LBUTTONDOWN - i włączyć tym samym wątek.
- obsłużyć komunikat WM_LBUTTONUP - przy czym następuje wyłączenie wątku
// oo pardom - nie doczytałem, że chodzi tu o Button - no to wystarczy wykorzystać odpowiednie zdarzenia jak MouseDown, MouseUp czy co tam jeszcze jest...
to z paskiem postępu to tylko przykład. chodzi mi o to, że np.
mam na formie button i label (w labelu mają się wyświetlać w pętli kolejne liczby całkowite 1,2,3,4)
w zdarzeniu onClick przycisku wpisuję :
for i := 0 to 1000 do
begin
Inc(liczba);
Label1.Caption := IntToSTr(liczba);
end;
Ale żeby zwiększyć liczbę, za każdym razem musze kliknąć myszką, a chciałbym aby po wciśnięciu myszki i jej przytrzymaniu wykonała się powyższa pętla (żeby nie trzeba było za każdym razem klikać, aby zwiększyć zmienną liczba.
zanim jeszcze raz wytłumaczyłem problem pojawiła się kolejna odpowiedź. nie zauważyłem ;) dzięki, ale musze to sprawdzić w domu bo w szkole nie ma delphi, niestety ;((
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
Button1: TButton;
procedure Button1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Button1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
TLabelOperator = class(TThread)
private
{ Private declarations }
protected
procedure Execute; override;
end;
var
Form1: TForm1;
LabelOperator : TLabelOperator;
implementation
procedure TLabelOperator.Execute;
begin
repeat
Form1.Label1.Caption := IntToStr(StrToInt(Form1.Label1.Caption) + 1);
if Terminated then
Break;
until 1 =2;
end;
{$R *.dfm}
procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
LabelOperator := TLabelOperator.Create(False);
end;
procedure TForm1.Button1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
LabelOperator.Terminate;
end;
procedure TForm1.FormShow(Sender: TObject);
begin
Label1.Caption := '1';
end;
end.
dzięki! Pozdrawiam!!
Nie dziala Czy któś mógłby umiescic kod ktory by zwiekszal liczbe w Label.Caption <ort>dopuki </ort>nie puszcze buttona?? Chodzi mi o prosty kod ktory by mi to pookazał ze Trzymam Buttona wciśniętego i mi zwieksza liczbe w Label o 1
- działa
- jaki masz błąd? może zapomniałeś kontrolki powstawiać...
- NIE ODŚWIEŻAJ TAK STARYCH WĄTKÓW! Stwórz nowy temat w newbie.