« Prethodna stranica Page — Sledeća stranica »
Čitanje podataka iz MS Outlook-a
18.05.2007
Predstavljamo vam proceduru kojom se iščitavaju podaci o kontaktima iz Microsoft Outlook-a
Evo vrlo zanimljive i potencijalno vrlo korisne procedure kojom se iščitavaju podaci o kontaktima iz Outlook-a. Proceduru možete iskoristiti u slučaju da kreirate bilo koju aplikaciju koja ima evidenciju o kontaktima, tipa telefonski imenik, poslovni partneri i slično. Jednostavno ugradite ovu proceduru i ponudite je korisnicima prilikom instalacione procedure vašeg programa, kako bi odmah na početku mogli da u vaš program uvezu sve postojeće kontakte, bez potrebe da ih ručno unose. Zatim te podatke smestite u sopstvenu bazu podataka.
U našem primeru, kreirali smo novi projekat, na koji smo postavili samo dve kontrole; komandno dugme (Button) i memo kontrolu (Memo). Sve što je potrebo je da uneste sledeću proceduru unutar obrađivača događaja OnClick dugmića:
Uses ComObj, Outlook2000;
// ili [Outlook8] u zavisnosti od verzije Outlook-a;
procedure TForm1.Button1Click(Sender: TObject);
var Outlook : TOutlookApplication;
DefNamespace: NameSpace;
Contacts: MAPIFolder;
Contact: ContactItem;
iCnt: Integer;
begin
Memo1.Clear;
// Instanciranje Outlook-ovog glavnog objekta
Outlook:=TOutlookApplication.Create(self);
DefNameSpace:=Outlook.GetNamespace(‘MAPI’);
// Citanje default foldera sa kontaktima
Contacts:=DefNameSpace.GetDefaultFolder(olFolderContacts);
// Petlja kojom prolayimo sve objekte u folderu kontakata
for iCnt:=1 to Contacts.Items.Count do
begin
// Citanje pojedinacnog objekta
Contact:=Contacts.Items.Item(iCnt) as ContactItem;
// Ucitavanje imena i preyimena kontakta u Memeo
memo1.Lines.Add (Contact.FirstName + ‘ ‘ _
+ Contact.Lastname);
end;
// Oslobadjanje instance
Outlook.Free;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Memo1.Clear;
end;
![]()
Komponente za baze podataka (II deo)
18.05.2007
Unutar Delphi-ja, kartica Data Access na paleti komponenti sadrži komponente koje se koriste za interakciju sa bazama podataka
Potrebno je postaviti odgovarajuću vrednost i u polje – osobinu TableName. I ovde će Object Inspector izlistati sve dostupne tabele aktuelne baze podataka (ili foldera), tako da, generalno, vrlo lako možete odabrati željenu tabelu.
Drugi izvor skupova podataka, koji je dostupan u Delphi-ju, jeste Query komponenta. Uobičajeno je da je ovaj izvor (upit) kompleksniji od obične tabele pošto zahteva poznavanje i izdavanje naredbi SQL jezika. Međutim, možete preuređivati upite korišćenjem SQL-a mnogo lakše nego što, na primer, uređujete tabele (naravno, samo u slučaju da znate bar osnovne naredbe SQL-a). Komponenta Query poseduje osobinu DatabaseName kao i komponenta Table, samo što nema osobinu TableName. Sama tabela je naznačena unutar upita, koji se smešta u osobinu SQL. Na primer, možete napisati sledeću jednostavnu SQL instrukciju:
SELECT * FROM Radnik;
gde ovo Radnik u stvari predstavlja tabelu, a zvezdica (*) indicira da želite da vam se vrate sva polja u tabeli. Ako ste dobar poznavalac SQL-a, slobodno možete češće koristiti komponentu, jer ćete imati bolje preformanse. Ovo je iz razloga što efikasnost korišćenja tabele ili upita zavisi od same baze podataka koju koristite.
Generalno gledano, komponenta Table radi brže sa lokalnim tabelama, dok je komponenta Query brža kod vraćanja podataka sa udaljenih SQL servera. Mada, ovo je samo generalna pravilnost, pa ćete možda u mnogim slučajevima iskusiti potpuno suprotan efekat.
Treća komponenta za vraćanje skupova podataka je StoredProc, koja se odnosi na skladištene procedure koje se nalaze na SQL serverima. Ove procedure možete pokretati i vraćene rezultate prikazati u formi tabele baza podataka. Ova komponeta se može koristiti samo u interakciji sa SQL serverima. ![]()
Komponente za baze podataka (I deo)
18.05.2007
Unutar Delphi-ja, kartica Data Access na paleti komponenti sadrži komponente koje se koriste za interakciju sa bazama podataka
Delphi sa sobom donosi veliki broj komponenti koje služe za rad sa bazama podataka. Kartica Data Access na paleti komponenti sadrži komponente koje se koriste za interakciju sa bazama podataka u BDE-orijentisanim (Borland Database Engine) aplikacijama. Najveći broj ovih komponenti nije vizuelan, pošto služe konekciji sa bazama, tabelama, upitima i sličnim elementima. Pored ovih komponenti, Delphi takođe obezbeđuje brojne predefinisane komponente koje će vam pomoći u prikazu i preuređenju podataka iz baza podataka. Na kartici Data Controls nalaze se vizuelne komponente, koje se koriste za prikaz i editovanje podataka na formi.
Da biste pristupili bazi podataka u Delphi-ju, biće vam potreban izvor podataka, koji se identifikuje komponentom DataSource. DataSource komponenta, međutim, ne označava podatke direktno, već preko DataSet komponente. Ovo može biti tabela, rezultat upita, rezultat skladišne procedure, podaci dobijeni sa udaljenog servera, itd.
Čim postavite DataSet komponentu na formu, možete preko njene osobine DataSource povezati ove dve komponente. Kada kliknete u polje ove osobine (u Object Inspector-u), izlistaće se svi dostupni DataSet-ovi sa ove ili sa drugih formi i data modula povezanih sa trenutnom formom (korišćenjem menija [File > Uses Form command]).
Najjednostavniji način za određenje pristupa podacima u Delphi-ju je korišćenjem Table komponente. Objekat Table jednostavno ukazuje na tabelu u određenoj bazi podataka. Kada koristite komponentu Table, potrebno je da odredite naziv baze podataka u kojoj se tabela nalazi, i to preko osobine DatabaseName. U ovu osobinu možete uneti alijas baze podataka ili putanju do foldera sa fajlovima tabela. Kliknete li na ovo polje, Object Inspector će izlistati sve dostupne nazive baza podataka, a njihov broj zavisi od instaliranih alijasa u BDE-u. ![]()
Zvuk na događaj “OnMouseOver”
18.05.2007
Evo kako možete da vaše aplikacije dopunite multimedijalnim sadržajima, odnosno zvučnim efektima
Da bi vaše aplikacije bile atraktivnije, sa više multimedije, možete ih obogatiti sa zvukom koji će da se aktivira na “OnMouseOver” događaj. Najčešće ćemo ovaj zvuk dodati dugmadima, da bi na taj način obavestili korisnika programa da se ispod pokazivača miša nalazi objekat, na čiji klik se dešava neka akcija. Pokrenućemo Delphi i novi projekt.
Postavite na formu samo jedno dugme (Button1) i iskopirajte sledeći kod:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes,
Graphics, Controls, Forms, Dialogs,
StdCtrls, MMSystem;
type
TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
procedure WndProc(var Message : TMessage); override;
public
{ Public declarations }
end;
var
Form1: TForm1;
ZvucniFajl : String;
implementation
{$R *.DFM}
procedure TForm1.WndProc(var Message : TMessage);
begin
if Message.LParam = Longint(Button1) then
begin
if (Message.Msg = CM_MOUSELEAVE) then
sndPlaySound(nil, snd_Async or snd_NoDefault);
if (Message.Msg = CM_MOUSEENTER) then
sndPlaySound(pchar(ZvucniFajl), snd_Async or snd_NoDefault);
end;
inherited WndProc(Message);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ZvucniFajl := ‘C:\Windows\Media\Ding.wav’;
end;
end.
Kao što možete i videti, koristimo proceduru za “hvatanje” Windows poruka (WndProc), da bi “odsvirali” neki zvuk (sndPlaySound). Kada je poslata poruka vezana za “Button1″, i kada je ona CM_MOUSEENTER “odsvira” se zvučni fajl iz varijable “ZvucniFajl”. ![]()
Stavljanje monitora u Stand-by
18.05.2007
Monitore koji podržavaju Stand-by mod, možete “uspavati” iz vašeg programskog koda
Ukoliko vaš ili bilo koji drugi monitor podržava Stand-by mode, moguće je isprogramirati njegovo stavljanje u ovaj način rada. Sledeći Delphi programski kod, i sam program će raditi sa verzijom Windows-a 95 i višom. Da bi “poslali” monitor u Stand-by potrebno je da uputimo sledeću sistemsku poruku Windows-u:
SendMessage(Application.Handle, wm_SysCommand, SC_MonitorPower, 0) ;
A, za izvođenje iz “uspavanosti” koristi se sledeća poruka:
SendMessage(Application.Handle, wm_SysCommand, SC_MonitorPower, -1) ;
Za primer, kreiraćemo malu aplikaciju koja će monitor slati u “uspavano” stanje. Radi toga, pokrenite Delphi i na praznu formu postavite sledeće kontrole:
Command button kontrolu
Timer kontrolu
ListBox kontrolu
Podesite i osobine Timer kontrole, osobinu “Enabled” postavite na “False”, a osobini “Interval” postavite na 15.000 (ovo je 15 sekundi). I dodajte sledeći kod datoj kontroli:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
ListBox1.Items.Add(FormatDateTime(‘h:mm:ss AM/PM’,Time)) ;
SendMessage(Application.Handle, wm_SysCommand, SC_MonitorPower, -1);
end;
Unutar događaja “Click” dugmeta dodajte sledeći kod:
procedure TForm1.Button1Click(Sender: TObject);
begin
ListBox1.Items.Add(‘–> ‘ + FormatDateTime(‘h:mm:ss AM/PM’,Time)) ;
Timer1.Enabled := not Timer1.Enabled ;
SendMessage(Application.Handle, wm_SysCommand, SC_MonitorPower, 0) ;
end;
Kada prevedete i pokrente program, po kliku na dugme, monitor će se isključiti na 15 sekundi. Ali pre toga pogledajte podešavanja u “Control Panel”-u, vezana za power-save osobine. ![]()
Rad sa statusnom linijom
18.05.2007
Svaka “ozbiljna” aplikacija bi trebala da poseduje pomoć u vidu poruka korisnicima u statusnoj liniji (StatusBar-u)
Svaka složenija aplikacija bi trebalo da poseduje statusnu liniju (Status bar) na kojoj će se prikazivati informacije korisniku. I Delphi poseduje komponentu StatusBar na “Win32″ VCL paleti alatki, sa kojom je kreiranje naših satusnih linija vrlo lako. Predstavićemo i neke bitne osobine koje ima ova kontrola:
- Panels – ovom osobinom postavljamo više panoa na jednu statusnu liniju.
- SimplePanel – podešavanje da li će se prikazati jedan pano ili višestruki panoi.
- AutoHint – ovom osobinom omogućavamo da se automatski na statusnoj liniji prikazuje tekst iz osobine Hint, komponenti iznad kojih pređete mišem.
- SizeGrip – postavljanje da li će se “držač” za promenu veličine forme videti u statusnoj liniji.
U slučaju da imamo jednostavniju statusnu liniju, sastojaće se samo od jednog panoa. U suprotnom osobinu “SimplePanel” postavićemo na “False”, da bi dobili kompleksniji-višestruku panel. Kada ovo postavite kliknite dvostruko na kolonu “Value” u osobini “Panels”, da bi dobili “StatusBar Panels Editor”. Dodavanje panoa ide preko dugmeta “Add New” u novom dijalog prozoru. Kada postavite svoje panoe, možete im menjati osobine, ako kliknete na njih pa pređete u prozor “Object Inspector”-a. Da bi u toku rada aplikacije izmenjivali tekst koji se javlja u određenom panou, koristićete osobinu “Text”. Kada završite dodavanje svih panoa u statusnu liniju, vratite se na formu.
U statusnoj liniji tekst se može menjati na dva načina:
Ako postavite “AutoHint” na “True”, tekst će se menjati automatski prelaskom miša iznad određene komponente.
Ili, možete ručno, tj. programski menjati tekst preko osobine “SimpleText” kod jednostrukog panoa ili preko osobine “Text” kod višestrukih panoa.
Evo i primera izmene teksta u jednostavnoj statusnoj liniji:
StatusBar.SimpleText := ‘Ovaj tekst ce se prikazati u statusnoj liniji’ ;
Kod složenih statusnih linija, promene ćemo vršiti preko osobine “Items” komponente Panels, tj. preko ove osobine ćemo pristupati određenom panelu.
StatusBar.Panels[0].Text := ‘Ovaj tekst ce se prikazati u panou statusne linije’ ;
Kao što se može i pretpostaviti prethodnalinija koda postavlja tekst u statusnu liniju i to u prvi panel po redu (indeks 0). ![]()
Usidreni prozor
18.05.2007
Kako uz pomoć Windows API funkcija postići da vam se prozori “zalepe” za ivice ekrana?
Verovatno ste već do sada imali prilike da vidite aplikacije čiji se prozori prosto “lepe” za ivicu ekrana. Tipičan predstavnik ovakvog “ponašanja” programa je poznati “WinAmp”. U ovom članku videćemo kako možemo da postignemo isti efekat. Naravno, u samom Windows API-ju nemamo ugrađenu mogućnost za izvođenje ovog efekta. Zato ćemo radi postizanja cilja iskoristiti Windows poruke (messages). Delphi čini iskorišćavanje ovih poruka vrlo lakim, preko obrade događaja. Obično se neki događaj generiše kao odgovor na Windows poruku, odaslatu aplikaciji. Iako veći deo ovih poruka obrađuje sam Delphi, neke od poruka ostaju nama, da ih mi obradimo. Na primer, znamo da ako je promenjena veličina forme sa Resize događajem – Delphi se upravlja porukom WM_SIZE, ali kako mi možemo da saznamo da li se forma recimo premestila? Delphi prihvata sve odaslate poruke, ali inicijalno ne čini ništa na njihovoj obradi.
Ukoliko korisnik premešta formu, Delphi-jevoj formi se šalje poruka WM_MOVING. Procesiranjem ove poruke, aplikacija može “očitavati” veličinu i poziciju forme, i ako je potrebno može je premestiti, ili joj promeniti veličinu. Poruka WM_WINDOWPOSCHANGING se šalje prozoru (formi), kome su promenjeni veličina, pozicija ili redosled (npr. izazvani funkcijom SetWindowPos). U većini slučajeva sama poruka nije dovoljna, potrebni su nam i dodatni parametri. Na primer, WM_MOVE poruka nam govori da je formi promenjena pozicija, ali ovde nam parametar LPARAM daje X i Y koordinate. Sa porukom WM_WINDOWPOSCHANGING dobijamo samo jedan parametar – onaj koji ukazuje na WindowPos strukturu, koja sadrži informaciju o novoj veličini i poziciji forme. Evo kako izgleda WindowPos struktura:
TWindowPos = packed record
hwnd: HWND; {Identifikuje prozor.}
hwndInsertAfter: HWND; {Prozor iznad trenutnog}
x: Integer; {Levi ugao prozora}
y: Integer; {Desni ugao prozora}
cx: Integer; {Sirina prozora}
cy: Integer; {Visina prozora}
flags: UINT; {Opcije za pozicioniranje}
end;
U sledećem primeru, videćemo kako možemo da postignemo da se prozor naše aplikacije jednostavno “prilepi” za ivicu ekrana, kada recimo prozor privučemo na nekih 20 piksela do ivice ekrana. Pokrenite novi projekt i na praznu formu dodajte jednu Label kontrolu, jednu Edit kontrolu i 4 polja za potvrdu (kao na slici). Promenite nazive poljima za potvrdu u chkLevo, chkDesno… Edit kontrolu ćemo koristiti za podešavanje udaljenosti od ivice ekrana, na kojoj će se najbliža ivica prozora primaći ivici ekrana. Jedina poruka koja nam treba je WM_WINDOWPOSCHANGING, ali treba nam i parametar SPI_GETWORKAREA koji će nam dati veličinu radnog prostora (desktopa). Sledi potreban Delphi kod:
…
private
procedure WMWINDOWPOSCHANGING
(Var Msg: TWMWINDOWPOSCHANGING);
message WM_WINDOWPOSCHANGING;
…
procedure TfrMain.WMWINDOWPOSCHANGING
(var Msg: TWMWINDOWPOSCHANGING);
const
Prilepljen: Boolean = FALSE;
var
rWorkArea: TRect;
Usidren : Word;
begin
Prilepi := StrToInt(Edit1.Text);
SystemParametersInfo
(SPI_GETWORKAREA, 0, @rWorkArea, 0);
with Msg.WindowPos^ do begin
if chkLevo.Checked then
if x <= rWorkArea.Left + Prilepi then begin
x := rWorkArea.Left;
Usidren := TRUE;
end;
if chkDesno.Checked then
if x + cx >= rWorkArea.Right – Prilepi then begin
x := rWorkArea.Right – cx;
Usidren := TRUE;
end;
if chkGore.Checked then
if y <= rWorkArea.Top + Prilepi then begin
y := rWorkArea.Top;
Usidren := TRUE;
end;
if chkDole.Checked then
if y + cy >= rWorkArea.Bottom – Prilepi then begin
y := rWorkArea.Bottom – cy;
Usidren := TRUE;
end;
if Usidren then begin
with rWorkArea do
begin
if x < Left then x := Left;
if x + cx > Right then x := Right – cx;
if y < Top then y := Top;
if y + cy > Bottom then y := Bottom – cy;
end;
end;
end;
inherited;
end;
end.
![]()
LeAnn Rimes
18.05.2007
LeAnn je sa samo 11 godina stupila na američku country scenu, i odmah je osvojila
Sada kada ima 20 godina i za prodala je nekoliko miliona ploča i diskova. Takođe, osvojila je i dve Grammy nagrade: jednu, kao najbolja kantri pevačica (Best Female Country Vocal Performance) za izdati multiplatinasti CD album – Blue, i drugu, kao najbolji novajlija godine (Best New Artist of the Year) kada je ovo priznanje dobila kao najmlađi umetnik i prvi kao kantri umetnik.
Već sa 14 godina napravila je duet sa Eltonom John-om. Sada, kada ima 20 godina, aktuelan je novi (6-ti) album – Twisted Angel, kojije izašao 1.oktobra ove godine.
Od manekenke do porno-dive
17.05.2007
Za njenu lepotu zaslužna je kombinacija oca Engleza i majke Tajlanđanke koja se izrodila na jednom od “hodočašća” engleskih turista u centar seksi-turizma – Tajland
Tera Patrick (umetničko ime) predstavlja pravu feminističku noćnu moru. Ona zna šta hoće u životu, kao i šta neće, agresivna je, inteligentna i otvorena – porno-diva sa sopstvenim talk šou-om. Sam njen životni stil predstavlja centralnu temu u čak dva šou programa, “The Tera Show.com” i šou na Playboy-evom kanalu “Night Calls 411“. Iako je veoma otvorena i u svojim nastupima, za sebe kaže da je duboko konzervativna (?!). Redovno čita Bibliju i kaže da želi da ima bilo kakve seksualne kontakte sa istim polom. Toliko o njenoj “konzervativnosti”.
![]() |
![]() |
Svoju profesionalu karijeru započela je sa svojih 14 godina, kao model u poznatoj manekenskoj agenciji “Ford Modeling Agency”. Radila je je revije za mnoge poznate svetske modnekuće, ali njoj su najdraže, Vivienne Westwood i Comes des Garcons, radila je u svim sveskim modnim centrima, od Milana i Pariza, preko Njujorka do Tokia. Već sa njenih 18 godina, došlo je do “zamora materijal”, te napušta modni svet u želji da studira medicinu. U ovoj “avanturi” nije imala mnogo uspeha, a tokom tih par godina studija, dodatne prihode ostvaruje pozirajući gola nepoznatom fotografima. Odmah zatim počinje i da snima filmove, isprva “meke”, a zatim i one tvrđe.
Njen vrtoglavi uspon u porno-svetu započinje 2000. godine kada je izabrana za “Najbolju mladu glumicu” na festivalu “Hot D’Or Film Festival” u mondenskom francuskom letovalištu Kanu, porno filmskom festivalu koji se održava u Maju kada se održava i poznati Kanski fimski festival. Trenurno, ona je vrlo tražena porno-zvezda koja ima privilegiju da bira uloge, nedavno je snimila i svoj prvi DVD “Virtual Sex” koji je ubrzo potom postao bestseler.
Ovakvim usponom i inteligentnim vođenjem karijere, spasila se od igranja u trećerazrednim pornićima i svakodnevnog igranja po klubovima za “šaku dolara”. Za njenu lepotu zaslužna je kombinacija oca Engleza i majke Tajlanđanke koja se izrodila na jednom od “hodočašća” engleskih turista u centar seksi-turizma – Tajland.


Kreiranje SQL serverskih objekata preko ADO-a
17.05.2007
Za razliku od prethodnika, DAO modela za pristup podacima, ADO ne može preko objektnog modela da kreira i modifikuje objekte SQL servera.
Uovom prilogu obradićemo pitanje kako kreirati ili modifikovati objekte na MS SQL serveru uz pomoć ADO-a (ActiveX Data Objects). Za razliku od prethodnika, DAO modela za pristup podacima, ADO ne može preko objektnog modela da kreira i modifikuje objekte SQL servera. Nemoguće je dodati objekat u Tables kolekciju, međutim, to vas ne sprečava da uputite instrukcije Transact SQL-a (Microsoft-ov SQL) korišćenjem metode Execute objekta Connection i opcionog parametra adCmdText.
Kao što znate, korišćenjem Transact SQL-a možete kreirati, modifikovati, brisati device-eve, uskladištene procedure i sve ostalo što inače radite preko Enterprise manager-a. Detaljnije o Transact SQL-u možete čitati u SQL prilozima ove rubrike. Da biste videli kako na delu možemo modifikovati objekte na serveru, ispratite sledeće korake:
- Pokrenite Visual Basic i otvorite novi standardni EXE projekat. Projekat nazovite “ModObjekt“, a glavnu formu preimenujte u frmGlavna, te dodajte referencu ka Microsoft ActiveX Data Objects 2.0.
- Dodajte na formu tri komandna dugmeta i dajte im sledeće nazive (osobina Name): cmdKreiraj, cmdIzmeni i cmdObrisi. Rasporedite ih kao na slici.
- Za upravljanje objektom Connection dodajte sledeći kod vezan za učitavanje forme:
Option Explicit
Private mConn As Connection
Private Sub Form_Load()
Set mConn = New Connection
mConn.Open “Provider=SQLOLEDB.1;
User ID=sa;Password=password”
+ “;Location=WINEMILLER;Database=pubs”
End Sub
Private Sub Form_Unload(Cancel As Integer)
mConn.Close
Set mConn = Nothing
End Sub
- Zatim dodajte i programski kod vezan za dugmad:
Private Sub cmdIzmeni_Click()
`izmena tabele
Dim sCmd As String
sCmd = “alter table
JEDNOSTAVNA add STAVKA_N CHAR(40) ”
sCmd = sCmd + “NULL”
mConn.Execute sCmd, , adCmdText
End Sub
Private Sub cmdKreiraj_Click()
`kreiranje jednostavne table
Dim sCmd As String
sCmd = “create table
JEDNOSTAVNA (SIFRA INTEGER NOT ”
sCmd = sCmd + “NULL”
sCmd = sCmd + “, STAVKACHAR(40) NOT NULL)”
mConn.Execute sCmd, , adCmdText
End Sub
Private Sub cmdObrisi_Click()
`brisanje tabele
Dim sCmd As String
sCmd = “drop table JEDNOSTAVNA”
mConn.Execute sCmd, , adCmdText
End Sub
Na svaki klik, na bilo koje od dugmadi, generiše se Transact SQL komanda za modifikaciju baze podataka i šalje se putem metode Execute objekta Connection.
Korišćenjem opcionog parametra adCmdText, bilo koja komanda koju server “razume” može biti upućena serveru na obradu. Korišćenje metode Execute otvara bezbroj novih mogućnosti.
Ponekad objektni model može biti restriktivan, ali Microsoft je ipak “otvorio vrata” programerima da bi mogli direktno da komuniciraju sa bazama podataka. ![]()




