Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 9 odgovora
  • 4.541 pregleda

Najnovija ↓

Re: Promjenuti aplikaciju sa pointerima 29.05.2005. u 22:36 · pre 260 meseci #2
Lepo je to, samo gde ubaciti pointere?
Mozes ti umesto svakog tipa da stavis npr ^Integer pa posle da koristis ^promenljiva, ali ne verujem da si na to mislila :)
Potpis
Ride the rainbow, crack the sky

DIY gitare, pojacala i efekti www.diy-fever.com
Re: Promjenuti aplikaciju sa pointerima 02.06.2005. u 16:21 · pre 260 meseci #3
Kako gde, pa ima record-e, cak i array of records, zar ne?
Medjutim, zamena record-a, i record array-a pointerima na iste zahteva dobro poznavanje pointera. A sem toga, u ovom projektu ima bas podosta posla oko toga, tako da...

Rajko

P.S. 'Aj napisacu sutra uopsteno kako se koriste pointeri pri radu sa record-ima. Ili vise nije aktuelno ovo pitanje...?
Re: Promjenuti aplikaciju sa pointerima 02.06.2005. u 19:16 · pre 260 meseci #4
Evo napravila sam sve sa pointerima, ali imam mali problemcica.
Nadam se da ce neko htjeti da pogleda na ovaj zipfile i pomogne mi, stvarno bi mu bila zahvalna.

Nego problem je sljedeci:
Dodajem novi podatak za dvd-e i kazem ok. Vrati mi se u prethodni formular i doda mi novi podatak, ali odjednom mi zamjeni npr. prvi i drugi record.
Malo je tesko objasniti, ali evo malo nekih podataka:
lista
----------
a
b

Odem na Dodaj podatak [Toevoegen] i recimo ubacim sljedeci podatak npr. slovo d
i [OK]. Vratim se na prethodni formular gdje mi je lista dobijem sljedeci raspored:
Lista
-----
b
b
c

Znaci doda mi ovo slovo c, ali mi zamjeni slovo a sa b.

Rezulat treba da je:
lista
----
a
b
c

A jesam zapetljala, ali nadam se da ce me neko skontati.

Unaprijed hvala.
Re: Promjenuti aplikaciju sa pointerima 03.06.2005. u 18:48 · pre 260 meseci #5
Ima li ovdje ljudi sto se bave sa Delphi-om i hoce pomoci?
Ovdje mi je izgleda problem:
Code:
    
lnpNewNode^.lnpPrevious := lnpFront^.lnpPrevious;
lnpFront^.lnpPrevious^.lnpNext := lnpNewNode;
lnpNewNode^.lnpNext := lnpFront;
lnpFront^.lnpPrevious := lnpNewNode;


Sta nije u redu sa ovim kodovima?

Unaprijed hvala.
Re: Promjenuti aplikaciju sa pointerima 04.06.2005. u 12:12 · pre 260 meseci #6
Ajde da ti ja malo pomognem.

Promeni sledecu proceduru ovako:
Code:

procedure TfrmAddChangeDvd.btnOKClick(Sender: TObject);
begin
  crDvd.sTitle := edtTitel.Text;
  crDvd.iReleaseYear := StrToInt(edtJaar.Text);
  crDvd.sActor := edtHoofdrolspeler.Text;
  crDvd.iRunTime := StrToInt(edtSpeelduur.Text);
  crDvd.iZone := StrToInt(edtZoneNummer.Text);
  crDvd.sDescription := mmOmschrijving.Text;
  if toevoegen then
    begin
      untDvdData.AddDvds(crDvd);
      ClearFields;
      Close
    end
  else
    begin  
      untDvdData.DeleteCurrentDvd;
      untDvdData.AddDvds(crDvd);
      ClearFields;
      Close
    end;
end;


Zatim imas gresku prilikom ispisa forme. Iz datoteke ti se ucitavaju 3 sloga a ti ispisujes samo 2. Ta 3 sloga su bila a b b a ti si videla samo a b. Kada si dodala novi elemenat ispisao se i onaj drugi b sto nisi videla da uopste postoji.
Problem u toj proceduri je bio u tome da je while petlja izlazila iz ispisa, kada je dosla do zadnjeg elementa a njega nije ispisala. Promeni proceduru ovako:
Code:

procedure TfrmDVDMngr.ShowForm(Sender :TObject);
var
  sDvdInfo : String;
  iCurrent: Integer;
