Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Dva pitanja

[es] :: Pascal / Delphi / Kylix :: Dva pitanja

[ Pregleda: 5209 | Odgovora: 17 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Chimera144
Beograd

Član broj: 4758
Poruke: 12
*.beg.sezampro.yu



Profil

icon Dva pitanja05.08.2002. u 10:46 - pre 247 meseci
Prvo pozdrav svima. Imam dva ne tako strasna problema, ali bih voleo da znam sta je u pitanju.
1. Program mi javlja neke izuzetke tipa "Abstract Error" i "Access violation at address..." ali tek posto izvrsi sve linije koda. Znaci ovo se desava samo kad pokrecem program iz Delphi IDE-a i posle OK i F9 program radi kako valja. Ono sto me zanima je kada Delphi inace daje takve poruke i da li je zaista sve OK sa programom posto kao sto rekoh ja ne zapazam nikakve greske.
2. Imam MenuItem kraj i logicno klikom na njega trebe da se zavrsi aplikacija.
Ja sam u obradi dogadjaja OnClick napisao samo Close. Uzgred imam dve forme Main i dialog, ako to nesto znaci. E sad, kada misem kliknem na krstic prozora program se zavrsi korektno, dok kada ga zatvaram iz menija prozor se odmah ukloni ali Delphi-ju treba jos neko vreme da ga zaista zavrsi (vise sekundi je u stanju Running). Isto se desava kad pokrecem EXE fajl: zatvori prozor ali ako probam da brzo ponovo startujem isti program dolazi do zastoja. Ono sto sam ja uocio je da ovoga nije bilo dok nisam koristio Windows API PlaySound.
 
Odgovor na temu

alix
Novi Pazar

Član broj: 4863
Poruke: 6
*.verat.net

Sajt: www.vik.co.yu


Profil

icon Re: Dva pitanja06.08.2002. u 07:17 - pre 247 meseci
Problem je ochigledno u Windows API PlaySound.
Da bi' znao tachno kako da ti pomeognem poshalji source code od oba .pas file-a. za Prvi problem sigurno pozivash neku funkciju ili proceduru koju ne bi smeo da pozivash. Ali poshalji code pa chu videt' kako mogu da ti help.
Islam rulez!
 
Odgovor na temu

Chimera144
Beograd

Član broj: 4758
Poruke: 12
*.beg.sezampro.yu



Profil

icon Re: Dva pitanja06.08.2002. u 11:06 - pre 247 meseci
Ma nije toliko strasno da te sad zamajavam sa source kodom koji ionako obiman i prilicno neuredan. Nego zanima me sta ti znaci "pozivash neku funkciju ili proceduru koju ne bi smeo da pozivash"? Kakve to funkcije i procedure ne smem da pozivam?
 
Odgovor na temu

BobMarley
Vedran B
Bologna

Član broj: 148
Poruke: 1161
*.net.hinet.hr

ICQ: 61882680


+1 Profil

icon Re: Dva pitanja06.08.2002. u 12:39 - pre 247 meseci
Za errore imas u Helpu objasnjenja sta svaki error znaci..
a ovo drugo nije nista strasno vec ono u meniju zatvara samo Form1 .. znaci ono u meniju je zapravo Form1.Close; i onda kada se to izvrsi on od te forme zatvara sve njene "childove" pa to malo traje dok sa 'X'-ićem vjerojatno zatvori sve odjednom ... probaj ICQ zatvoriti saX i sa Exit u meniju isti slucaj :))
BobMarley (me) ...the legend
 
Odgovor na temu

Chimera144
Beograd

Član broj: 4758
Poruke: 12
*.beg.sezampro.yu



Profil

icon Re: Dva pitanja06.08.2002. u 18:30 - pre 247 meseci
-Access Violation: Attempts to access a memory address for which there is no virtual memory allocated to the application.

-EAbstractError is raised when an application tries to call an abstract method. It is also raised at design time when a component with an abstract method is placed on a form.

Mene bas zanima zasto bi program u principu pristupao tim adresama. Koji je moguci razlog, je li sigurno greska u mom kodu ili postoje mozda nesto drugo.
Za ovaj AbstractError mi je cudno zato nemam nijedan apstraktni metod, ali kao sto rekoh nije mnogo ni bitno.
 
