Добавить текстовое поле, где будет меняться значение в зависимости от нажатой кнопки (конвертер валют) - Free Pascal
Формулировка задачи:
Нужно в интерфейсе программы ,сделать текстовое поле ,в котором будет меняться значение в зависимости от нажатой кнопки.(конвертер валют).Вообщем ,кнопки ,поле ввода сделал,осталось лишь поле в которое будет выводиться результат,не допираю как написать,чтобы можно было раз за разом нажимать ,на евро потом на д и т.д. и чтобыменялось значение.
program Converter; uses Objects, App, Drivers, Dialogs, Menus, Views, MsgBox; const GreetThemCmd = 1000; type PMyApp = ^TMyApp; TMyApp = object(TApplication) procedure InitStatusLine; virtual; procedure InitMenuBar; virtual; procedure GreetingBox; procedure HandleEvent(var Event: TEvent); virtual; procedure GreetingBoxEnd; end; type PInputInt = ^TInputInt; {inputline dlya integer} TInputInt = object(TInputLine) constructor Init(R: TRect); procedure GetData(var Rec); virtual; {poluchaet chislo iz inputline, esli ono integer} procedure SetData(var Rec); virtual; {zadaet chislo v inputline} end; procedure TMyApp.InitMenuBar; var R: TRect; begin GetExtent(R); R.B.Y := R.A.Y + 1; MenuBar := New(PMenuBar, Init(R, NewMenu( NewSubMenu('~C~onverter', hcNoContext, NewMenu( NewItem('~Z~apusk...','', 0, GreetThemCmd, hcNoContext, NewLine( NewItem('E~x~it', 'Alt-X', kbAltX, cmQuit, hcNoContext, nil)))), nil)))); end; procedure TMyApp.InitStatusLine; {sozdaet stroku statusa} var R: TRect; begin GetExtent(R); R.A.Y := pred (R.B.Y); {koordinaty statusline} StatusLine := New(PStatusLine, Init(R, NewStatusDef(0, $FFFF, NewStatusKey('~Alt-X~ Exit', kbAltX, cmQuit, NewStatusKey('~F1~ Start', kbF1, cmCancel, NIL)), NIL))); end; constructor TInputInt.Init(R: TRect); begin TInputLine.Init(R, 128); end; procedure TInputInt.GetData(var Rec); {poluchaem iz inputline} var er: integer; R: integer absolute Rec; begin val(Data^, R, er); end; procedure TInputInt.SetData(var Rec); {zapis v inputline} var R: integer absolute Rec; begin str(R, Data^); SelectAll(true); end; procedure TMyApp.GreetingBox; var R: TRect; D: PDialog; C: Word; countLine: PInputInt; count,count1:real; begin count1:=45; { Create a dialog } R.Assign(15, 5, 65, 46); D := New(PDialog, Init(R, 'Vas privetstvuet converter !')); { Create and insert controls into the dialog} R.Assign(3, 2, 19,10); D^.Insert(New(PStaticText, Init(R, 'V kakuy valutu vi gelaete perevesti Rubli?'))); R.Assign(20,3,31,4); {koordinaty inputline} countLine := New(PInputInt, Init(R)); {opisyvaem inputline} D^.Insert(countLine); {vstavlyaem v okno} R.Assign(33,2,45,4); D^.Insert(New(PButton, Init(R, 'Dollar', cmCancel, bfNormal))); R.Assign(33,4, 45,6); D^.Insert(New(PButton, Init(R, 'Euro', cmCancel, bfNormal))); R.Assign(33,6, 45,8); D^.Insert(New(PButton, Init(R, 'Grivna', cmCancel, bfNormal))); R.Assign(33,8, 45,10); D^.Insert( New(PButton, Init(R, 'Frank', cmCancel, bfNormal))); R.Assign(33,10,45,12); D^.Insert( New(PButton, Init(R, 'EXIT', cmCancel, bfNormal))); R.Assign(20, 12, 31, 13); D^.Insert(New(PStaticText, Init(R, 'Itogo',count1)));; { Execute the modal dialog } C := DeskTop^.ExecView(D); end; procedure TMyApp.GreetingBoxEnd; var R: TRect; D: PDialog; C: Word; insertButton: PButton; count,count1:real; begin { Create a dialog } R.Assign(25, 5, 85, 46); D := New(PDialog, Init(R, 'ГђЛњГ‘‚ГђВѕГђВіГђВѕ ГђВїГђВѕГђ»Г‘Ж’Г‘‡Гђ°ГђµГђВј ')); //D^.Insert(New(PStaticText, Init(''))); R.Assign(1, 5, 25, 7); {koordinaty knopki} insertButton := new(PButton, Init(R, '~O~k', cmCancel, bfDefault)); {opisyvaem knopku} Insert(insertButton); {vstavlyaem knopku} end; procedure TMyApp.HandleEvent(var Event: TEvent); begin TApplication.HandleEvent(Event); if Event.What = evCommand then begin case Event.Command of GreetThemCmd: GreetingBox; else Exit; end; ClearEvent(Event); end; end; var MyApp: TMyApp; begin MyApp.Init; MyApp.Run; MyApp.Done; end.
Решение задачи: «Добавить текстовое поле, где будет меняться значение в зависимости от нажатой кнопки (конвертер валют)»
textual
Листинг программы
program Converter; uses Objects, App, Drivers, Dialogs, Menus, Views, MsgBox, sysutils; const GreetThemCmd = 1000; cmDollar = 1001; cmEuro = 1002; cmGrivna = 1003; cmFrank = 1004; (* PInputInt = ^TInputInt; {inputline dlya integer} TInputInt = object(TInputLine) constructor Init(R: TRect); procedure GetData(var Rec); virtual; {poluchaet chislo iz inputline, esli ono integer} procedure SetData(var Rec); virtual; {zadaet chislo v inputline} end; *) type PConvertDialog = ^TConvertDialog; TConvertDialog = object(TDialog) Ru, V : PInputLine; constructor Init; procedure HandleEvent(var Event : TEvent); virtual; private procedure Converting(rate : Double); end; PMyApp = ^TMyApp; TMyApp = object(TApplication) ConvDialog : PConvertDialog; procedure InitStatusLine; virtual; procedure InitMenuBar; virtual; // procedure GreetingBox; procedure HandleEvent(var Event: TEvent); virtual; procedure GreetingBoxEnd; end; procedure TMyApp.InitMenuBar; var R: TRect; begin GetExtent(R); R.B.Y := R.A.Y + 1; MenuBar := New(PMenuBar, Init(R, NewMenu( NewSubMenu('~C~onverter', hcNoContext, NewMenu( NewItem('~Z~apusk...','', 0, GreetThemCmd, hcNoContext, NewLine( NewItem('E~x~it', 'Alt-X', kbAltX, cmQuit, hcNoContext, nil)))), nil)))); end; procedure TMyApp.InitStatusLine; {sozdaet stroku statusa} var R: TRect; begin GetExtent(R); R.A.Y := pred (R.B.Y); {koordinaty statusline} StatusLine := New(PStatusLine, Init(R, NewStatusDef(0, $FFFF, NewStatusKey('~Alt-X~ Exit', kbAltX, cmQuit, NewStatusKey('~F1~ Start', kbF1, cmCancel, NIL)), NIL))); end; (* constructor TInputInt.Init(R: TRect); begin TInputLine.Init(R, 128); end; *) (* procedure TInputInt.GetData(var Rec); {poluchaem iz inputline} var er: integer; R: integer absolute Rec; begin val(Data^, R, er); end; procedure TInputInt.SetData(var Rec); {zapis v inputline} var R: integer absolute Rec; begin str(R, Data^); SelectAll(true); end; *) constructor TConvertDialog.Init; var R: TRect; // D: PDialog; C: Word; // countLine: PInputInt; // count, count:Integer; begin count:=45; { Create a dialog } R.Assign(15, 5, 65, 46); inherited Init(R, 'Vas privetstvuet converter !'); // D := New(PDialog, Init(R, 'Vas privetstvuet converter !')); R.Assign(20,3,31,4); {koordinaty inputline} Ru := New(PInputLine, Init(R, Count)); {opisyvaem inputline} {D^.}Insert(Ru); {vstavlyaem v okno} { Create and insert controls into the dialog} R.Assign(3, 2, 19,10); {D^.}Insert(New(PStaticText, Init(R, 'V kakuy valutu vi gelaete perevesti Rubli?'))); R.Assign(33,2,45,4); {D^.}Insert(New(PButton, Init(R, 'Dollar', cmDollar, bfNormal))); R.Assign(33,4, 45,6); {D^.}Insert(New(PButton, Init(R, 'Euro', cmCancel, bfNormal))); R.Assign(33,6, 45,8); {D^.}Insert(New(PButton, Init(R, 'Grivna', cmCancel, bfNormal))); R.Assign(33,8, 45,10); {D^.}Insert( New(PButton, Init(R, 'Frank', cmCancel, bfNormal))); (* R.Assign(33,10,45,12); {D^.}Insert( New(PButton, Init(R, 'EXIT', cmCancel, bfNormal))); *) R.Assign(3, 12, 19,13); {D^.}Insert(New(PStaticText, Init(R, 'Itogo'))); R.Assign(20, 12, 31, 13); V := New(PInputLine, Init(R, Count)); {D^.}Insert(V); { Execute the modal dialog } // C := DeskTop^.ExecView(D); end; procedure TMyApp.GreetingBoxEnd; var R: TRect; D: PDialog; C: Word; insertButton: PButton; count,count1:real; begin { Create a dialog } R.Assign(25, 5, 85, 46); D := New(PDialog, Init(R, 'Dialog')); //D^.Insert(New(PStaticText, Init(''))); R.Assign(1, 5, 25, 7); {koordinaty knopki} insertButton := new(PButton, Init(R, '~O~k', cmCancel, bfDefault)); {opisyvaem knopku} Insert(insertButton); {vstavlyaem knopku} end; procedure TConvertDialog.Converting(rate : Double); var Rubles : string; Value : string; begin Ru^.GetData(Rubles); Value := FloatToStr(StrToFloat(Rubles) / rate); V^.SetData(Value); end; procedure TConvertDialog.HandleEvent(var Event : TEvent); var Rubles : string; begin inherited HandleEvent(Event); if Event.What = evCommand then begin case Event.Command of cmDollar : Converting(32.6587); cmEuro : Converting(45.0559); end; ClearEvent(Event); end; end; procedure TMyApp.HandleEvent(var Event: TEvent); begin TApplication.HandleEvent(Event); if Event.What = evCommand then begin case Event.Command of GreetThemCmd: begin // GreetingBox; ConvDialog := New(PConvertDialog, Init); InsertWindow(ConvDialog); end; else Exit; end; ClearEvent(Event); end; end; var MyApp: TMyApp; begin MyApp.Init; MyApp.Run; MyApp.Done; end.
Объяснение кода листинга программы
- В коде используется язык программирования Free Pascal.
- Код представляет собой приложение с графическим интерфейсом (GUI), которое включает в себя главное окно и диалоговое окно для конвертации валюты.
- В коде присутствуют комментарии, которые описывают основные элементы и функции программы.
- В начале кода объявлены константы для команд, которые могут быть выполнены в главном окне и диалоговом окне конвертации валюты.
- В главном окне приложения есть меню и статус-бар.
- При создании главного окна приложения вызывается функция InitMenuBar, которая добавляет пункты меню
Start
иExit
. - При создании диалогового окна конвертации валюты вызывается функция Init, которая устанавливает размеры окна и добавляет кнопки для выбора валюты и отображения результата.
- В диалоговом окне конвертации валюты есть поле ввода, в которое пользователь может ввести количество рублей для конвертации.
- При выборе валюты и нажатии кнопки
OK
вызывается функция Converting, которая конвертирует сумму рублей в выбранную валюту и отображает результат в поле ввода. - В функции HandleEvent главного окна приложения обрабатываются события, такие как нажатие кнопок меню и диалоговых окон.
- При нажатии кнопки
Exit
в главном окне приложения вызывается функция GreetingBoxEnd, которая закрывает приложение. - В функции GreetingBoxEnd создается диалоговое окно с кнопкой
OK
, которое закрывается при нажатии кнопки. - В функции HandleEvent диалогового окна конвертации валюты обрабатываются события, такие как нажатие кнопок выбора валюты.
- При нажатии кнопки
Euro
в диалоговом окне конвертации валюты вызывается функция Converting с курсом обмена евро. - При нажатии кнопки
Dollar
в диалоговом окне конвертации валюты вызывается функция Converting с курсом обмена доллара. - При нажатии кнопки
Frank
в диалоговом окне конвертации валюты вызывается функция Converting с курсом обмена франка. - При нажатии кнопки
Grivna
в диалоговом окне конвертации валюты вызывается функция Converting с курсом обмена гривны. - В функции Converting происходит конвертация суммы рублей в выбранную валюту и отображение результата в поле ввода.
- В функции HandleEvent диалогового окна конвертации валюты обрабатываются события, такие как изменение значения в поле ввода.
- При нажатии кнопки
Cancel
в диалоговом окне конвертации валюты вызывается функция GreetingBoxEnd, которая закрывает диалоговое окно.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д