begin
  iCurrent := lstbxDVD.ItemIndex;
  lstbxDVD.Clear;
  untDvdData.MoveFirst;
  while not untDvdData.EndOfList
  do begin
    untDvdData.GetCurrentDvd(crDvd);
    sDvdInfo := 'Titel:' + ' ' + crDvd.sTitle + '  ' +
                'Jaar van uitgave:' + ' ' + IntToStr(crDvd.iReleaseYear) + '  ' +
                'Hoofdrolspeler:' + ' ' + crDvd.sActor + '  ' +
                'Speelduur:' + ' ' + IntToStr(crDvd.iRunTime) + '  ' +
                'ZoneNummer:' + ' ' + IntToStr(crDvd.iZone);
    lstbxDVD.Items.Add(sDvdInfo);
    untDvdData.MoveNext
  end;
  if untDvdData.NrOfDvds  > 0 then
    begin
      untDvdData.GetCurrentDvd(crDvd);
      sDvdInfo := 'Titel:' + ' ' + crDvd.sTitle + '  ' +
                'Jaar van uitgave:' + ' ' + IntToStr(crDvd.iReleaseYear) + '  ' +
                'Hoofdrolspeler:' + ' ' + crDvd.sActor + '  ' +
                'Speelduur:' + ' ' + IntToStr(crDvd.iRunTime) + '  ' +
                'ZoneNummer:' + ' ' + IntToStr(crDvd.iZone);
      lstbxDVD.Items.Add(sDvdInfo);
    end;
  untDvdData.MoveTo(iCurrent);
end;



Ne znam zasto si radila sa cirkularnom dvostruko povezanom listom.
Dosta ti je samo First i First^.Next. Znaci jednostruka lista koja se zavrsava kada je Current = nil

Ja bih to sve uradio od pocetka. Nesto mi smrdi da tu ima jos gresaka.

E, da kada dodas novi element, mora da osvezis listu, da bi se on prikazao.
Nadam se da sam ti malo pomogao. :)

Pozdrav.
Re: Promjenuti aplikaciju sa pointerima 04.06.2005. u 16:54 · pre 260 meseci #7
Hvala ti stvarno mnogo na objasnjenju. Bar neko da se smilovao i posvetio paznju mom problemu. :-)
Sad cu pokusati promjenuti i nadam se da ce raditi.

Jos jednom hvalaaaaaaaaaaa.

Re: Promjenuti aplikaciju sa pointerima 04.06.2005. u 20:04 · pre 260 meseci #8
E super sve radi. Samo gdje da ubacim funkciju Smaller? Treba da mi alfabetski sortira.

Unaprijed hvala.
Re: Promjenuti aplikaciju sa pointerima 05.06.2005. u 13:57 · pre 260 meseci #9
Sortiranje bi trebalo da se vrsi prilikom ubacivanja novog clana.
Znaci ides nekako ovako:

tmp:= lnpfront
tmp := pozicija ispred prvog veceg.
promenis sve u funkciji za ubacivanje iz lnpFront u tmp. Znaci da se ne ubacuje na kraj vec iza elementa na koji pokazuje tmp.

Re: Promjenuti aplikaciju sa pointerima 05.06.2005. u 17:28 · pre 260 meseci #10
@Toyo, stvarno ti hvala.
Napravila sam ovu proceduru, ali nesto mi previse velika.
Code:

procedure Sorteren (crDVD: TDvdRecord);
var
  lnpNewNode,
  lnpOldNode: TListNodePtr;
  toegevoegd: boolean;
begin
    toegevoegd := false;
    lnpOldNode := lnpFront;
    lnpNewNode := lnpFront;
    repeat
     if lnpNewNode = nil
     then begin
      //dodati na kraju
       new(lnpNewNode);
       lnpNewNode^.drDVD := crDVD;
       lnpNewNode^.lnpNext := nil;
       if lnpFront = nil
       then
         lnpFront := lnpNewNode //ako je prazna lista
       else lnpOldNode^.lnpNext := lnpNewNode;
        toegevoegd := true
       end
     else if lnpNewNode^.drDVD.sTitle > crDVD.sTitle
      then begin  //mjesto pronadjeno, sada dodati
        if lnpNewNode <> lnpOldNode
         then
          begin
           new (lnpNewNode);
           lnpNewNode^.drDVD := crDvd;
           lnpNewNode^.lnpNext := lnpOldNode^.lnpNext;
           lnpOldNode^.lnpNext := lnpNewNode;
      end
     else begin //dodati na prvo mjesto
       new(lnpNewNode);
       lnpNewNode^.drDVD := crDVD;
       lnpNewNode^.lnpNext := lnpOldNode;
       lnpFront := lnpNewNode
     end;
     toegevoegd:=true;
     end
     else begin //veci je pronadjen, sad proci kroz listu
       lnpOldNode := lnpNewNode;
       lnpNewNode := lnpNewNode^.lnpNext;
     end
    until toegevoegd;
end;

I ako je ubacim u Add proceduru za novi record, javlja mi error.

Dali je ovo pretjerano sto sam napravila. Mozda ima nesto na laksi nacin?

Jos jednom hvala. :-)

Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme