IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Компонент-Калькулятор
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 49
Пол: Мужской

Репутация: -  0  +


При создании калькулятора возникла проблема: в задаче есть 2 Edit'а в них вводятся значения a и b над которыми производятся определённые операции,поставив курсор в Edit1 и вводя значения при помощи кнопок калькулятора вводится нормально а когда поставить курсор на Edit2 и начав вводить значения при помощи кнопок курсор перескакивает на Edit1 и начинает вводить значения туда,помогите пожалуйста это исправить.
Проблему можно увидеть в процедурах Button2Click-Button11Click и в Button25Click. Там видно что коряво это написал но по другому не знаю как(



unit Unit1;

interface

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

type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Edit3: TEdit;
Edit1: TEdit;
Edit2: TEdit;
Image1: TImage;
Image2: TImage;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;
Button7: TButton;
Button8: TButton;
Button9: TButton;
Button10: TButton;
Button11: TButton;
Button12: TButton;
Button13: TButton;
Button14: TButton;
Button15: TButton;
Button17: TButton;
Button18: TButton;
Button19: TButton;
Button20: TButton;
Button21: TButton;
Button22: TButton;
Button23: TButton;
Button25: TButton;
CheckBox1: TCheckBox;
Button1: TButton;
CheckBox2: TCheckBox;

procedure Edit1Change(Sender: TObject);
procedure Edit2Change(Sender: TObject);
procedure Edit2KeyPress(Sender: TObject; var Key: Char);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
procedure Image1Click(Sender: TObject);
procedure Image2Click(Sender: TObject);
procedure Button16Click(Sender: TObject);
procedure Button12Click(Sender: TObject);
procedure Button13Click(Sender: TObject);
procedure Button14Click(Sender: TObject);
procedure Button15Click(Sender: TObject);
procedure Button17Click(Sender: TObject);
procedure Button18Click(Sender: TObject);
procedure Button19Click(Sender: TObject);
procedure Button20Click(Sender: TObject);
procedure Button21Click(Sender: TObject);
procedure Button23Click(Sender: TObject);

procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
procedure Button8Click(Sender: TObject);
procedure Button9Click(Sender: TObject);
procedure Button10Click(Sender: TObject);
procedure Button11Click(Sender: TObject);
procedure Button22Click(Sender: TObject);
procedure Button25Click(Sender: TObject);
procedure CheckBox1Click(Sender: TObject);
procedure Button1Click(Sender: TObject);

private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

s1,s2: string;
a,b,c: real;
operacia, i, k: integer;
vibrano, injener: boolean;

implementation

{$R *.dfm}

procedure ravno;
begin
if ((form1.Edit1.Text='') or (form1.Edit2.Text='')) and
(injener=false) then begin
showmessage('не задан операнд');
exit;
end;

a:=strtofloat(form1.Edit1.Text);
if injener <> true then b:=strtofloat(form1.Edit2.Text);


if (b=0) and(form1.Edit2.Text<>'')then begin
showmessage('На ноль делить нельзя');
form1.Edit2.Text:='';
exit;
end;

case operacia of
1: c:=a+b;
2: c:=a-b;
3: c:=a*b;
4: c:=a/b;
5: begin
if form1.checkbox2.checked=true then c:=sin(a*Pi/180) else
c:=sin(a);
end;
6: begin
if form1.checkbox2.checked=true then c:=cos(a*Pi/180) else
c:=cos(a);
end;
7: begin
if form1.checkbox2.checked=true then c:=sin(a*Pi/180)/cos(a*Pi/180) else
c:=sin(a)/cos(a);
end;
8: begin
if form1.checkbox2.checked=true then c:=cos(a*Pi/180)/sin(a*Pi/180) else
c:=cos(a)/sin(a);
end;
9: c:=sqrt(a);
10: c:=a*a;
11:
begin
c:=1;
k:= strtoint(form1.edit2.text);
for i:=1 to k do c:=a*c;
end;

end; //case
form1.Edit3.text:=floattostrf(c,ffGeneral,18,4);

end;

procedure TForm1.Edit1Change(Sender: TObject);
begin
Edit3.text:='';
end;

procedure TForm1.Edit2Change(Sender: TObject);
begin
Edit3.text:='';
vibrano:=true;
end;




procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
if not (key in ['0'..'9','+','-',#8]) then key :=#0;
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: char);
var i: integer;
begin
if not (key in ['0'..'9','+','-',#8]) then key :=#0;

end;

procedure TForm1.Image1Click(Sender: TObject);
begin
showmessage('Кротов Роман. ТПМ-301. 2009 год.');
end;

procedure TForm1.Image2Click(Sender: TObject);
begin
form1.Close;
end;

procedure TForm1.Button16Click(Sender: TObject);
begin
button17.Visible:=true;
button18.Visible:=true;
button19.Visible:=true;
button20.Visible:=true;
button21.Visible:=true;
button23.Visible:=true;
checkbox2.Visible:=false;
end;

procedure TForm1.Button12Click(Sender: TObject);
begin
operacia:=1; injener:=false;
ravno;
end;

procedure TForm1.Button13Click(Sender: TObject);
begin
operacia:=2; injener:=false;
ravno;
end;

procedure TForm1.Button14Click(Sender: TObject);
begin
operacia:=3; injener:=false;
ravno;
end;

procedure TForm1.Button15Click(Sender: TObject);
begin
operacia:=4; injener:=false;
ravno;
end;

procedure TForm1.Button17Click(Sender: TObject);
begin
operacia:=5;
injener:=true;
ravno;
end;

procedure TForm1.Button18Click(Sender: TObject);
begin
operacia:=6;

injener:=true;
ravno;
end;

procedure TForm1.Button19Click(Sender: TObject);
begin
operacia:=7;
injener:=true; ravno;
end;

procedure TForm1.Button20Click(Sender: TObject);
begin
operacia:=8; injener:=true; ravno;
end;

procedure TForm1.Button21Click(Sender: TObject);
begin
operacia:=9; injener:=true; ravno;
end;

procedure TForm1.Button23Click(Sender: TObject);
begin
operacia:=10; injener:=true;ravno;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
s1:=edit1.Text;
s1:=s1+'0';
edit1.Text:=s1;

end;

procedure TForm1.Button3Click(Sender: TObject);
begin
s1:=edit1.Text;
s1:=s1+'1';
edit1.Text:=s1;


end;

procedure TForm1.Button4Click(Sender: TObject);
begin
s1:=edit1.Text;
s1:=s1+'2';
edit1.Text:=s1;


end;

procedure TForm1.Button5Click(Sender: TObject);
begin
s1:=edit1.Text;
s1:=s1+'3';
edit1.Text:=s1;


end;

procedure TForm1.Button6Click(Sender: TObject);
begin
s1:=edit1.Text;
s1:=s1+'4';
edit1.Text:=s1;


end;

procedure TForm1.Button7Click(Sender: TObject);
begin
s1:=edit1.Text;
s1:=s1+'5';
edit1.Text:=s1;


end;

procedure TForm1.Button8Click(Sender: TObject);
begin
s1:=edit1.Text;
s1:=s1+'6';
edit1.Text:=s1;


end;

procedure TForm1.Button9Click(Sender: TObject);
begin
s1:=edit1.Text;
s1:=s1+'7';
edit1.Text:=s1;

end;

procedure TForm1.Button10Click(Sender: TObject);
begin
s1:=edit1.Text;
s1:=s1+'8';
edit1.Text:=s1;


end;

procedure TForm1.Button11Click(Sender: TObject);
begin
s1:=edit1.Text;
s1:=s1+'9';
edit1.Text:=s1;


end;

procedure TForm1.Button22Click(Sender: TObject);
begin
s1:=edit1.Text;
s1:='';
edit1.Text:=s1;
s2:=edit2.Text;
s2:='';
edit2.Text:=s2;

end;

procedure TForm1.Button25Click(Sender: TObject);
begin
s1:=edit1.Text;
s1:=s1+',';
edit1.Text:=s1;

end;

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
if CheckBox1.Checked=true then
begin
button17.Visible:=true;
button18.Visible:=true;
button19.Visible:=true;
button20.Visible:=true;
button21.Visible:=true;
checkbox2.Visible:=true;
button1.Visible:=true;
button23.Visible:=true

end
else
begin
button17.Visible:=false;
button18.Visible:=false;
button19.Visible:=false;
button20.Visible:=false;
button21.Visible:=false;
checkbox2.Visible:=false;
button23.Visible:=false;
button1.Visible:=false;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
operacia:=11;
injener:=false;
ravno;
end;

end.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

Репутация: -  627  +


Цитата
начав вводить значения при помощи кнопок курсор перескакивает на Edit1 и начинает вводить значения туда
Разумеется, ты открытым текстом приказываешь ему это сделать:

Цитата
procedure TForm1.Button11Click(Sender: TObject);
begin
s1:=edit1.Text;
s1:=s1+'9';
edit1.Text:=s1;
end;
Исправить можно так: Объявить еще одну переменную (скажем currEdit) типа TEdit, написать вот такой обработчик:

procedure TForm1.MyEditClick(Sender: TObject);
begin
CurrEdit := Sender as TEdit;
end;

, и повесить его на событие OnClick ОБОИХ эдитов. А в обработчике нажатия кнопок работать не с Edit1, а с CurrEdit, тогда кнопка будет добавлять текст к тому полю, на котором до этого был установлен фокус.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 49
Пол: Мужской

Репутация: -  0  +


А можно ещё раз пояснить с обработчиком,его нужно повесить на процедуры EditChange или EditKeypress, и как в процедуре работать с currEdit???
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

Репутация: -  627  +


Его нужно повесить на OnClick, этот обработчик должен вызываться не тогда, когда содержимое меняется, и не тогда, когда ты нажимаешь кнопку, находясь в Эдите, а тогда, когда ты кликаешь по нему мышью.

В коде выглядит так:
// Описание класса формы
// ...
private
{ Private declarations }
public
{ Public declarations }
currEdit : TEdit;
procedure MyEditClick(Sender: TObject);
end;

// ... Потом в любом месте секции Implementation - реализация MyEditClick
{$R *.dfm}

procedure TForm1.MyEditClick(Sender: TObject);
begin
CurrEdit := Sender as TEdit;
end;

// А в событии OnCreate формы - вот так:
procedure TForm1.FormCreate(Sender: TObject);
begin
currEdit := Edit1;
Edit1.OnClick := MyEditClick;
Edit2.OnClick := MyEditClick;
end;
, а потом во всех своих обработчиках Button...Click меняешь код

// С вот такого
s1:=edit1.Text;
s1:=s1+'9';
edit1.Text:=s1;

// На такой:
CurrEdit.Text := CurrEdit.Text + '9';
, и так далее. Можно, кстати, и вообще все обработчики заменить одним-единственным. Ты ж проект не присоединил, если у тебя текст на кнопке совпадает с тем, что надо добавлять в эдит - то делается еще проще: пишется опять же один обработчик
procedure TForm1.MyButtonClick(Sender: TObject);
begin
CurrEdit.Text := CurrEdit.Text + (Sender as TButton).Caption;
end;

, и назначается всем кнопкам...

Сообщение отредактировано: IUnknown -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 49
Пол: Мужской

Репутация: -  0  +


Спасибо большое за помощь,выручили smile.gif
А не подскажите как из этой сделать компонент? То есть мы выбираем вкладку компонент задаём New Component задаём параметры а как записать в виде кода дальше я не понимаю. Подскажите пожалуйста.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Новичок
*

Группа: Пользователи
Сообщений: 49
Пол: Мужской

Репутация: -  0  +


Помогите пожалуйста очень надо)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


Цитата

procedure Button16Click(Sender: TObject);
procedure Button12Click(Sender: TObject);
procedure Button13Click(Sender: TObject);
procedure Button14Click(Sender: TObject);
procedure Button15Click(Sender: TObject);
procedure Button17Click(Sender: TObject);
procedure Button18Click(Sender: TObject);
procedure Button19Click(Sender: TObject);
procedure Button20Click(Sender: TObject);
procedure Button21Click(Sender: TObject);
procedure Button23Click(Sender: TObject);

procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
procedure Button8Click(Sender: TObject);
procedure Button9Click(Sender: TObject);
procedure Button10Click(Sender: TObject);
procedure Button11Click(Sender: TObject);
procedure Button22Click(Sender: TObject);
procedure Button25Click(Sender: TObject);


Охренительные названия методов.
Дай же всем кнопкам человеческие имена и методам тоже, сразу понятнее будет, что вообще происходит.


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Новичок
*

Группа: Пользователи
Сообщений: 49
Пол: Мужской

Репутация: -  0  +


procedure Button12Click(Sender: TObject);-кнопка плюс
procedure Button13Click(Sender: TObject);-минус
procedure Button14Click(Sender: TObject);-умножение
procedure Button15Click(Sender: TObject);-деление
procedure Button17Click(Sender: TObject);-синус
procedure Button18Click(Sender: TObject);-косинус
procedure Button19Click(Sender: TObject);-тангенс
procedure Button20Click(Sender: TObject);-котангенс
procedure Button21Click(Sender: TObject);-квадратный корень
procedure Button23Click(Sender: TObject);-возвести а в квадрат

procedure Button2Click(Sender: TObject);-0
procedure Button3Click(Sender: TObject);-1
procedure Button4Click(Sender: TObject);-2
procedure Button5Click(Sender: TObject);-3
procedure Button6Click(Sender: TObject);-4
procedure Button7Click(Sender: TObject);-5
procedure Button8Click(Sender: TObject);-6
procedure Button9Click(Sender: TObject);-7
procedure Button10Click(Sender: TObject);-8
procedure Button11Click(Sender: TObject);-9
procedure Button22Click(Sender: TObject);-сброс
procedure Button25Click(Sender: TObject)-запятая
procedure Button1Click(Sender: TObject)-возвести а в степень b
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 10.09.2025 0:21
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name