Odgovor na temu

sesa
Braslav Sesartic
Uzice

Član broj: 4872
Poruke: 27
*.ptt.yu



Profil

icon Re: Dva pitanja07.08.2002. u 13:48 - pre 247 meseci
uh! to moze biti bilo sta, ali
pojavljivanje izuzetka Abstract Error
navodi na ideju da pokusavas da instanciras apstraktnu klasu.
 
Odgovor na temu

Ilija Studen
Novi Sad

Član broj: 3864
Poruke: 859
*.beotel.net

Sajt: www.activecollab.com


+1 Profil

icon Re: Dva pitanja08.08.2002. u 22:03 - pre 247 meseci
Meni se Abstract Error javljao kada pokusavam da kreiram objekat klase TGraphic... Nakon kompajliranja kompajler ce ti (u vecini slucajeva) javiti koja klasa ima apstraktne metode.
Reci koje komponente imas na formi i kako si postavio forme (primarnu, da li drugu kreiras automatski ili preko konstruktora...).

Mislim, najbolje bi bilo kad bi poslao Source.
http://www.activecollab.com - Alat za upravljanje projektima
 
Odgovor na temu

Rapaic Rajko
Bgd

Član broj: 4105
Poruke: 805
*.beg.sezampro.yu



+62 Profil

icon Re: Dva pitanja14.08.2002. u 09:18 - pre 247 meseci
Abstract error...

Evo konkretne situacije. Napravio si, recimo, neku svoju graficku klasu TMyGraphic od TGraphic. Klasa TGraphic ima podosta abstract virtual metoda, i sve one treba da se override-uju u klasi TMyGraphic.
Sta se desi ako instanci TMyGraphic pridjes kao instanci TGraphic? Evo konkretno:

var
Graph: TGraphic:
MyGraph: TMyGraphic;
MyStream: TMemoryStream;
begin
MyGraph:=TMyGraphic.Create;
MyStream:=TMemoryStream.Create;

Graph:=MyGraph; // ovde "gledamo" TMyGraphic kao TGraphic
Graph.LoadFromStream(MyStream); // poziv abstract virtual metode
....
....
Graph.Free;
MyStream.Free;
end;

Ako metoda LoadFromStream() nije override-ovana, dobijes cist abstract error. To je sve.

Rajko
 
Odgovor na temu

kingrale
Adnan Ralic
Sarajevo

Član broj: 5620
Poruke: 16
*.as.bu.bih.net.ba.

Sajt: www.delphi.co.ba


Profil

icon Re: Dva pitanja08.10.2002. u 01:09 - pre 245 meseci
Pokusaj usvojiti da svoje programe zavrsavas naredbom
Application.Terminate;
 
Odgovor na temu

goblin
Milan Aleksic
Gtech Belgrade, Sofware Engineer II
Beograd

Član broj: 4055
Poruke: 85
*.ptt.yu

Jabber: milanaleksic@gmail.com
Sajt: www.milanaleksic.net


Profil

icon Re: Dva pitanja09.10.2002. u 23:49 - pre 245 meseci
Ja nikako ne bih savetovao da se program de facto gasi tom komandom.
Cak mislim da je ovo veoma opasno, posto naglo gasenje glavnog threada onemogucava pozivanja OnClose, OnDestroy, OnHide eventova... Ovo je odlicna komanda kada se program mora hitno ugasiti i izbeci svi moguci event-ovi pri gasenju (npr. ako vidi da ne postoji krucijalan fajl za funkcionisanje programa) i to ovako:

procedure TForm1.Button1Click(Sender: TObject);
begin
//...
if TerminatAtOnce then
begin
Application.Terminate;
Exit; // izbegni dalji tok komandi u proceduri...
end;
//...
end;

U normalnim slucajevima treba ga maksimalno izbegavati (bar ja tako mislim).

P.S. Nikako da provalim kako ljudi dobiju onaj tip formatiranja za source code! Pomoc, please
Don't try to impress me... I'm good !
 
Odgovor na temu

broker

Član broj: 2415
Poruke: 8514
*.verat.net



+11 Profil

icon Re: Dva pitanja10.10.2002. u 12:26 - pre 245 meseci
Acces violation se desava obicno kada pokusavas dapristupis nekom objektu koji nije kreiran. Ako ti se to desava na izlasku iz programa proveri da nisi ubio neki objekat prerano.

Recimo banalan je slucaj da ljudi u onClose eventu forme stave:

Close;
Free;



 
Odgovor na temu

silverglider

Član broj: 651
Poruke: 218
*.batalpha.de

Sajt: www.benchmark.co.yu


Profil

icon Re: Dva pitanja11.10.2002. u 09:54 - pre 245 meseci
Da, access violation se desava kod pristupa pointeru na objekat koji nije inicijalizovan ili funkciji koja "ne postoji". Banalan primer: imas TTimer objekat i u OnTimer si definisao sta treba periodicno da se radi - medjutim, moze se desiti da u procesu "gasenja" programa, objekat koji se adresira iz startovanog OnTimer eventa vise ne postoji, jer je 'ubiven' (kako atributi, tako i metodi).

Licno najvise volim kod svih programa koji prevazilaze "hello world" nivo da napravim cleanup proceduru, jer ne mogu uvek da se oslonim da ce se sve ocistiti kako treba samo od sebe (mozda se objekti svi ciste ok, ali ne u korektnom redosledu, zbog povezanosti preko event-handlera). Ne mislim samo na korektno gasenje programa, nego i na oslobadjanje zauzete memorije pointerima i slicno. Makar kod nekih klasa nilovati 'skakljive' eventove - kod pomenutog TTimera event OnTimer, kod socket klasa OnReceive, kod threadova prvo suspend, itd.

 
Odgovor na temu

-zombie-
Tomica Jovanovic
freelance programmer
ni.ac.yu

Član broj: 4128
Poruke: 3448
62.108.114.*

Sajt: localhost


+4 Profil

icon Re: Dva pitanja16.10.2002. u 02:18 - pre 245 meseci
bash danas mi se kolega pozalio na nesto slicno (bar mi se cini) sa temom..

elem, ima formu, koji kreira i prikazuje runtime, znaci klasika kod:

Code:

var
....f: tNekaForma;
begin
....f:=tNekaForma.Create(nil);
....f.ShowModal;
....FreeAndNil(f);
end;


e sad. problem nastaje kada na formi postoji dugme koje jednostavno poziva Close() metodu, ili ako se u eventu za to isto dugme postavi ModalResult na bilo sta, i time zatvori forma (posto je prikazana sa ShowModal())..

e sad, ako se forma zatvori na bilo koji od dva opisana nacina (close() i modalresult) ponekad delphi javi nesto vrlo cudno, (valjda) Abstract Error, ili neki Ilegal Instruction ili nesto slicno prilicno nedefinisano...

i to ne bi bilo toliko cudno (rekao bih prosto, covek ima bug negde..) da sve ne radi savrseno ako se forma zatvara klikom na ono X dugmence u gornjem desnom uglu...

ima li neko neko objasnjene za ovakvo ponasanje?


btw, jel zna neko precizno da objasni razliku u kreiranju forme runtime na nacin koji sam ja opisao, i koristeci Application.CreateForm(...)?

pretpostavljam da je u drugom slucaju objekat Application vlasnik novokreirane forme, i da je on odgovoran da je oslobodi.. da ili ne? a ako jeste, kako da ja oslobodim kada mi vise ne treba (da ustedim memoriju) a da to ne pravi probleme sa application objektom? (pitanje cisto teoretski, nije mi pravilo probleme do sada, cisto me ovo podsetilo da pitam nesto sto ne razumem bas skroz..)
 
Odgovor na temu

overflow
Goran Milosavljević
Integration & Internet Senior
Engineer @ Telenor
Beograd

Član broj: 396
Poruke: 345
*.rcub.bg.ac.yu

ICQ: 106825659
Sajt: localhost


Profil

icon Re: Dva pitanja21.10.2002. u 17:31 - pre 244 meseci
-------------
pretpostavljam da je u drugom slucaju objekat Application vlasnik novokreirane forme, i da je on odgovoran da je oslobodi.. da ili ne?
-------------

Da, u tom slucaju potpunu kontrolu ima Application i ti ne baratas sa kreiranim objektima. Mislim, da je to i razlog pojavljivanja exception-a (probao si da pristupis adresi na kojoj vise objekat ne postoji jer ju je application promenio/obrisao).

-------------
a ako jeste, kako da ja oslobodim kada mi vise ne treba (da ustedim memoriju) a da to ne pravi probleme sa application objektom? (pitanje cisto teoretski, nije mi pravilo probleme do sada, cisto me ovo podsetilo da pitam nesto sto ne razumem bas skroz..)
-------------

Uz predpostavku da si obrisao formu iz liste Project/Forms/"Auto-create forms" ( odnosno red: Application.CreateForm(TfrmTest, frmTest); u .dfm) :

begin
frmTest := TfrmTest.create(Self);
try
frmTest.ShowModal;
finally
frmTest.free;
end;
end;


Sve sto je besmislenije, utoliko je bolje.
 
Odgovor na temu

-zombie-
Tomica Jovanovic
freelance programmer
ni.ac.yu

Član broj: 4128
Poruke: 3448
*.rcub.bg.ac.yu

Sajt: localhost


+4 Profil

icon Re: Dva pitanja22.10.2002. u 00:33 - pre 244 meseci

ne, nisi dobro procitao. isti exception se javlja i kada se forma kreira sa tForm.Create()...


a inace, tvoj kod je (bar teoriski) netacan.

kada kazes f:=tForm.Create(self) taj self iz koga pozivash ovaj kod (ta forma) postaje vlasnik novokreirane forme! ovo ne bi trebalo da valja iz istog razloga koji si opisao u prvom delu tvog posta.

znam i sam da to (najcesce) ne dize greske, a zasto, to vec ne znam...
 
Odgovor na temu

Riste Pejov
Team Leader/Senior Software Developer @
Ein-Sof ltd Skopje
Skopje, Macedonia

Član broj: 128
Poruke: 571
62.162.102.*

Jabber: richie@bagra.net.mk
ICQ: 154236769
Sajt: riste.softver.org.mk


Profil

icon Re: Dva pitanja22.10.2002. u 14:22 - pre 244 meseci
Code:

begin
frmTest := TfrmTest.create(Self);
try
frmTest.ShowModal;
finally
frmTest.free;
end;
end;


ovaj self u drugom redu nije uopste potreban jes se forma ubija po modalnog prikazivanja.

A kad smo kad Application.CreateForm(..) da ne zaboravite ova procedura uvek u memoriji ostavlja globalnu referencu ka kreiranog objekta na heap-u

Mozes se od te iste forme osloboditi bez problema ukoliko pre nego sto tvoje procedure pristupaju iste ne provere dali postoji objekt za te reference.
People who think they know everything tend to irritate those of us who do.
 
Odgovor na temu

silverglider

Član broj: 651
Poruke: 218
62.104.203.*

Sajt: www.benchmark.co.yu


Profil

icon Re: Dva pitanja23.10.2002. u 01:40 - pre 244 meseci
Citat:
zombie / DDG:
...
a inace, tvoj kod je (bar teoriski) netacan.

kada kazes f:=tForm.Create(self) taj self iz koga pozivash ovaj kod (ta forma) postaje vlasnik novokreirane forme! ovo ne bi trebalo da valja iz istog razloga koji si opisao u prvom delu tvog posta.
...


Ne, ovaj 'self' ne predstavlja obavezno pointer na objekat TForm klase, vec pointer na objekat klase u cijem si skoupu trenutno.

 
Odgovor na temu

-zombie-
Tomica Jovanovic
freelance programmer
ni.ac.yu

Član broj: 4128
Poruke: 3448
*.rcub.bg.ac.yu

Sajt: localhost


+4 Profil

icon Re: Dva pitanja23.10.2002. u 23:11 - pre 244 meseci
dobro de. ne cepidlaci! malo sam samo generalizovao.. nisam pretpostavio da pisesh svoje komponente!

ovo se ipak najcesce pise u kodu forme, zar ne?

 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Dva pitanja

[ Pregleda: 5209 | Odgovora: 17 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.