Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.10.2010, 21:51   #1
SPQR10000
Пользователь
 
Регистрация: 23.09.2009
Сообщений: 48
По умолчанию Перемещение курсора

Всем доброго времени суток!
У меня вот какая дилемма:
Мне нужно чтобы при нажатии на кнопку Ентер курсор переключался с активного окна(Edit1)на следующее,а при нажатии в 3-ем окне кнопки ентер,нужно чтобы запускалась процедура вычисления.
Вычисления я сделал,а вот переключение курсора-нет.
Код прилагаю:
Код:
unit vadr;

var
  Form1: TForm1;
  first,x1,x2,a2,b2,c2,cx:real;
  key:char;
  implementation

{$R *.dfm}

procedure TForm1.exitClick(Sender: TObject);
begin
close;
end;

procedure TForm1.aboutClick(Sender: TObject);
begin
showmessage('Автор программы:Дмитрий Викторович aka X-Cod');
end;

procedure TForm1.resetClick(Sender: TObject);
begin
a.Clear;
b.Clear;
c.Clear;
zn1.Clear;
zn2.Clear;
end;

procedure TForm1.raschetClick(Sender: TObject);
begin
if a.Text<>'' then
a2:=strtofloat(a.Text);
b2:=strtofloat(b.Text);
c2:=strtofloat(c.Text);
if (a.Text='0')or(a.Text='') then
cx:=((-c2)/b2)
else
first:=(sqr(b2)-(4*a2*(c2)));
if first<0 then
showmessage('Уравнение не имеет решения!');
if (first>=0)and(a.Text<>'0')and(a.Text<>'')then
x1:=(((-b2)+sqrt(first))/(2*a2));
if (first>0)and(a.Text<>'0')and(a.Text<>'')then
x2:=(((-b2)-sqrt(first))/(2*a2));
zn1.text:=floattostr(x1);
zn2.text:=floattostr(x2);
zn1.visible:=true;
if (first>0)then
zn2.Visible:=true;
if first=0 then zn2.Text:='';
if (a.text='0')or(a.Text='')then
zn1.Text:=floattostr(cx);
zn2.Text:='';
zn2.Visible:=false;
zn1.Visible:=true;
if first<0 then
zn1.Text:='';
if first<0 then
zn1.Visible:=false;
end;

procedure TForm1.aKeyPress(Sender: TObject; var Key: Char);

var //цифровая маска
vrPos, vrLength, vrSelStart: byte;

const
I: byte = 1;
//I+1 = количество знаков после запятой (в данном случае - 2 знака)

begin
with Sender as TEdit do
begin
vrLength := Length(Text); //определяем длину текста
vrPos := Pos(',', Text); //проверяем наличие запятой
vrSelStart := SelStart; //определяем положение курсора
end;

case Key of
'0'..'9':

begin
//проверяем положение курсора и количество знаков после запятой
if (vrPos > 0) and (vrLength - vrPos > I) and (vrSelStart >= vrPos) then
Key := #0; //"погасить" клавишу
end;

',', '.':
begin
//если запятая уже есть или запятую пытаются поставить перед
//числом или никаких цифр в поле ввода еще нет
if (vrPos > 0) or (vrSelStart = 0) or (vrLength = 0) then
Key := #0 //"погасить" клавишу
else
Key := #44; //всегда заменять точку на запятую
end;
#8: ; //позволить удаление знаков клавишей 'Back Space'
else
Key := #0; //"погасить" все остальные клавиши
end;
end;
procedure TForm1.bKeyPress(Sender: TObject; var Key: Char);
var //цифровая маска
vrPos, vrLength, vrSelStart: byte;
const
I: byte = 1;
//I+1 = количество знаков после запятой (в данном случае - 2 знака)
begin

with Sender as TEdit do
begin
vrLength := Length(Text); //определяем длину текста
vrPos := Pos(',', Text); //проверяем наличие запятой
vrSelStart := SelStart; //определяем положение курсора
end;

case Key of

