Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

как узнать сколько раз нажали TButton

12K
09 декабря 2006 года
horror
26 / / 22.11.2006
в каком-нибудь свойстве у компонента TButton считается сколько раз его нажали?
309
09 декабря 2006 года
el scorpio
1.1K / / 19.09.2006
Нигде, только самому.
На крайний случай, у каждого визуального компонента VCL есть свойство целочисленное Tag, которое программист сам может использовать в своих целях
14K
09 декабря 2006 года
DarkKnight
41 / / 18.11.2006
проще завести переменную,и увеличивать ее при нажатии.
это лучше ,если надо считать нпжатия у более,чем одной кнопки вместе.
12K
09 декабря 2006 года
horror
26 / / 22.11.2006
а где тогда надо вводить цикл для плюсования переменной? не получится же его поставить до процедуры
387
09 декабря 2006 года
Ihbif19
421 / / 28.10.2004
Цитата: horror
а где тогда надо вводить цикл для плюсования переменной? не получится же его поставить до процедуры


Что помечено серым необязательно, на случай если придётся integer перевести в String!!!

 
Код:
procedure TForm1.Button1Click(Sender: TObject);
[COLOR=gray]var[/COLOR]
[COLOR=gray]S : string;[/COLOR]
begin
Button1.Tag := Button1.Tag + 1;
[COLOR=gray]S := IntToStr(Button1.Tag); //Преобразую integer в String-необязательно[/COLOR]
[COLOR=gray]ShowMessage(S);[/COLOR]
end;
14K
09 декабря 2006 года
DarkKnight
41 / / 18.11.2006
с переменными так же.
12K
09 декабря 2006 года
horror
26 / / 22.11.2006
у меня с переменными не получилось, т.к. на конкретный номер нажатия кнопки выполняется конкретное действие и следовательно далее идёт безусловный переход в конец процедуры, у меня так и не получилось заставить нормально работать goto
309
10 декабря 2006 года
el scorpio
1.1K / / 19.09.2006
Цитата:
у меня так и не получилось заставить нормально работать goto


И не получится :D
"goto" хорош на бейсике. Не на VBA, а на обычном досовском QBASIC.
В объектно-ориентированном коде вполне достаточно последовательности if // else if // else

23K
12 декабря 2006 года
!console!
7 / / 11.12.2006
Цитата: horror
у меня с переменными не получилось, т.к. на конкретный номер нажатия кнопки выполняется конкретное действие и следовательно далее идёт безусловный переход в конец процедуры, у меня так и не получилось заставить нормально работать goto



Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  S : string;
begin
  Button1.Tag := Button1.Tag + 1;
  if Button1.Tag = 1 then
  begin
    SvaritCofe();
    break;
  end else
  if Button1.Tag = 2 then
  begin
    ShoditVKino();
    break;
  end else
  if Button1.Tag = 3 then
  begin
    VyuchitUroki();
    break;
  end ...
  и т.д. и т.п...
end;
3.2K
12 декабря 2006 года
Sania
186 / / 28.10.2006
Цитата: el scorpio
И не получится :D
"goto" хорош на бейсике. Не на VBA, а на обычном досовском QBASIC.
В объектно-ориентированном коде вполне достаточно последовательности if // else if // else



Если что, то сканает еще Exit; Break; Continue; Halt;
goto сейчас вообще считается плохим стилем.
Напиши 5 меток в 1 процедуре и дай кому-нить разобраться.:D

10K
12 декабря 2006 года
Webster
17 / / 19.10.2006
Но можно сделать так :
var
a:integer;
procedure ....
begin
a:=a+1;
end
387
12 декабря 2006 года
Ihbif19
421 / / 28.10.2004
Так что собственно автор хочет получить в качестве ответа???
То одно, то другое...
Зы. Некоторые сообщения куда-то подевались...
12K
12 декабря 2006 года
horror
26 / / 22.11.2006
Цитата: Ihbif19
Так что собственно автор хочет получить в качестве ответа???
То одно, то другое...
Зы. Некоторые сообщения куда-то подевались...



ответ я получил уже из всего высказанного, мне требовалось чтоб при нажатии кнопки появлялся edit1, при повторном нажатии edit2 и т.д.
в принципе получилось осталось только по человечески переписать это - без goto

12K
12 декабря 2006 года
horror
26 / / 22.11.2006
и ещё возник вопрос: допустим у меня есть поле memo, Height=89 в него влазиет 6 строк текста, возможно ли если я заполнил только одну сроку автоматически уменьшить его до высоты одной строки?

