 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14676 Aktiv.: 61.80 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Sob Sep 22, 2007 11:30 pm Naslov sporočila: |
|
|
Knjiga je že nekaj časa doma. Naloženo imam verzijo 6. Popoldne je bilo nekaj časa v službi. "Predelal" sem 100 strani teorije. Sedaj sem se lotil prakse. Glede na to, da imam kar dosti izkušenj s programiranjem v Clipperju pa tudi Pascal mi ni tuj, mi osnovno razumevanje (procedure, funkcije, konstante spremenjivke...) ne dela kakih težav.
Nametal sem nekaj vnosnih polj ter gumbov na form (za nekaj podobnega v DOS okolju bi v Cliperju potreboval vsaj pol ure ) Napisal sem kratko lastno proceduro ter funkcijo.
Imam nekaj vprašanj poznavalcem:
Prevzeta vsebina vnosega polja je tipa string (niz). Ugotovil sem, kje lahko nastavim dolžino. Kako vnosno polje definiram kot real recimo z 2 decimalkama. Kako omejim vnos le na numerične vrednosti? Recimo pri moji testni proceduri sem string pretvoril z vgrajeno funkcijo strtoint() v integer jo matematično obdelal ter vrnil v drugo polje kjer se prikazuje rezultat preko funkcije inttostr() oziroma flottostr() V tem primeru program "crkne" če vnesem karakter.
Zakaj mi lastna funkcija ne dela, če ni napisana pred odzivno proceduro, ki jo kliče?
Toliko za začetek.
Hvala za odgovore. _________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
Glitch Član

Pridružen-a: Pet 07 Apr 2006 11:40 Prispevkov: 1477 Aktiv.: 6.30
|
Objavljeno: Ned Sep 23, 2007 10:03 am Naslov sporočila: |
|
|
Za vnos podatkov, ki naj bi bili dolocenega tipa obstaja objekt TMaskEdit. Ta bo kar koristen.
Glede pretvarjanja podatkov. V primeru napacno vnesenega podatka pomaga, ce uporabljas funkcije, ki vrnejo napako (in jih seveda preverjas) ali pa uporabljajo default vrednosti, ce do napake pride.
Recimo StrToInt vrze exception (katerega moras ujeti), StrToIntDef pa vrne default vrednost (recimo NaN). |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14676 Aktiv.: 61.80 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Ned Sep 23, 2007 12:13 pm Naslov sporočila: |
|
|
Glitch je napisal/a: |
Za vnos podatkov, ki naj bi bili dolocenega tipa obstaja objekt TMaskEdit. Ta bo kar koristen.
Glede pretvarjanja podatkov. V primeru napacno vnesenega podatka pomaga, ce uporabljas funkcije, ki vrnejo napako (in jih seveda preverjas) ali pa uporabljajo default vrednosti, ce do napake pride.
Recimo StrToInt vrze exception (katerega moras ujeti), StrToIntDef pa vrne default vrednost (recimo NaN). |
Super, dela hvala. _________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
mucek4 Član


Pridružen-a: Sob 18 Jun 2005 20:52 Prispevkov: 2952 Aktiv.: 12.43 Kraj: Tržič - Mesto med gorami
|
Objavljeno: Pon Sep 24, 2007 8:14 am Naslov sporočila: |
|
|
Za dodatne komponente, o katerih sem ti govoril in ki jih boš občasno potreboval (recimo 7 segmentni displayi, itd...) se pa nahajajo na http://www.torry.net/pages.php?id=20
Če te pa kaj zanima, pa telefon imaš  |
|
Nazaj na vrh |
|
 |
jur Član


Pridružen-a: Pet 02 Dec 2005 14:45 Prispevkov: 5142 Aktiv.: 21.65 Kraj: [color=zelena]Ljubljana[/color]
|
Objavljeno: Pon Sep 24, 2007 10:51 am Naslov sporočila: |
|
|
SIlvo: Če je procedura uporabljena prej, kot je napisana, je program ne pozna, zato jo jo deklariraš: forward procedure blabla;
proceduro pa dejansko napišeš kasneje
Jur |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14676 Aktiv.: 61.80 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Pon Sep 24, 2007 11:29 am Naslov sporočila: |
|
|
Še vprašanje, preden sploh pridem do tja (Pa, da ne premečem cele pomoči)
Ima Delphi kako enostavno možnost shranjevanja spremenjivk? (recimo pri Clipperju sem lahko vse shranil v *.mem datoteko.) Recimo, ko program zaprem, bi rad shranil trenutne vrednosti vnešene v obrazcu. Pri ponovnem zagonu bi jih rad spet naložil. _________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
Glitch Član

Pridružen-a: Pet 07 Apr 2006 11:40 Prispevkov: 1477 Aktiv.: 6.30
|
Objavljeno: Pon Sep 24, 2007 12:02 pm Naslov sporočila: |
|
|
Poglej si objekt TIniFile, ki omogoča shranjevanje v ini datoteke. Obstaja tudi varianta za shranjevanje v registry (ampak ta je ze tako in tako poln raznoraznih smeti). |
|
Nazaj na vrh |
|
 |
mucek4 Član


Pridružen-a: Sob 18 Jun 2005 20:52 Prispevkov: 2952 Aktiv.: 12.43 Kraj: Tržič - Mesto med gorami
|
Objavljeno: Pon Sep 24, 2007 12:37 pm Naslov sporočila: |
|
|
Ročno. Avtomatsko ne. Vsako stvar posebej shraniš v TForm.onClose(); Ini je lepa zadevšna, pa tudi ni težko osvojit. Edino, če podaš samo ime datoteke ("mojprogram.ini") jo automatsko shrani v "windows" imenik in ne v tekočega. |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14676 Aktiv.: 61.80 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Pon Sep 24, 2007 11:58 pm Naslov sporočila: |
|
|
Še nakaj vprašanj za poznavalce Delphija.
TMaskEdit mi dela nekaj težav. Recimo imam masko '999', ki dovoljuje vnos treh številk. Vrednost pretvorim v integer s funkcijo StrToIntDef, še prej pa porežem presldedke s funkcijo Trim, če slučajno vnesem le eno ali dvomestno vrednost. (sicer bi za vnos 1 moral vpisat 001 )
Ok, to nekako gre moti me pa da se v maski v primeru, da je vnešeno manše število kot je dolžina polja ne poravna desno. A gre to izvesti drugače? Je potrtebno masko kako drugače sestavit. A polje vedno vrača string? Hudiča, že z 20 let starim Clipperjem je to šlo lažje - s polja je "priletelo" direkt realno število, če je bila predhodno spremenjivka določena kot numerična. Ne vrjamem, da v Delphiju ne bi šlo, a jaz očitno ne znam. .
Še eno vprašanje:
A mogoče obstaja že narejena funkcija IF (da ne pišem svoje) pa se morda drugače imenuje?
V Clipperju je izgledala nekako takole:
nX=IF(nA=nB,nResA,nResB)
Povedano po domače:Če je vrednost nA, enaka nB potem vrne nResA sicer nResB. _________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
mucek4 Član


Pridružen-a: Sob 18 Jun 2005 20:52 Prispevkov: 2952 Aktiv.: 12.43 Kraj: Tržič - Mesto med gorami
|
Objavljeno: Tor Sep 25, 2007 7:19 am Naslov sporočila: |
|
|
Silvo. Žal. Web aplikacije so še slabše. Nimaš drugega kot string.
Kot sem ti že rekel. Tukaj je en primer TFloatEdit-a iz torry-ja. FreeWare with Source.
In druga stvar. Ne. Žal. Ne.
Tisti je pogojni operator (vsaj c, java) in se ga uporablja
X = (a==b)?vA_vB;
za delphi je pa spisana knjižnica tukaj |
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.51
|
Objavljeno: Tor Sep 25, 2007 7:34 am Naslov sporočila: |
|
|
Kaj je pa narobe z
Koda: |
if (nA = nB) then
nX := nResA
else
nX := nResB;
|
? Napises lahko tudi v eni sami vrstici (razbito je samo zaradi preglednosti). _________________ Ka ti bo pa torba ce si kupu kolo ? |
|
Nazaj na vrh |
|
 |
VolkD Član


 
Pridružen-a: Pet 24 Sep 2004 21:58 Prispevkov: 14228 Aktiv.: 59.91 Kraj: Divača (Kačiče)
|
Objavljeno: Tor Sep 25, 2007 7:52 am Naslov sporočila: |
|
|
Ha ha.. Silvo, če hočeš pisati v delphi-ju, moraš začeti razmišljat paskalsko. Pozabi na cliper. _________________ Dokler bodo ljudje mislili, da živali ne čutijo, bodo živali čutile, da ljudje ne mislijo. |
|
Nazaj na vrh |
|
 |
jur Član


Pridružen-a: Pet 02 Dec 2005 14:45 Prispevkov: 5142 Aktiv.: 21.65 Kraj: [color=zelena]Ljubljana[/color]
|
Objavljeno: Tor Sep 25, 2007 8:53 am Naslov sporočila: |
|
|
Najkrajša koda za prej omenjeni if stavek je: if nA=nB then nX:=nResA else nX:=nResB;
Maskedit: mask edit ne poravnava številk na desno, preprosto zato, ker ne ve koliko cifer boš vnesel. Če bi hotel poravnavanje, bi moral uporabiti navaden Edit. Za event OnChange (ko nekaj spremeniš) pa bi moral preveriti pravilnost vnosa (ali je to črka ali cifra) in potem poravnati string.
Delphi je uporabna stvar, vendar nima na razpolago čisto vseh možnosti, ki bi jih človek želel. Zato pa ponuja možnost, da si željo sprogramiraš.
Jur |
|
Nazaj na vrh |
|
 |
aly Član



Pridružen-a: Tor 28 Sep 2004 14:51 Prispevkov: 9407 Aktiv.: 39.61 Kraj: Kranj - struževo
|
Objavljeno: Tor Sep 25, 2007 9:31 am Naslov sporočila: |
|
|
Silvo je napisal/a: |
Ima Delphi kako enostavno možnost shranjevanja spremenjivk? |
Primer odpiranja INI fajla. INI se nahaja v istem direktoriju kot EXE.
Če INI fajl ne obstaja ali pa manjka kakšen parameter, kreira novega in zapre aplikacijo.
Ob zapiranju aplikacije (za shranjevanje spremenljivk) rabiš samo Create, Write, Free funkcije.
Koda: |
var
Ini: TIniFile;
begin
// odpri INI fajl
Ini := TIniFile.Create(ExtractFilePath(ParamStr(0))+'termometer.ini');
if NOT INI.SectionExists ('Senzorji') then // INI ne obstaja ali nima te sekcije
begin
ShowMessage ('Napaka v INI fajlu - kreiram nov default INI fajl.');
INI.WriteString('Komunikacija', 'TCPIP Port','2500');
INI.WriteInteger('Komunikacija', 'COM port', 1);
INI.WriteInteger('Senzorji', 'stevilo', 1);
INI.WriteInteger('Senzorji', 'interval', 60);
INI.Free;
Application.Terminate;
exit;
end;
FPortStr := INI.ReadString('Komunikacija', 'TCPIP Port','');
if FPortStr = '' then
begin
Info ('Napaka v INI fajlu - TCP/IP port.', sError);
ShowMessage ('Napaka v INI fajlu - TCP/IP port. Popravi!');
INI.WriteString('Komunikacija', 'TCPIP Port','2500');
INI.Free;
Application.Terminate;
end;
COMport := INI.ReadInteger('Komunikacija', 'COM port', 0);
if NOT (COMport in [1..4]) then
begin
Info ('Napaka v INI fajlu - COM port.', sError);
ShowMessage ('Napaka v INI fajlu - COM port. Popravi!');
INI.WriteInteger('Komunikacija', 'COM port', 1);
INI.Free;
Application.Terminate;
end;
stevilo_senzorjev := INI.ReadInteger('Senzorji', 'stevilo', 0);
if stevilo_senzorjev = 0 then
begin
Info ('Napaka v INI fajlu - število senzorjev.', sError);
ShowMessage ('Napaka v INI fajlu - število senzorjev. Popravi!');
INI.WriteInteger('Senzorji', 'stevilo', 1);
INI.Free;
Application.Terminate;
end;
interval_merjenja := INI.ReadInteger('Senzorji', 'interval', 0);
if interval_merjenja = 0 then
begin
Info ('Napaka v INI fajlu - interval merjenja.', sError);
ShowMessage ('Napaka v INI fajlu - interval merjenja. Popravi!');
INI.WriteInteger('Senzorji', 'interval', 60);
INI.Free;
Application.Terminate;
end;
INI.Free; // zapre INI fajl
|
_________________ I'm going to stand outside, so if anyone asks, I'm outstanding  |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14676 Aktiv.: 61.80 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Tor Sep 25, 2007 10:25 am Naslov sporočila: |
|
|
Sokrat je napisal/a: |
Kaj je pa narobe z
Koda: |
if (nA = nB) then
nX := nResA
else
nX := nResB;
|
? Napises lahko tudi v eni sami vrstici (razbito je samo zaradi preglednosti). |
Nič ni narobe, razmišljam pač po clipperaško - spraševal sem, če slučajno obstaja kaka že vgrajena funkcija, sicer tole ni problem vreči v lastno.
VolkD je napisal/a: |
Ha ha.. Silvo, če hočeš pisati v delphi-ju, moraš začeti razmišljat paskalsko. Pozabi na cliper. |
Darko presenetlivo veliko sta si podobna, če prav sta zgrajena na drugačni osnovi in je prvi star že dvajset let.
jur je napisal/a: |
Najkrajša koda za prej omenjeni if stavek je: if nA=nB then nX:=nResA else nX:=nResB;
Maskedit: mask edit ne poravnava številk na desno, preprosto zato, ker ne ve koliko cifer boš vnesel. Če bi hotel poravnavanje, bi moral uporabiti navaden Edit. Za event OnChange (ko nekaj spremeniš) pa bi moral preveriti pravilnost vnosa (ali je to črka ali cifra) in potem poravnati string.
Delphi je uporabna stvar, vendar nima na razpolago čisto vseh možnosti, ki bi jih človek želel. Zato pa ponuja možnost, da si željo sprogramiraš.
Jur |
Jur ter Aly hvala za razlago. Moram reči, da me je Delphi kot začetnika pozitivno presenetil. _________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 7 dni
Powered by phpBB © 2001, 2005 phpBB Group
|