'0'..'9':
begin
//проверяем положение курсора и количество знаков после запятой
if (vrPos > 0) and (vrLength - vrPos > I) and (vrSelStart >= vrPos) then
Key := #0; //"погасить" клавишу
end;
',', '.':
begin
//если запятая уже есть или запятую пытаются поставить перед
//числом или никаких цифр в поле ввода еще нет
if (vrPos > 0) or (vrSelStart = 0) or (vrLength = 0) then
Key := #0 //"погасить" клавишу
else
Key := #44; //всегда заменять точку на запятую
end;
#8: ; //позволить удаление знаков клавишей 'Back Space'
else
Key := #0; //"погасить" все остальные клавиши
end;
end;

procedure TForm1.cKeyPress(Sender: TObject; var Key: Char);
var //цифровая маска
vrPos, vrLength, vrSelStart: byte;
const
I: byte = 1;
//I+1 = количество знаков после запятой (в данном случае - 2 знака)
begin

with Sender as TEdit do
begin
vrLength := Length(Text); //определяем длину текста
vrPos := Pos(',', Text); //проверяем наличие запятой
vrSelStart := SelStart; //определяем положение курсора
end;

case Key of

'0'..'9':
begin
//проверяем положение курсора и количество знаков после запятой
if (vrPos > 0) and (vrLength - vrPos > I) and (vrSelStart >= vrPos) then
Key := #0; //"погасить" клавишу
end;
',', '.':

begin
//если запятая уже есть или запятую пытаются поставить перед
//числом или никаких цифр в поле ввода еще нет
if (vrPos > 0) or (vrSelStart = 0) or (vrLength = 0) then
Key := #0 //"погасить" клавишу
else
Key := #44; //всегда заменять точку на запятую
end;
#8: ; //позволить удаление знаков клавишей 'Back Space'
else
Key := #0; //"погасить" все остальные клавиши
end;
end;
end.
Окно формы прилагаю:
[IMG][/IMG]
SPQR10000 вне форума Ответить с цитированием
Старый 22.10.2010, 22:41   #2
Don Karleone
Форумчанин
 
Регистрация: 05.04.2010
Сообщений: 410
По умолчанию

в KeyPress для первого Edit'а пропиши if Key = #13 the Edit2.SetFocus;
аналогично и для второго.
ICQ: 593-013-807
Don Karleone вне форума Ответить с цитированием
Старый 23.10.2010, 16:51   #3
SPQR10000
Пользователь
 
Регистрация: 23.09.2009
Сообщений: 48
По умолчанию

хмм,попробовал поставить-не сработало(
SPQR10000 вне форума Ответить с цитированием
Старый 23.10.2010, 17:11   #4
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Суть такая(простенький пример):
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    procedure FormCreate(Sender: TObject);
    procedure Edit1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Edit2KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  I:Integer;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
      I:=0;
end;

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
      If Key = VK_RETURN Then Edit2.SetFocus;
end;

procedure TForm1.Edit2KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
      If Key = VK_RETURN Then
      Begin
            Edit3.Text:=IntToStr(StrToInt(Edit1.Text)+StrToInt(Edit2.Text));
      End;
end;

end.
_-Re@l-_ вне форума Ответить с цитированием
Старый 23.10.2010, 17:27   #5
SPQR10000
Пользователь
 
Регистрация: 23.09.2009
Сообщений: 48
По умолчанию

Всем спасибо,дорогие форумчане!
Вы мне помогли,все работает(разобрался багодаря вам!))
Да,еще вопросик:
я заметил,что работает вариант
Код:
If Key = VK_RETURN Then Edit2.SetFocus;
а мой вариант
Код:
if key= #13 then
b.SetFocus;
не работант!
Я знаю,что запись #13 еквивалентна VK_RETURN,но работать отказываеться напрочь.
Может тут какойто сокральный смысл?
SPQR10000 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перемещение курсора Memo в начало(Delphi) ChEaTeR-abc Помощь студентам 3 11.09.2010 20:54
Выпадающий список и перемещение курсора valerij Microsoft Office Excel 4 24.05.2010 12:36
Перемещение курсора мыши UNREALcv Помощь студентам 1 11.04.2010 11:39
Перемещение курсора kykysya БД в Delphi 2 07.04.2009 20:33
Перемещение обьекта! TRIO JavaScript, Ajax 1 22.12.2008 19:49