и может подскажите книгу в которой такие мелочи расписаны? а то обычно всё как-то очень обще
8
12 декабря 2006 года
mfender
3.5K / / 15.06.2005
Цитата: horror
и ещё возник вопрос: допустим у меня есть поле memo, Height=89 в него влазиет 6 строк текста, возможно ли если я заполнил только одну сроку автоматически уменьшить его до высоты одной строки?

и может подскажите книгу в которой такие мелочи расписаны? а то обычно всё как-то очень обще


В OnEnter или OnExit проверь Items.Count. Если =1, то уменьши до нужного размера

12K
12 декабря 2006 года
horror
26 / / 22.11.2006
Цитата: mfender
В OnEnter или OnExit проверь Items.Count. Если =1, то уменьши до нужного размера



а как это записать в коде то? допустим так не получилось

procedure TForm1.Memo1Enter(Sender: TObject);
begin
if items.count=1 then
showmessage('qqq');
end;

8
12 декабря 2006 года
mfender
3.5K / / 15.06.2005
Примерно так.

 
Код:
procedure TForm1.Memo1Exit(Sender: TObject);
var Memo: TMemo;
begin
  if Assigned(Sender as TMemo) then
  begin
    Memo := Sender as TMemo;
    Memo.Height := Memo.Lines.Count * Abs(Memo.Font.Height * 2);
  end;
end;


Memo.Height := Memo.Lines.Count * Abs(Memo.Font.Height * 2); - конечно не правильно. Считать нужно по-другому. Но это уже тема другая.

PS. Да, проверка тут вобщем-то не нужна (Assigned), т.к. событие происходит в существующем объекте. Но, это я по привычке - бережённому кто-то чего-то с утра подаёт... :D
1.8K
13 декабря 2006 года
dEBuch
95 / / 21.10.2005
Sorry за offtop!
Ооо мда... goto помню раза 2 пользовался, года два назад когда начинал раздуплятся. А если еше в Delphi пользоватся, то это :D Сощитать сколько раз нажимали на кнопку, по моему самое легкое из легкого. впечатление что horror что-то пропустил %) Лучше мне помогите, с моей гребаной задачей. :(
8
13 декабря 2006 года
mfender
3.5K / / 15.06.2005
Да, я чёта так и не осилил - кнопку-то придумали? А то вот такой вариант:
Код:
type
  TIncButton = class (TButton)
  private
    FClickCounter: Integer;
  public
    constructor Create(AOwner: TComponent); override;
    procedure Click; override;
    property ClickCounter: Integer read FClickCounter;
  end;
 
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
  private
    procedure BtnClick(Sender: TObject);
  public
    MyButton: TIncButton;
  end;
 
implementation
 
{ TIncButton }
procedure TIncButton.Click;
begin
  inherited Click;
  Inc(FClickCounter);
end;
 
constructor TIncButton.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  Parent := TWinControl(AOwner);
end;
 
{ TForm1 }
procedure TForm1.BtnClick(Sender: TObject);
begin
  Memo1.Lines.Add(IntToStr(MyButton.ClickCounter));
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  MyButton := TIncButton.Create(Self);
  MyButton.Top := 20;
  MyButton.Left := 20;
  MyButton.OnClick := BtnClick;
end;


Memo1 - это для наглядности происходящего.;)
12K
13 декабря 2006 года
horror
26 / / 22.11.2006
я осили однако пока только с goto (ну что тут поделать кривые у меня руки ничего не могу поделать)

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Edit1:TEdit; Edit2:TEdit;
  i:integer;
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Edit1:=TEdit.Create(Form1); Edit1.Parent:=Form1; Edit1.Visible:=false;
  Edit2:=TEdit.Create(Form1); Edit2.Parent:=Form1; Edit2.Visible:=false;
end;

procedure TForm1.Button1Click(Sender: TObject);
label nac;
begin
nac:
  Button1.Tag := Button1.Tag + 1;
    i := Button1.Tag;
     if i=1 then
      begin
       with Edit1 do
        begin
         Edit1.Visible:=true;
         Left:=16; Top:=40; Width:=121; Height:=21;
         goto nac;
        end;
      end;

    if i=3 then
     begin
      with Edit2 do
       begin
        Edit2.Visible:=true;
        Left:=16; Top:=128; Width:=121; Height:=21;
        goto nac;
       end;
     end;
end;
end.



понятно как с if-else-if написать но уже лень переписывать
8
13 декабря 2006 года
mfender
3.5K / / 15.06.2005
Цитата: horror
я осили однако пока только с goto (ну что тут поделать кривые у меня руки ничего не могу поделать)
<...>
понятно как с if-else-if написать но уже лень переписывать


А зря, зря. Кривизну рук лечить надо чтением полезной литературы.
Самое правильное абстрагироваться от конкретной задачи и подумать над функционалом, который поможет не громоздить излишний код.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог