Šta je novo?

Potrebna naredba za Visual Basic i sl...

Pinki

Čuven
Učlanjen(a)
22.03.2002
Poruke
132
Poena
619
Pokusavam vec duze vreme da napravim program koji ce procitati sve file-ove sa CD (recimo mp3), zapamtiti kao txt. datoteku (sa natpisom CD1, CD2, CD3....) i kad ja hocu da trazim odredjeni fajl, ukucam njegovo ime i da mi on kaze na kom CD-u se nalazi! Najpotrebnije od svega ovoga mi je naredba (za Visual Basic) koja ce procitati ceo sadrzaj sa CD-a!
 
Pinki je napisao(la):
Najpotrebnije od svega ovoga mi je naredba (za Visual Basic) koja ce procitati ceo sadrzaj sa CD-a!
Koliko se razumes u VBA programiranje? Mislim, da li ti je problem nesto odredjeno ili bi cisto da napravis takav program, a da predhodno nisi radio u VBA.:wave;
 
Pa nemam bas nekakvog velikog iskustva, ali bih zeleo da napravim takav program, pa ako zelis (i znas) mogli bih zajedno da scukamo nesto. Mogu da ti ostavim mail!
 
Pinki je napisao(la):
Pa nemam bas nekakvog velikog iskustva, ali bih zeleo da napravim takav program, pa ako zelis (i znas) mogli bih zajedno da scukamo nesto. Mogu da ti ostavim mail!
Znas kako, ja nekakvo iskustvo imam, da li je veliko ili ne, ne mogu bas sam da prosudim. Odi na moj sajt (iz signature - http://home.drenik.net/hpdsoft) i iz sekcije download (leva rubrika) skini Evidenciju Poslovanja 2002, bilo samo exe i baze ili celu instalaciju - u zavisnosti od toga da li ti je instaliran Visual Studio. Taj program sam u potpunosti sam pravio iako pise da ga je radio ceo hpd team.Sajt sam takodje radio sam ali sam ipak stavio da smo ga svi pravili zato sto su oni samnom u HPDu pa je red. Nego, vezano za program... rekoh ti da ga skines. Pogledaj ga kakav je pa ti prosudi kakvo mi je iskustvo. Bavim se ovime ne bas kratko.Konkretno Visual Basic-om i mislim da sam nesto naucio. Nisam jos spreman da napravim neki bas profi program, ali Evidencija je tu. Vise radim sa bazama podataka (katalozi, evidencije...) Pravio sam i pre neke kataloge, ali sad spremam novi katalog za nas pa ce da izadje najverovatnije pocetkom raspusta. Konkretno za Visual Basic ne postoji takva neka komanda koja bi citala sadrzaj svih fajlova sa nekog CDa (recimo Mp3). Moze nesto mozda da se iscuka sa file listom, ali kopmlikovano je dosta. Ja cu nesto da pokusam da cackam, a ti mi baci tvoj mail pa da budemo u kontaktu. Pozdrav, Luka Latinovich! :wave;
 
Nemora samo da je vezano za Visual Basic, Moze i drugi programski jezik, ja znam (nesto) i u Delpi-ju!
 
Pinki je napisao(la):
Nemora samo da je vezano za Visual Basic, Moze i drugi programski jezik, ja znam (nesto) i u Delpi-ju!

Pa sto odma' ne rece ! :p
Elem, mozes u Delphiju to ovako da implementiras: stavis new Application, pa kda ti se pojavi main Form, onda na njega stavis jedno dugme koje sam ja nazvao "Listaj CD" i ono mi je objekat Button1.
Onda na taj tvoj isti Form stavis jedna ListBox1 : TListBox i stavis jedan Edit1 : TEdit1. Kada to uradis, onda za objekat Button1 definises u Event-u dogadjaj OnClick i onda to izgleda otprilike ovako:

[code:1]
var path : string;
depth : integer;
brojac : integer;

procedure RekurzijaCD_a(p : string; d : integer); forward;

procedure TForm1.Button1Click(Sender: TObject);
begin
path:='d:\';
depth:=0;
brojac:=0;
RekurzijaCD_a(path,depth);
end;

procedure RekurzijaCD_a(p : string; d : integer);
var f : TSearchRec;
pa : string;
de : integer;
begin
de:=d; pa:=p; { lokalne promenljive}
if (findfirst(p+'*.*', faAnyFile, f)=0) then
begin
repeat
form1.edit1.Text:=IntToStr(brojac)+' - '+p;
if (f.Attr<>$010) then
begin
Form1.ListBox1.Items.Add(p+f.Name);
brojac:=brojac+1;
Form1.Repaint
end
else if (f.Name<>'.')and(f.Name<>'..') then
RekurzijaCD_a(pa+f.Name+'\',de+1);
until (findnext(f)<>0);
end;
FindClose(f);
end;
[/code:1]

Ovo ce ti u onom ListBox1 ispisivati staze svih fajlova na (u ovom slucaju) CD-u. Program je uradjen kao rekurzija. Posto dubina retko prelazi 20-tak u stablima direktorijuma, onda je rekurzija ok jer bi zauzela nekih 5-6K na steku (maksimum) sa dubinom 20-tak (najgori slucaj), a s obzirom da je po defaultu stek 16K, onda bi trebalo da radi OK. U svakom slucaju, radi posao.
Za upis u fajlove i sve ostalo, malo nasminkaj program, dodaj par upita i provera i to bi ti bilo otprilike to!
I hope that's it :)
 
Ovo prethodno je kucano nesto kao polu-online pa izgleda ofrlje, ali je kod provereno dobar :)
Nisam ubacivao ceo unit, vec samo ono neophodno, ali nadam se da ces se snaci! :)
 
