HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Szövegesen megadott képlet kiszámítása programból


Példaprogram letöltése

8196 bájt

Ha van egy sztringünk, melyben az található, hogy 2+2, akkor ehhez komoly algoritmust kellene írnunk, hogy értelmezzük, elvégezzük az összeadás műveletet, majd az eredményt visszaírjuk a felhasználónak. Az algoritmus elkészítésének problémái ott fokozódnak, amikor a felhasználónk által megadott sztring így néz ki: (200/3)*(500-96)/((5+10)*10).

Mellékelt cikkben megvalósítjuk, hogy egy tetszőleges sztringként megadott képletet kiértékelünk, majd annak eredményét számként adjuk vissza.

A megvalósításhoz egy igen egyszerű trükköt használunk fel: ha az MS Excel-nek átadunk egy ilyen képletet egy munkalap cellájába, akkor az innen visszaolvasott érték a képlet kiértékelésének eredménye lesz. Így nincs szükségünk arra, hogy komoly értelmező algoritmust fejlesszünk. Mivel az Excel a háttérben fut, így programunk felhasználója nem is veszi észre, hogy alkalmazásunk elindította az Excel-t.

A megvalósításhoz programunk indulásakor létrehozunk egy kapcsolatot az Excel-el és egy új munkalapot adunk hozzá.
procedure TForm1.FormCreate(Sender: TObject);
begin
  FApplication:=CreateOleObject('Excel.Application');
  FWorkBook:=FApplication.Workbooks.Add;
end;
A program bezárásakor zárjuk ezt a munkalapot úgy, hogy ne legyen mentve, majd megszüntetjük a kapcsolatot is az Excel-el.
procedure TForm1.FormDestroy(Sender: TObject);
begin
  FWorkBook.Close(false);
  FApplication.Quit;
end;
Készítünk egy Calculate nevű függvényt, mely egy sztringet vár, amely a kiértékelendő képlet lesz. Visszatérési értékként a kiszámított értéket adja át. A számítás elvégzéséhez a sztring elé egy egyenlőségjelet kell illesztenünk, hiszen az Excel csak ebben az esetben végzi el a számítást. Ezek után egy cellába beírjuk a sztringet, majd rögtön ki is olvassuk annak értékét, ami már a kiszámított érték lesz.
function TForm1.Calculate(s: string): double;
var
  a: OleVariant;
begin
  a:='='+s;
  FApplication.Cells.Item[1, 1]:=a;
  result:=FApplication.Cells.Item[1, 1];
end;


Cikksorozat

#IDKategóriaCikk címeSorozat
3333WindowsNet Shell parancsok1. rész
3367WindowsNet Shell parancsok2. rész
3396WindowsNet Shell parancsok3. rész


Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2001 évkönyv 212. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |