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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.09.2012, 17:28   #1
gylayko
Форумчанин
 
Регистрация: 14.09.2011
Сообщений: 203
По умолчанию как в делфи запомнить число из процедуры?

мне нужно запомнить число из процедуры нажатия одной кнопки в процедуру нажатия другой. то есть, выполняем при нажатии одной кнопки мы переводим из числа любой систему исчисления в десятичную, а потом в любую другую, указанную пользователем. мне нужно где-то запомнить число в десятичной системе и при нажатии другой кнопки выводить его. делаю эту переменную глобальной, а она равна 0! что же делать? как запомнить число из процедуры и применить его в другой процедуре?
Код:
unit Unit1;

interface

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

type
 TForm1 = class(TForm)
   Button1: TButton;
   Edit1: TEdit;
   Edit2: TEdit;
   Edit3: TEdit;
   Label1: TLabel;
   Label2: TLabel;
   Label4: TLabel;
   Label3: TLabel;
   Label5: TLabel;
   Label6: TLabel;
   Edit4: TEdit;
   Label7: TLabel;
   Edit5: TEdit;
   Button2: TButton;
   procedure Button1Click(Sender: TObject);
   procedure Button2Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1; r10:Integer;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
 i,p,p1:integer;
 z : byte;
 s : string;
begin
 s:=Edit1.Text;
 p:=StrToInt(Edit2.Text);

 r10:=0;
 for i:=1 To Length(s) do
 begin
    z:=Ord(s[i]);
    if (s[i] In ['0'..'9']) then z:=z-Ord('0') else
    if (s[i] In ['a'..'f']) then z:=z-Ord('a')+10 else
    z:=z-Ord('A')+10;
    if Not (s[i] In ['0'..'9','a'..'f','A'..'F']) Then
    begin
      ShowMessage('символ не принадлежит к систему исчисления');
      Exit;
    end;
    r10:=r10*p+z;
 End;
p1:=StrToInt(Edit3.Text);
  s:='';
  while r10<>0 do
  begin
     z:=(r10 Mod p1);
     if z<10 then s:=Chr(z+Ord('0'))+s else
     s:=Chr(z-10+Ord('A'))+s;
     r10:=r10 Div p1;
  end;
  if Length(s)=0 then s:='0';
  Edit4.Text:=s;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Edit5.Text:=IntToStr(r10);
end;

end.
пытался r10:Integer; перенести в процедуру и добавить другую глобальную переменную gr10:Integer; и перед while r10<>0 do добавить строку gr10 := r10; и далее заменить Edit5.Text:=IntToStr(r10); на Edit5.Text:=IntToStr(gr10);
в результате все равно 0!
gylayko вне форума Ответить с цитированием
Старый 15.09.2012, 17:33   #2
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

в объявлении процедурки напишите
Код:
procedure Example ( ...; var r10 : Integer);
Poma][a вне форума Ответить с цитированием
Старый 15.09.2012, 17:46   #3
gylayko
Форумчанин
 
Регистрация: 14.09.2011
Сообщений: 203
По умолчанию

Цитата:
Сообщение от Poma][a Посмотреть сообщение
в объявлении процедурки напишите
Код:
procedure Example ( ...; var r10 : Integer);
не работает! и куча ошибок выскакивает.
gylayko вне форума Ответить с цитированием
Старый 15.09.2012, 17:49   #4
GetMax
Форумчанин
 
Регистрация: 21.10.2010
Сообщений: 588
По умолчанию

Цитата:
не работает! и куча ошибок выскакивает.
Покажите код процедуры с var-параметром! Какие ошибки выскакивают!?
Пользователь не знает, чего он хочет, пока не увидит то, что он получил.
Для благодарностей WMR R145235935681
GetMax вне форума Ответить с цитированием
Старый 15.09.2012, 17:54   #5
gylayko
Форумчанин
 
Регистрация: 14.09.2011
Сообщений: 203
По умолчанию

вот
Код:
procedure TForm1.Button1Click(Sender: TObject; var r10:Integer);
ошибки такие: declaration of 'Button1Click' differs from previous declaration, Undeclared indefender 'Edit1', Midding operator of semiclon и другие, но к строке объявления процедуры относится только первая. но остальные возникают только при таком варианте объявления.
gylayko вне форума Ответить с цитированием
Старый 15.09.2012, 18:03   #6
GetMax
Форумчанин
 
Регистрация: 21.10.2010
Сообщений: 588
По умолчанию

Нельзя, насколько мне известно, в Button1Clicl и ему подобных передавать дополнительные параметры. Сделайте пользовательскую подпрограмму и в ней передавайте сколько вам нужно параметров, а уж это подпрограмму вызывайте в Button1Click
Код:
Procedure Something(var r10:Integer);
Begin
....
End;
procedure TForm1.Button1Click(Sender: TObject);
Var
  local_r10:Integer;
Begin
  local_r10:=0;
  Something(local_r10;)
end
как то так
Пользователь не знает, чего он хочет, пока не увидит то, что он получил.
Для благодарностей WMR R145235935681
GetMax вне форума Ответить с цитированием
Старый 15.09.2012, 18:14   #7
gylayko
Форумчанин
 
Регистрация: 14.09.2011
Сообщений: 203
По умолчанию

теперь на всех эдитах Undeclared indefender и Missing operator of semiclon
gylayko вне форума Ответить с цитированием
Старый 15.09.2012, 21:10   #8
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Объявите r10 в public-разделе класса TForm
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 15.09.2012, 21:14   #9
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
Сообщение от gylayko Посмотреть сообщение
теперь на всех эдитах Undeclared indefender и Missing operator of semiclon
Первая ошибка - из-за того, что не объявили насоветанную процедуру в классе TForm (и, соответственно, в коде модуля в имени процедуры нужно дописать TForm.). Вторая - на мой взгляд возникает из-за первой, уберете ее - само все нормально устроится

И, кстати, там в коде очепятка, если Вы его дословно скопировали - отсюда и вторая ошибка. Должно быть так:

Код:
Something(local_r10);
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...

Последний раз редактировалось Sciv; 15.09.2012 в 21:17.
Sciv вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как запомнить координаты Image? werrey Общие вопросы Delphi 4 21.07.2011 23:08
Как запомнить строку.... Avvakymova Паскаль, Turbo Pascal, PascalABC.NET 10 13.05.2011 23:55
Как запомнить столько Данных? valerij Microsoft Office Excel 18 03.05.2010 19:52
[Делфи]Самое маленькое число. Как вычислить? zotox Помощь студентам 15 08.09.2009 15:47