Pinki je napisao(la):
Pokusavam vec duze vreme da napravim program koji ce procitati sve file-ove sa CD (recimo mp3), zapamtiti kao txt. datoteku (sa natpisom CD1, CD2, CD3....) i kad ja hocu da trazim odredjeni fajl, ukucam njegovo ime i da mi on kaze na kom CD-u se nalazi! Najpotrebnije od svega ovoga mi je naredba (za Visual Basic) koja ce procitati ceo sadrzaj sa CD-a!
To ces najlakse uraditi pomocu FSO objekta(file system Object).
Tu imas komandu da ti izlista sve direktorijume , filove ...
 
Sve je ovo lepo, samo macak gde ja onaj code sve da iskopiram, malo se tesko snalazim, sve ono lepo napravim, ali kad stignem do unosenja kodova, tu nastaje veliki problem...Gde sve ono da iskopiram?
P.S. U svakom slucaju hvala za pomoc!
 
Posto ne znam sta znas, a u sustini nije komplikovano, onda idemo iz pocetka. Probacu da napravim neku paralelu sa VB, mada ja Visual Basic nemam blage veze, pa ako nesto lupim, nema smejanja :D

- Kad startujes Delphi, onda ti se na ekranu pojavi u prvom planu glavni obrazac (glavni prozor, main form) tvog programa. To je prozor koji se zove Form1. Slicno kao i u VB-u kada ides na File/New Project pa onda izaberes Standard EXE - pojavi ti se prozor tvog projekta u kome je tvoj glavni prozor Form1.
- U Delphiju ces pored glavnog obrasca imati sa leve strane prozore koji su Object viewer i ispod je Object Inspector koji ti daje podatke o properties datog objekta. U pocetku je to objekat Form1 klase TForm. Slicno u VB-imas, samo sa desne strane Project viewer i ispod njega je prozor sa properties.
- U Delphiju su (obicno) u gornjem delu ekrana alati: label (slovo A kao u VB), button (ovde na njemu pise OK, u VB-u ne pise nista), checkbox, radiobutton, combobox, listbox (u VB-u je malo manja ikona) i svi oni se nalaze pod "jezickom" Standard. U VB se sve ovo nalazi (obicno) sa leve strane pod General.
- Ako pomeris malo prozor Form1, videces ispod njega prozor u kome ti se nalazi kod za Unit1. U ovom unit-u definises sve ono sto se desava u glavnom prozoru i sta se ukljucuje i poziva iz njega i on izgleda otprilike ovako:
[code:1]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
end.
[/code:1]

- Sada odes opet na Form1, onda izaberes Button i dovuces ga na neko mesto na Form1 - prozoru (kao i u VB-u), onda odes u Object Inspector (to je Properties u VB-u) i tamo mu promenis Caption u recimo, "Listaj" :). Onda opet kao sa dugmetom, uradis sa ListBox-om. Stavis ga negde na Form1 i onda ga razvuces na ostatak da bi bilo sto vise mesta (isto kao i u VB-u sto bi uradio). Negde na Form1 dodaj i Edit (na njemu pise ab kao i na TextBox-u u VB-u). Ove tri prethodne operacije imaju za posledicu to da se u prozoru za editovanje Unit1 nalazi sada:
[code:1]
type
TForm1 = class(TForm)
Button1: TButton;
ListBox1: TListBox;
Edit1: TEdit;
private
{ Private declarations }
public
{ Public declarations }
end;
[/code:1]
ovakva deklaracija.
- Znaci, imamo glavni prozor i na njemu jedno dugme, jedan text-box i jedan list-box. Ako nisi nista menjao, onda klasa TForm1 izgleda kao na prethodnom listingu.
- Onda u Object TreeView prozoru kliknes na Button1 objekat. On se pojavljuje u Object Inspectoru. Onda kliknes na "jezicak" Events i onda kliknes na stavku OnClick. Onda na prazno mesto sa desne strane klikni 2 puta i dobices da ce da se pozove procedura Button1Click koja je metoda klase TForm1 (ispod Edit1 : TEdit; u deklaraciji TForm1 ce se pojaviti: procedure Button1Click( Sender : TObject) . Slicno kao kada u VB-u kliknes 2 puta na dugme Command1 i pojavi ti se editor koda za Private Sub Command1_Click().
- Kad si sve to uradio, onda ces imati iza {$R *.dfm} procedure TForm1.Button1OnClick ( Sender : TObject) koja ima prazno telo. Onda tu ubacis onaj kod i to ti je to.
Sve to bi na kraju trebalo da izgleda ovako:
[code:1]
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
ListBox1: TListBox;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

var path : string; { staza - od ovoag sve krece }
depth : integer; { dubina rekurzije - mozda zatreba }
brojac : integer; { broji fajlove i upis je u textboxu }

procedure RekurzijaCD_a(p : string; d : integer); forward; { ako stavis iza naredne procedure, onda ti ne treba ovaj red }

procedure TForm1.Button1Click(Sender: TObject);
begin
path:='d:\';
depth:=0;
brojac:=0;
RekurzijaCD_a(path,depth);
end;

procedure RekurzijaCD_a(p : string; d : integer);
var f : TSearchRec;
pa : string;
de : integer;
begin
de:=d; pa:=p; { lokalne promenljive}
if (findfirst(p+'*.*', faAnyFile, f)=0) then
begin
repeat
form1.edit1.Text:=IntToStr(brojac)+' - '+p;
if (f.Attr<>$010) then
begin
Form1.ListBox1.Items.Add(p+f.Name);
brojac:=brojac+1;
Form1.Repaint
end
else if (f.Name<>'.')and(f.Name<>'..') then
RekurzijaCD_a(pa+f.Name+'\',de+1);
until (findnext(f)<>0);
end;
FindClose(f);
end;

end.
[/code:1]

Kad zavrsis, pritisni CTRL+F9 za compile i ako je sve OK (a trebalo bi da jeste), onda F9 za run. Ubaci neki CD, startuj i pritisni dugme. Trebalo bi da se u listbox-u pojavi spisak svih fajlova na CD-u sa punom stazom. Mozes da posebno imas stazu dirova, punu stazu fajla, samo ime fajla. Mozes ono path:='d:\' da zamenis sa 'c:\' pa dobijes isto to samo sa hardom.
Program moze da se nelegalno zavrsi ako se dostigne limit listbox-a koji ja ne znam da li postoji i koliki je ako postoji :D.
Drugi mnogo opasniji razlog je da ti se zakuca negde nesto ako se pretera sa dubinom rekurzije sto mozda u nekim ekstremnim situacijama ako nekom ide dubina stabla dira vise od nekoliko desetina ili cak stotina sto je suludo, ali ajde.... Zato treba malo pazljivije analizirati koja su ogranicenja i to je sve. Uh, ceo esej :)
Nadam se da je ovo pomoglo.
 
Hvala, radi konacno. Sad jos samo da napravim da moze da se sacuva (i otvori) kao .txt fajl i fotov program, ali to cu sam. U svakom slucaju hvala jos jednom! Samo se pitam gde li si ovo sve naucio?????
 
Nazad
Vrh Dno