|
|
|
РАЗРАБОТКИ
|
Програмиране графичен интерфейс (GUI) с Lazarus и freepascal
|
|
|
|
|
|
от PhrozenCrew(10-12-2006)
рейтинг (22)
[ добре ]
[ зле ]
Вариант за отпечатване Програмиране на програма с графичен интерфейс (GUI) с Lazarus и freepascal за Linux и Windows
В този урок в лесни стъпки ще се опитам да покажа основата за програмиране с Free pascal, като използвам IDE среда за програмиране Lazarus (перфектно IDE с отворен код за Windows и Linux).
Free Pascal е компилатор, който е много близък по синтаксис до Delphi.
Реших да напиша много семпла програмка с графичен интерфейс (GUI), която да даде основните техники на програмирането с помощта на Lazarus. Програмката ще извършва конвертиране на температура по Целзий в температура по Фаренхайт.
За да няма отегчени нека се залавяме за работа.
1. Стартирайте Lazarus и изберете от падащото меню Project -> New Project...
Ще ви се отвори прозореца "Create a new project" в който трябва да изберете типа на новия проект. Изберете "Application" (ако не е маркирано) и натиснете бутона "Create".
В този момент вече разполагате с подложка (Form1) за графчния интерфейс на програмата която искаме да напишем.
2. В лентата с инструменти, малко под падащите менюта, трябва да е избран таба "Standart". В този таб са вкарани всички по-използвани инструменти необходими за графичен интерфейс. При спиране на мишката върху всеки инструмент ще се изписва името му: TMainMenu, TPopupMenu, TButton, TLabel. За този проект ще са ви необходими само 2 инструмента - TButton и TEdit.
Кликнете върху инструмента TEdit и после кликнете където и да е върху подложката Form1. Веднага ще се появи поле за редактиране. Това поле Lazarus ще го кръсти сам Edit1.
3. Сега кликнете върху инструмента TButton и после някъде до полето за редактиране, което направихме преди малко. Lazarus ще кръсти този бутон Button1.
4. Отново кликнете на лентата с инструменти върху TEdit и после пак върху подложката Form1 някъде до Button1.
Вече трябва да имате всички необходими инструменти за графичния интерфейс на програмата, а те са две полета за редактиране и един бутон. Нека малко да оправим интерфейса. Lazarus предлага много добра снап функция при местене на елементите. разположете всичко така, че да изглежда добре.
5. Сега вече идва по-сложната част. Добре е да разбирате поне малко от езика за програмиране Pascal, но ако не разбирате няма да е фатално. Ще се опитам да обясня колкото мога. Има доста ръководства в гугъл за Pascal, така че можете да си намерите доста подробна информация.
Кликнете два пъти върху бутона Button1, който създадохте. Ще се появи прозореца с сорс кода на програмата и ще видите мигащ курсор готов за задаване на команди между begin и end:
procedure TForm1.Button1Click(Sender: TObject);
begin
end;
Точно на това място трябва да вкараме нашия код. Мдам, но какво точно да напишем. Конвертирането на температура по Целзий до температура по Фаренхайт става по следната формула:
°F = °C * 1.8 + 32
Хм, значи полето за редактиране Edit1 ще е поле за записване на температурата по Целзий, а полето Edit2 ще покаже пресметнатата температура по Фаренхейт. Нека да пробваме тая формула. Ще извлечем написаното в полето Edit1 (задължително трябва да съдържа число), след натискане на бутона Button1 после ще го обработим по формулата и ще накараме програмата да изпише резултата в Edit2. Да видим как ще изглежда самия код:
Edit2.Text := FloatToStr((StrToFloat(Edit1.Text)*1.8)+32);
Така, сега нека обясним какво направихме. С "StrToFloat" превърнахме стринга(текста) от Edit1 в число с плаваща запетая, което да се разпознава от Pascal, след това извършихме необходимите математически операции с това число и най-накрая пак го превърнахме в удобен за показване според Pascal текст с функцията "FloatToStr".
6. Да вземем да пробваме това чудо дали работи. Натиснете F9 и почакайте малко. Ако всичко е наред би трябвало да ви се покаже програмата, като в полето Edit1 трябва да напишете някакво число. Да речем че напишете 2.1356, след това натиснете бутона Button1 и вижте дали в полето Edit2 се е получил резултата 35,84408. Ако това е така значи вече сте готови графичната си програма.
7. Сега нека да направим малко фини настройки. Спрете програмката и се върнете подложката в Lazarus. Изберете елемента Edit1. В дясно се намира Object Inspeector-а в който е и Properties таба. Като се поразгледате в тоя таб ще видите полето Text, а срещу него Edit1. Изтрийте надписа Edit1.
По същия начин постъпете и с Edit2. Сега изберете бутона и намерете полето в Properties - Caption. Срещу Caption би трябвало да е изписано Button1. Изтрийте този надпис и напишете Convert.
Чудесно!. Сега дали не можем още малко да пипнем, ей така за обща култура. Май ще е добре да получаваме отговора закръглен до втория знак след десетичната запетая. За тази цел ще използваме функцията за форматиране FloatToStrf. Тази функция има много възможности, но на нас ни само една ffFixed. С тази функция можете да изберете и прецизност на закръглянето, но това е тема за друг урок. И така нека заменим реда
Edit2.Text := FloatToStr((StrToFloat(Edit1.Text)*1.8)+32);
с този
Edit2.Text := FloatToStrf((StrToFloat(Edit1.Text)*1.8)+32,ffFixed,5,2);
Компилираме отново и да видим какво се получава като зададем отново същата температура по Целзий както по-горе 2.1356.
Дали да не сменим и името на самия прозорец. Кликнете върху самата подложка и изберете от Object Inspector-a таба Favorites. Там срещу полето Caption заменете Form1 с Converter
Да компилираме пак нашата програмка и да видим какво е станало.
От там нататък следват импровизациите. Пожелавам ви успех с програмирането с Pascal!
Изходният код на програмата можете да намерите тук.
<< Правене на архиви по "лесния начин" | Размисли по HFSC >>
|
|
|
|
|
Добрият стил От: Иван Димов <idimov (a) users[ точка ]sourceforge[ точка ]net> На: 12-12-2006@5:56 GMT+2 Оценка: 1/НеутраленПризнак на добър стил е след първоначалното въвеждане на входните данни да се прави проверка за коректност т.е. в нашия случай - Какво ще стане ако в полето 1 се въведе символен низ а не число? Това може лесно да се поправи поне по няколко начин:
1. function TryStrToFloat(const S: String;var Value: Double):Boolean;
2. function StrToFloatDef(const S: String; const Default: Extended):Extended;
3. Както и досега - оставянето на средата да се справи е "противопоказно" защото потребителят нито знае (дори и да иска няма откъде) Какво точно се е объркало, нито Къде точно е станало. В случая програмката е доволно малка и е лесно да се досети, но при няколко хил. реда код нещата стоят доста по-различно?
[Отговори на този коментар]
Към: Добрият стил От: Владо На: 12-12-2006@7:48 GMT+2 Оценка: 1/НеутраленЧовека казва "съвсем елементарна програмка"!
Това е пример, ако наистина на някого ще служи за нещо тогава наистина би трябвало да има проверка на входните данни! В случая не виждам необходимост.
[Отговори на този коментар]
Към: Към: Добрият стил От: Иван Димов <idimov __@__ users[ точка ]sourceforge[ точка ]net> На: 12-12-2006@8:19 GMT+2 Оценка: 1/НеутраленИменно защото е "съвсем елементарна" и "обучаваща" трябва и да ги научи на нещо нали. Дотолкова доколкото е за програмиране с ГПИ кода в случая чак толкова не ги касае и без това повечето ще го "копират" и "поставят" направо в текста (тук ми хрумва идея за една по-смислена АНКЕТА колко души тук просто копират кода от такива примери без да го четат). Поне да научат нещо и за истинското програмиране - "животът" (програмисткият) не е само ГПИ програмиране ;-) като стане по интересен и кодът може пък някой и друг да се позаинтересува повече от Lazarus и freepascal, а смятам че това и истинската цел на тази статия.
[Отговори на този коментар]
Към: Добрият стил От: Добри На: 12-12-2006@13:02 GMT+2 Оценка: 1/НеутраленМного си е добре статията.
Заглавието и между другото не е "Как се пише клиентски ориентиран софтуер" а е "Програмиране графичен интерфейс (GUI)"
Поздрави
[Отговори на този коментар]
Към: Към: Добрият стил От: Иван Димов <idimov< at >users< dot >sourceforge< dot >net> На: 13-12-2006@5:46 GMT+2 Оценка: 1/НеутраленМного си е добре статията обаче... точно заглавието не биваше да намесваш:
Заглавието е "Програмиране графичен интерфейс (GUI)" макар че аз един ред код не видях как точно се програмира тоя ГПИ поне един TButton.Create или TEdit.Create да имаше :-)
По-скоро трябваше да се казва "Създаване/Изграждане на ГПИ с Lazarus" и freepascal да отпадне въобще, защото в тази статия целият ГПИ е изграден изцяло и само със средствата на средата за разработка - понеже с другите тук спорим че кодът не влиза в сметката и е само за илюстрация (той и без това за нещо по-сериозно не става) т.е. ако махнем онези двата реда които сами сме си написали/копирали, къде е кода който сме написали/научили за "Програмиране графичен интерфейс"?
[Отговори на този коментар] Към: По повод заглавието От: Иван Димов <idimov__at__users__dot__sourceforge__dot__net> На: 13-12-2006@5:56 GMT+2 Оценка: 1/Неутрален"Програмиране на програма с графичен интерфейс (GUI) с Lazarus и freepascal за Linux и Windows" - защо само Linux и Windows?
Според:
http://freepascal.org/faq.var#FPandGNUP...
Operating systems:
Free Pascal runs on a large amount of platforms of OSes, e.g. DOS, Win32 (no Unix porting layer needed), Linux, FreeBSD, NetBSD, OS/2, BeOS, Classic Mac OS, Mac OS X, and AmigaOS, on, at the moment the following architectures: x86, x86_64 (AMD64), Sparc, PowerPC, ARM and Motorola (Motorola only in version 1.0.x).
[Отговори на този коментар] Към: Към: По повод заглавието От: dekiland <dekiland (a) gmail__dot__com> На: 14-12-2006@11:16 GMT+2 Оценка: 1/НеутраленLazarus не е freepascal и го има само за линукс, уиндоус и мак ос.
[Отговори на този коментар] Към: Към: Към: По повод заглавието От: dekiland <dekiland__at__gmail__dot__com> На: 14-12-2006@11:19 GMT+2 Оценка: 1/НеутраленLazarus IDE не е FreePascal и го има за Linux (i386+ia64+Sparc), FreeBSD, MacOSX and Windows. Ето цитат--
The Lazarus IDE is a stable and feature rich visual programming environment for the FreePascal Compiler. It supports the creation of self-standing graphical and console applications and runs on Linux (i386+ia64+Sparc), FreeBSD, MacOSX and Windows.
[Отговори на този коментар]
Добре От: mrvalko <mrvalko< at >abv__dot__bg> На: 12-12-2006@6:28 GMT+2 Оценка: 1/НеутраленХареса ми превода на form с подложка. Ама е неудачно да обясняваш на начинаещи програмиране с израз като FloatToStr((StrToFloat(Edit1.Text)*1.8)+32). Ще е по-ясно, ако на отделни редове се изпълнят стъпките, описани под формулата.
[Отговори на този коментар] Полезно От: KingPin На: 21-12-2006@12:05 GMT+2 Оценка: 1/НеутраленПомня каква главоблъсканица беше когато учех Паскал в училище и се опитвах да премина на Делфи.Подобна статия щеше да ми е от огромна полза.
Само може да добавите идеята за "събития" - че програмата няма начало и край, а отговаря на възникнали събития като натискането на бутон.
В книгата Борланд Делфи, много добре показаха това с една картинка.Няма да е лошо ако сложите подобна.
[Отговори на този коментар]
Към: Полезно От: www.d256h.com <d256h __@__ vip[ точка ]bg> На: 10-01-2007@12:49 GMT+2 Оценка: 1/НеутраленАз пиша на Делфи 6. Писна ми MS и залитането на Борланд към ДотНет. Статията ми допадна с това, че дава алтернатива позволяваща да се избяга от комерсиалните развойни среди, като при това може да се спести време от "ново четене" на програмни езици, защото наученото за Паскал остава в сила. Тук примера е достатъчно ясен и няма какво да го спрягаме за стил и оптимизации. Благодаря на автора, че ми даде надежда - продължаване писането на код извън кретенския комерсиален свят..
[Отговори на този коментар]
Недоносче !!! От: Delphi -> Lazarus На: 22-01-2007@20:40 GMT+2 Оценка: 1/НеутраленКоментара ми може би ще е малко по-остър, но сравнение на Delphi и Lazarus поне за мен е твърде наивно да се прави! Та те са на светлини години като възможности, удобство, подръжка, разработчици, и компонентна база един спрямо друг.
За тези които им е омръзнало да четат за програмиране бих казал, че минимум са се отказали да се развиват. Инсталирал съм въпросния продукт!!! Недоносче !!! Примера които е даден по никакъв начин не илюстрира възможностите на продукта. Не съм фен на windows, но и тези хвалби, че едва ли не от едното(Delphi) минаваме на другото (Lazarus) са меко казано пресилени. За какво залитане на Borland "ДотНет" става дума!!! Borland се опитват да продадът развойните си среди и повече с това да не се занимават!?
[Отговори на този коментар]
Към: Недоносче !!! От: Иво Гелов <ivo_gelov< at >abv__dot__bg> На: 21-01-2008@18:46 GMT+2 Оценка: 1/НеутраленМакара и с не толкова остри думи, съгласен съм, че Lazarus е доста далеч като възможности от Delphi (не говоря за конкретни версии). Бих препоръчал (поне аз лично го правя) на желаещите да продължат да си програмират на Делфи и да пускат програмите с WINE.
Вярно - FreePascal като компилатор ми изглежда по-добре изпипан от Lazarus (който е просто една надстройка), но дори и само компилаторът генерира в пъти повече обектен код спрямо Delphi. В последно време правиха опити да увеличат скоростта на компилатора, имаше различни варианти за линкера - но въпреки това си остава по-бавен и неоптимизиран от Delphi.
Не искам да разпалвам отново религиозни войни - само си споделям впечатления. Всеки е свободен сам да опита, и да си направи извод и решение за себе си.
Това е от мен.
[Отговори на този коментар]
Относно коментарите От: PhrozenCrew <magarence __@__ mail __точка__ bg> На: 16-05-2008@15:39 GMT+2 Оценка: 1/НеутраленБлагодаря за коментарите хора. Може би трябва да обясня, че аз не съм нито програмист нито Unix гуро. Аз съм инженер и се занимавам с функционално проектиране на домашни хладилници към немска фирма.
Благодарен съм за продуктите с отворен код, като тези за които написах статията, защото ми улесняват много и работата, и ежедневието.
Въобще не съм си и помислял да сравнявам използването на FreePascal под Linux с дългогодишния Windows-ки ветеран Delphi. Това е все едно да сравня 3D CAD/CAM програмите писани за Unix още преди 30 години (като PROe) с бледите им портове за Windows.
Не ми беше това целта. Просто исках да споделя скромния си опит с тези продукти (Lazarus и FreePascal) с хора като мен - непрофесионалисти и тотални аматьори, защото макар и така написан кода ми върши много работа. Имам много такива програмки, които ми улесняват живота, особено една, която смята температура на мокър термометър и точка на оросяване според атмосферното налягане и температура. Написах си и програма, която е графичен интерфейс на wget (обожавам този доунлоадер, особено заради възможността да точи сайтове и да прави mirror-и) - и всичко това става толкова просто, само с няколко клика в Lazarus.
Живи и здрави!
[Отговори на този коментар] Е хайде сега... От: lokster На: 3-06-2008@12:47 GMT+2 Оценка: 1/НеутраленЧовека седнал да напише малка статийка в помощ на начинаещите, и веднага се намериха критикуващи - че кода не бил добър, че средата не можела да се сравнява с Делфи и т.н. Ми седнете и напишете по-добра статия!
Освен това кой начинаещ в програмирането го интересува проверка за валидност на въведените стойности?! Той иска да цъкне два пъти, да си направи GUI с два бутона и да каже "Ураааа успях!".
Много си е добра статийката.
[Отговори на този коментар] 10x От: Milko <cobrety (a) abv[ точка ]bg> На: 6-08-2008@10:32 GMT+2 Оценка: 1/НеутраленMnogo blagodaria, az programiram na Visual C++, no pak principa e sashtia. Cela sedmica se machim s tova ogranichavane na znacite sled zapetaiata, ama to kat nema koi da pitash. Probvah kvo li ne pak to si imalo komanda:
FloatToStrf(double A,ffFixed,5,2);
[Отговори на този коментар]
|
|
|
|
|
|
|
|