![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Как реализовать повтор клавиш которые нажимал пользователь?
Вот код программы но что бы он изменял значения приходиться нажимать на кнопку повторно в ручную. http://yadi.sk/d/qCLJgTgD4MXv0 [spoiler="code"] Код:
var
Form1: TForm1;
a: string;
c,x: integer;
v11,v12,v13,v14,v21,v22,v23,v24,v31,v32,v33,v34,v35,v36,v37,v38,v61,v62,v63,v64,v71,v72,v73,v74,v81,v82,v83,v84,v91,v92,v93,v94,v101,v102,v103,v104,v105,v106,v107,v108,v109,v111,v112,v113,v114,v115,v116,v117,v118,v119,v121,v122,v123,v124,v125,v126,v127,v128,v131,v132,v133,v134,v141,v142,v143,v144,v151,v152,v153,v154,v155,v156,v157,v158,v159,v161,v162,v163,v164,v165,v166,v167,v168,v169: integer;
start: integer;
List: array of Integer;
Len: Integer;
Iterator: Integer;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
a:=button1.caption;
c:=radiogroup1.itemindex;
Len:=Length(List) + 1;
SetLength(List, Len);
List[Len - 1] := (Sender as TButton).Tag;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
a:=button2.caption;
c:=radiogroup2.itemindex;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
a:=button3.caption;
c:=radiogroup3.itemindex;
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
a:=button4.caption;
c:=radiogroup4.itemindex;
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
a:=button5.caption;
c:=radiogroup5.itemindex;
end;
procedure TForm1.Button6Click(Sender: TObject);
begin
a:=button6.caption;
c:=radiogroup6.itemindex;
end;
procedure TForm1.Button7Click(Sender: TObject);
begin
a:=button7.caption;
c:=radiogroup7.itemindex;
end;
procedure TForm1.Button8Click(Sender: TObject);
begin
a:=button8.caption;
c:=radiogroup8.itemindex;
end;
procedure TForm1.Button10Click(Sender: TObject);
begin
button10.Caption:=a;
v11:=c;
end;
procedure TForm1.Button11Click(Sender: TObject);
begin
button11.Caption:=a;
v12:=c;
end;
procedure TForm1.Button12Click(Sender: TObject);
begin
button12.Caption:=a;
v13:=c;
end;
procedure TForm1.Button13Click(Sender: TObject);
begin
button13.Caption:=a;
v14:=c;
end;
procedure TForm1.Button9Click(Sender: TObject);
var
x,y,d: integer;
begin
a:=button9.Caption;
x:=v11 and v12;
y:=v13 and v14;
d:=x or y;
c:=1-d;
label1.caption:=inttostr(c);
end;
procedure TForm1.Button14Click(Sender: TObject);
begin
button14.Caption:=a;
v21:=c;
end;
procedure TForm1.Button15Click(Sender: TObject);
begin
button15.Caption:=a;
v22:=c;
end;
procedure TForm1.Button16Click(Sender: TObject);
begin
button16.Caption:=a;
v23:=c;
end;
procedure TForm1.Button17Click(Sender: TObject);
begin
button17.Caption:=a;
v24:=c;
end;
procedure TForm1.Button18Click(Sender: TObject);
var
x,y: integer;
begin
x:=v21 and v22;
y:=v23 and v24;
c:=x or y;
label2.caption:=inttostr(c);
a:=button18.Caption;
end;
procedure TForm1.Button19Click(Sender: TObject);
begin
button19.Caption:=a;
v31:=c;
end;
procedure TForm1.Button20Click(Sender: TObject);
begin
button20.Caption:=a;
v32:=c;
end;
procedure TForm1.Button21Click(Sender: TObject);
begin
button21.Caption:=a;
v33:=c;
end;
procedure TForm1.Button22Click(Sender: TObject);
begin
button22.Caption:=a;
v34:=c;
end;
procedure TForm1.Button23Click(Sender: TObject);
begin
button23.Caption:=a;
v35:=c;
end;
procedure TForm1.Button24Click(Sender: TObject);
begin
button24.Caption:=a;
v36:=c;
end;
procedure TForm1.Button25Click(Sender: TObject);
begin
button25.Caption:=a;
v37:=c;
end;
procedure TForm1.Button26Click(Sender: TObject);
begin
button26.Caption:=a;
v38:=c;
end;
procedure TForm1.Button27Click(Sender: TObject);
var
x: integer ;
begin
x:=v31 and v32;
c:=1-x;
label3.caption:=inttostr(c);
a:=button27.Caption;
end;
procedure TForm1.Button28Click(Sender: TObject);
var
x: integer ;
begin
x:=v33 and v34;
c:=1-x;
label4.caption:=inttostr(c);
a:=button28.Caption;
end;
procedure TForm1.Button29Click(Sender: TObject);
var
x: integer ;
begin
x:=v35 and v36;
c:=1-x;
label5.caption:=inttostr(c);
a:=button29.Caption;
end;
procedure TForm1.Button30Click(Sender: TObject);
var
x: integer ;
begin
x:=v37 and v38;
c:=1-x;
label6.caption:=inttostr(c);
a:=button30.Caption;
end;
procedure TForm1.Button43Click(Sender: TObject);
begin
button43.Caption:=a;
v61:=c;
end;
procedure TForm1.Button44Click(Sender: TObject);
begin
button44.Caption:=a;
v62:=c;
end;
procedure TForm1.Button45Click(Sender: TObject);
begin
button45.Caption:=a;
v63:=c;
end;
procedure TForm1.Button46Click(Sender: TObject);
begin
button46.Caption:=a;
v64:=c;
end;
procedure TForm1.Button47Click(Sender: TObject);
var
x:integer;
begin
x:=v61 and v62 and v63 and v64;
c:=1-x;
label7.Caption:= inttostr(c);
a:=button47.Caption
end;
procedure TForm1.Button48Click(Sender: TObject);
begin
button48.Caption:=a;
v71:=c;
end;
procedure TForm1.Button69Click(Sender: TObject);
begin
button69.Caption:=a ;
v104:=c ;
end;
procedure TForm1.Button70Click(Sender: TObject);
begin
button70.Caption:=a ;
v105:=c ;
end;
procedure TForm1.Button71Click(Sender: TObject);
begin
button71.Caption:=a ;
v106:=c ;
end;
procedure TForm1.Button64Click(Sender: TObject);
var
x:integer;
begin
x:=v104 and v105 and v106;
c:=1-x;
label12.caption:=inttostr(c);
a:=button64.Caption ;
end;
procedure TForm1.Button72Click(Sender: TObject);
begin
button72.Caption:=a ;
v107:=c ;
end;
procedure TForm1.Button73Click(Sender: TObject);
begin
button73.Caption:=a ;
v108:=c ;
end;
procedure TForm1.Button74Click(Sender: TObject);
begin
button74.Caption:=a ;
v109:=c ;
end;
procedure TForm1.Button65Click(Sender: TObject);
var
x:integer;
begin
x:=v107 and v108 and v109;
c:=1-x;
label13.caption:=inttostr(c);
a:=button65.Caption ;
end;
procedure TForm1.Button80Click(Sender: TObject);
begin
button80.caption:=a;
v111:=c;
end;
procedure TForm1.Button81Click(Sender: TObject);
begin
button81.caption:=a;
v112:=c;
end;
procedure TForm1.Button82Click(Sender: TObject);
begin
button82.caption:=a;
v113:=c;
end;
procedure TForm1.Button83Click(Sender: TObject);
begin
button83.caption:=a;
v114:=c;
end;
procedure TForm1.Button84Click(Sender: TObject);
begin
button84.caption:=a;
v115:=c;
end;
procedure TForm1.Button85Click(Sender: TObject);
begin
button85.caption:=a;
v116:=c;
end;
procedure TForm1.Button86Click(Sender: TObject);
begin
button86.caption:=a;
v117:=c;
end;
procedure TForm1.Button87Click(Sender: TObject);
begin
button87.caption:=a;
v118:=c;
end;
procedure TForm1.Button88Click(Sender: TObject);
begin
button88.caption:=a;
v119:=c;
end;
procedure TForm1.Button79Click(Sender: TObject);
var
x,y,z,h,j:integer;
begin
x:=v111 and v112;
y:=v113 and v114;
z:=v115 and v116 and v117;
h:=v118 and v119;
j:=x or y or z or h;
c:=1-j;
label14.Caption:=inttostr(c);
a:=button79.Caption;
end;
procedure TForm1.Button89Click(Sender: TObject);
begin
button89.Caption:=a;
v121:=c ;
end;
procedure TForm1.Button90Click(Sender: TObject);
begin
button90.Caption:=a;
v122:=c;
end;
procedure TForm1.Button91Click(Sender: TObject);
begin
button91.Caption:=a;
v123:=c;
end;
procedure TForm1.Button92Click(Sender: TObject);
begin
button92.Caption:=a;
v124:=c;
end;
procedure TForm1.Button93Click(Sender: TObject);
begin
button93.Caption:=a;
v125:=c;
end;
procedure TForm1.Button94Click(Sender: TObject);
begin
button94.Caption:=a;
v126:=c;
end;
procedure TForm1.Button95Click(Sender: TObject);
begin
button95.Caption:=a;
v127:=c;
end;
procedure TForm1.Button96Click(Sender: TObject);
begin
button96.Caption:=a;
v128:=c;
end;
procedure TForm1.Button97Click(Sender: TObject);
var
x: integer;
begin
a:=button97.Caption;
x:=v121 and v122;
c:=1-x;
label15.caption:=inttostr(c);
end;
procedure TForm1.Button98Click(Sender: TObject);
var
x: integer;
begin
a:=button98.Caption;
x:=v123 and v124;
c:=1-x;
label16.caption:=inttostr(c);
end;
procedure TForm1.Button137Click(Sender: TObject);
begin
button137.Caption:=a;
v163:=c;
end;
procedure TForm1.Button138Click(Sender: TObject);
begin
button138.Caption:=a;
v164:=c;
end;
procedure TForm1.Button139Click(Sender: TObject);
begin
button139.Caption:=a;
v165:=c;
end;
procedure TForm1.Button140Click(Sender: TObject);
begin
button140.Caption:=a;
v166:=c;
end;
procedure TForm1.Button141Click(Sender: TObject);
begin
button141.Caption:=a;
v167:=c;
end;
procedure TForm1.Button142Click(Sender: TObject);
begin
button142.Caption:=a;
v168:=c;
end;
procedure TForm1.Button143Click(Sender: TObject);
begin
button143.Caption:=a;
v169:=c;
end;
procedure TForm1.Button144Click(Sender: TObject);
var
x: integer;
begin
x:=v161 and v162 and v163;
c:=1-x;
label22.Caption:=IntToStr(c);
a:=button144.Caption;
end;
procedure TForm1.Button145Click(Sender: TObject);
var
x: integer;
begin
x:=v164 and v165 and v166;
c:=1-x;
label23.Caption:=IntToStr(c);
a:=button145.Caption;
end;
procedure TForm1.Button146Click(Sender: TObject);
var
x: integer;
begin
x:=v167 and v168 and v169;
c:=1-x;
label24.Caption:=IntToStr(c);
a:=button146.Caption;
end;
procedure TForm1.Button36Click(Sender: TObject);
begin
start:=c;
ListBox1.Clear;
Iterator:=Len;
Timer1.Enabled:=True;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if (0 < Iterator) then
begin
Dec(Iterator);
start:=c;
ListBox1.Items.Add(IntToStr(start));
end
else
Iterator := Len;
start:=c ;
end;
end.Последний раз редактировалось corpse6666, 26.04.2013 в 11:48. |
|
#2
|
||||
|
||||
|
Цитата:
|
|
#3
|
||||
|
||||
|
Нужно бооооольше переменных... IDA-style.
![]() Не знаю, как надо упороться, чтобы написать такой код. Вообще задача решается в 3 строчки. Ставим всем кнопкам (ведь судя по коду, под клавишами подразумеваются кнопки?) один обработчик, который вытаскивает текущий tag и кладет его в очередь. Потом все кнопки повторяем по тегам. А если имеются в виду именно клавиши - так это еще проще: по событию onKeyDown формы добавляем клавишу в очередь. |
|
#4
|
||||
|
||||
|
Переменные ладно, вы лучше оцените количество кнопочек на форме
![]() Автор! Скрин этой формы можно в студию? |
|
#5
|
|||
|
|||
|
Цитата:
И по поводу укоротить а вы думайте я идиот не об являть переменные массивами? Если было бы без резницы какая переменная что делает сделал бы массив а к массиву бы код под 1-2 клавиши: D Только там целый лабораторный стол элементов и или нет + еще реализация генератора синхроимпульсов. + осцилографа и тд. ![]() |
|
#6
|
||||
|
||||
|
Посмотрел я вашу форму. Я бы вам рекомендовал положить на форму компонент ScrollBox, а уже в него все ваши компоненты. Форма у вас здоровая получается, не всякий монитор может ее отобразить в полном объеме. Кроме того, судя по тому что вы планируете, стандартные компоненты вам не очень подходят для реализации этой задачи. Можете нарисовать собственные, а можете взять уже готовый набор, например вот тут посмотрите.
А вообще, вот для размышления ![]() |
|
#7
|
|||
|
|||
|
Цитата:
повтор клавиш в порядке установленным пользователем. Остальное сам реализую)) дабы это дело ставиться под таймаут. Вот пример arr: array of integer; где арр будет принимать значение кнопок и заполняться с 0. procedure TForm1.Timer1Timer(Sender: TObject); begin Button[arr].onclick; end Button[arr].onclick; Только данная функция не кампелируется в делфи 7 Последний раз редактировалось corpse6666, 29.04.2013 в 13:34. |
|
#8
|
||||
|
||||
|
И не будет, integer и событие, это разные вещи, если только здесь не идёт речь о массиве кнопок, но можно вот так
Код:
var
i,j: integer;
arr: array of integer;
begin
for i := 0 to ComponentCount - 1 do
if (Components[i] is TButton) then
for j := Low(arr) to High(arr) do
if (Components[i] as TButton).Tag = arr[j] then (Components[i] as TButton).OnClick;
end;Код:
var
i: integer;
arr: array of integer;
begin
for i := Low(arr) to High(arr) do
(FindComponent('Button' + IntToStr(arr[i])) as TButton).OnClick;
end; |
|
#9
|
|||
|
|||
|
Выводит ошибки в таймере(находиться в конце).
Код:
var
Form1: TForm1;
a,b,c,d:integer;
i: integer;
arr: array of integer;
v1,v2:integer;
l: string;
implementation
{$R *.dfm}
procedure TForm1.Button3Click(Sender: TObject);
begin
i:=i+1;
arr[i]:=3;
a:=radiogroup1.ItemIndex;
l:=button3.Caption;
end;
procedure TForm1.Button6Click(Sender: TObject);
begin
i:=i+1;
arr[i]:=6;
a:=radiogroup2.itemindex;
l:=button6.Caption;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
i:=i+1;
arr[i]:=1;
button1.Caption:=l;
v1:=a;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
i:=i+1;
arr[i]:=2;
button2.Caption:=l;
v2:=a;
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
i:=i+1;
arr[i]:=4;
b:=v1 and v2;
a:=1-b;
label1.caption:=inttostr(a);
l:=button4.Caption;
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
i:=i+1;
arr[i]:=5;
Memo2.Text:=IntToStr(a);
Timer1.Enabled:=True;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
for i := Low(arr) to High(arr) do \[Warning] Unit1.pas(103): For loop control variable must be simple local variable
(FindComponent('Button' + IntToStr(arr[i])) as TButton).OnClick;\[Error] Unit1.pas(104): Not enough actual parameters
end;
end. |
|
#10
|
||||
|
||||
|
Цитата:
перенесите arr из публичного объявления в локальную секцию var обработчика таймера и ещё, при поиске компонета замените жим кнопки .OnClick на просто .Click. |
| Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
corpse6666 (06.05.2013)
| ||
|
#11
|
|||
|
|||
|
Как избавиться от вечного заполнения массива?
Код:
var
Form1: TForm1;
a,b,c,d:integer;
i: integer;
arr: array [0..10000] of integer;
v1,v2:integer;
l: string;
implementation
{$R *.dfm}
procedure TForm1.Button3Click(Sender: TObject);
begin
i:=i+1;
arr[i]:=3;
a:=radiogroup1.ItemIndex;
l:=button3.Caption;
end;
procedure TForm1.Button6Click(Sender: TObject);
begin
i:=i+1;
arr[i]:=6;
a:=radiogroup2.itemindex;
l:=button6.Caption;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
i:=i+1;
arr[i]:=1;
button1.Caption:=l;
v1:=a;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
i:=i+1;
arr[i]:=2;
button2.Caption:=l;
v2:=a;
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
i:=i+1;
arr[i]:=4;
b:=v1 and v2;
a:=1-b;
label1.caption:=inttostr(a);
l:=button4.Caption;
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
i:=i+1;
arr[i]:=5;
Memo2.lines.Add(inttostr(c));
Timer1.Enabled:=True;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var ii:integer;
begin
for ii := Low(arr)+1 to High(arr) do
begin
//Memo3.Lines.Add(inttostr(arr[ii]));
(FindComponent('Button' + IntToStr(arr[ii])) as TButton).onClick(Sender);
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
i:=0;
end;
end. |
|
#12
|
||||
|
||||
|
Нужно объявить Button1Click для всех баттонов
Код:
var i: integer = 0; ... procedure TForm1.Button1Click(Sender: TObject); begin inc(i); arr[i]:= (Sender as TButton).Tag; case (Sender as TButton).Tag of 3: a:= radiogroup1.ItemIndex; 6: a:=radiogroup2.itemindex; 1,2,4 : l:= (Sender as TButton).Caption; end; case (Sender as TButton).Tag of 1: v1:=a; 2: v2:=a; 4: begin b:=v1 and v2; a:=1-b; label1.caption:=inttostr(a); end; 5: begin Memo2.lines.Add(inttostr(c)); Timer1.Enabled:=True; end; end; // итд. end; |
|
#13
|
|||
|
|||
|
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
var ii:integer;
begin
for ii := Low(arr)+1 to 7 do
begin
//Memo3.Lines.Add(inttostr(arr[ii]));
(FindComponent('Button' + IntToStr(arr[ii])) as TButton).onClick(Sender);
end;![]() |
|
#14
|
|||
|
|||
|
только Sender не тот
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
var
ii:integer;
C:TComponent;
begin
for ii := Low(arr)+1 to 7 do
begin
//Memo3.Lines.Add(inttostr(arr[ii]));
C:=FindComponent('Button' + IntToStr(arr[ii]));
if C is TButton then
(C as TButton).onClick(C); //<<==-----
end;или даже Код:
procedure TForm1.Timer1Timer(Sender: TObject);
var
ii:integer;
C:TComponent;
begin
for ii := Low(arr)+1 to 7 do
begin
//Memo3.Lines.Add(inttostr(arr[ii]));
C:=FindComponent('Button' + IntToStr(arr[ii]));
if C is TButton then
(C as TButton).Click; //<<==-----
end; |
|
#15
|
||||
|
||||
|
Да нет, можно просто
Код:
(FindComponent('Button' + IntToStr(arr[ii])) as TButton).Click; |