نمایش تبلیغ
 
ایجاد وبلاگ
 
مدیریت وبلاگ
 
وبلاگی دیگر
 
دلفيستان
یکشنبه، 22 آذر، 1383

 آموزش ADO (بخش اول)

شناخت اجزاء:

ADO شامل مجموعه ای از کامپوننتهاست که فرایند اتصال به منبع داده هارو با استفاده از OLE DB فراهم میکنه اجزای پالت ADO در دلفی خواص این محصول رو به صورت کپسوله ارائه میدن با باستفاده از اجزای ADO ميشه برنامه هایی رو ارائه کرد که هیچ وابستگی به BDE نداشته باشن قبل از هرچیز بهتره  نگاهی گذرا به اجزاءADO در دلفی انداخته و وظایف هر جزء رو  بررسی کنیم.

 جزء  شرح
 

 اين جزء اصليترين کاپموننت جهت اتصال به منبع دادهاست ووظيفه ش واکشی داده ها از منبع داده هاس

   اين جزء ميتونه دادها رو از يک جدول واکشی کنه اين جزء هم ميتونه به طور مستقيم و هم از طريقadoconnectionبه منبع داده ها متصل بشه
   اين جزء ميتونه به طور همزمان به يک يا چند جدول اطلاعاتی متصل بشه وداده ها رو واکشی کنه
   از اين جزع برای واکشی داده هايی استفاده ميشه که از طريق عبارت sqlمعتبر تهيه شدن اين جز قابليت اجرای دستورات ddlرود اراست
   از اين جزء برای اجرای فرامين استفاده ميشه

در درس بعدی چگونگی اتصال به منبع داده ها بررسی خواهد شد.

 



یکشنبه، 22 آذر، 1383

باعرض سلام خدمت همه دوستان وعلاقه مندان دلفی و عرض پوزش به خاطر غيبت طولانی توفيقی دست داد تا دوباره درخدمت شما باشم واگر خدا بخواهد اينبار با حضوری پيوسته و مدام  صدالبته با پيگيری شما اين مقال پربارتر خواهد شدپس با حضور خود و ارائه نظرات کارساز مرا در اين راه دلگرم کنيد.

 با مطالعه کامونتهايی که در اين مدت درج شده گرايش عميق دوستان به مبحث شبکه ساز ی در دلفی آنهم از طريق کامپوننتهای ADO حس ميشود از اين رو تصميم دارم .چند جلسه آغاز کار را به آموزش اين مبحث اختصاص دهم.تا شروع بحث آغازين عزيزانی که مشکلی در زمينه کاربرد اين کامپوننت دارند ميتوانند به طرح سوال بپردازند

 با تشکر رضا - ک



پنجشنبه، 9 بهمن، 1382
مرور وانتخاب فايلها، پوشه ها ،كامپيوترهاو پرينترها
(استفاده از دلفي و توابع API جهت نمايش ساختار دايركتوري يك كامپيوتر و امكان دست يابي يك كاربر به يك فايل خاص)

در ويندوز راههاي مختلفي جهت نمايش ساختار دايركتوري كامپيوتر وجود دارد يك برنامه نويس دلفي بايد بداند كه چگونه از كامپوننت TpenDialogجهت انجام اين كار استفاده كند اما بحث ما خارج از اين كامپوننت است وبيش ازهمه حول استفاده از توابع, apiجهت نيل به مقصود است.
با استفاده از تابع SHBROWSEFOLDER( ) ودلفي ما قادر خواهيم بود كه سيستم پنجره هاي گفتگوي ويندوز را جهت مرور وجستجوي فايلها، پوشه ها، كامپيوترها وپرينترها فراخواني كنيم.
ابتدا اجازه بديهد ببينيم كه اين تابع به چيزهايي نياز دارد.
كدهاي زير در رابطه با اعلان تابع است.
Function SHBrowseForFolder (var BrowseInfo: TBrowseInfo): PItemIDList; stdcall;



BrowseInfo حاوي اطلاعاتي در رابطه با مقدار دهي اوليه مرور وسفارشي كردن جستجوي فايلها وپوشه هاســت.
اما ItemIDList رااجازه بدهيد محل پوشه انتخابي بناميم
حالا بايد ببينيم كه چگونه ساختار اطلاعاتي لازم رو در BrowseInfo جهت مقدار دهي اوليه وسفارشي كردن جستجو تعيين كنيم.وهمچنين تابع SHBROWSEFOLDER( ) را جهت نمايشحعبه گفتگوي ويندوز تنظيم كنيم

BrowseInfoداراي دو عنصر اصلي است با عناوينlpsz و ulflags
جعبه گفتگو عنوان موجود در lpsz رابه صورت يك برچسب در بالاي ساختار درختي به نمايش در مي آورد و وظيفه عنصر ulflags تنظيم مقداريست كه معين كننده نوع پنجره ظاهر شونده و همچنين مجوزي حهت انتخاب كاربراست
ما ميتونيم چندين نوع مقدار را جهت تنظينم عنصر ulflagsبه كار مي ببريم مقاديري كه هركدام تعيين كننده يك مرور خاص در جعبه گفتگو هستند. بعضي از اين مقادير به شرح زير هستن:
BIF_BROWSEFORCOMPUTER
فقط كامپيوترها را برمي گرداند و اگر كاربرگزينه اي غير از نام كامپيوتر را انتخاب كند دكمه تاييد غير فعال ميشود
BIF_BROWSEFORPRINTER
فقط پرينترها را برمي گرداند و اگر كاربرگزينه اي غير از نام پرينتر را انتخاب كند دكمه تاييد غير فعال ميشود
BIF_RETURNONLYFSDIRS
فقط فايلهاي سيستمي را برمي گرداند و اگر كاربرگزينه اي غير فايلهاي سيستمي را انتخاب كند دكمه تاييد غير فعال ميشود

BIF_BROWSEINCLUDEFILES
پنجره مرور فايلها وپوشه ها را تواما نشان خواهد داد


وقتي كه تمامي مقادير لازم را در تابع دلفي قرار داديم و ساختار مورد نياز ايجاد شد ، به دنبال آن تابع SHBROWSEFOLDER( ) جهت نمايش جعبه گفتگو فراخواني ميشود
بنابر اين چيزي شبيه كدهاي زير خواهيم داشت
uses ShellAPI, ShlObj;
...

uses ShellAPI, ShlObj;

...

function BrowseDialog

(const Title: string; const Flag: integer): string;

var

lpItemID : PItemIDList;

BrowseInfo : TBrowseInfo;

DisplayName : array[0..MAX_PATH] of char;

TempPath : array[0..MAX_PATH] of char;

begin

Result:='';

FillChar(BrowseInfo, sizeof(TBrowseInfo), #0);

with BrowseInfo do begin

hwndOwner := Application.Handle;

pszDisplayName := @DisplayName;

lpszTitle := PChar(Title);

ulFlags := Flag;

end;

lpItemID := SHBrowseForFolder(BrowseInfo);

if lpItemId <> nil then begin

SHGetPathFromIDList(lpItemID, TempPath);

Result := TempPath;

GlobalFreePtr(lpItemID);

end;

end;






interfaceموضوع را به صورت زير در فرم اصلي پروژه پياده كنيد



اين تابع به سادگي زير ميتواند فراخواني بشود
procedure TForm1.Button1Click(Sender: TObject);

var sTitle, sFolder: string;
iFlag : integer;
begin
if RadioButton1.Checked=true then
begin
iFlag := BIF_RETURNONLYFSDIRS;
sTitle:='Choose a '+RadioButton1.Caption;
end;
if RadioButton2.Checked=true then
begin
iFlag := BIF_BROWSEINCLUDEFILES;
sTitle:='Choose a '+RadioButton2.Caption;
end;
if RadioButton3.Checked=true then
begin
iFlag := BIF_BROWSEFORCOMPUTER;
sTitle:='Choose a '+RadioButton3.Caption;
end;
if RadioButton4.Checked=true then
begin
iFlag := BIF_BROWSEFORPRINTER;
sTitle:='Choose a '+RadioButton4.Caption;
end;
sFolder := BrowseDialog(sTitle, iFlag);
if sFolder <> '' then
EDIT1.text := sFolder
else
EDIT1.text := 'Nothing selected';
end;

براي دانلود برنامه اينجارو كليك كنيد

اميدوارم استفاده لازم رو برده باشيد
با تشكر رضا كرمي



شنبه، 4 بهمن، 1382
اتصال به بانك اطلاعاتي data accese با استفاده BDE
جهت اتصال به بانك اطلاعاتي اكسس قبل از هر چيز بايد از طريق odbc يك نام مستعار جهت ايجاد كنيم پس به پنجره كنترل پانل رفته و بر روي آيكن odbc data كليك ميكنيم شكل زير ظاهر ميشود




تب systems dsn رو انتخاب ميكنيم وسپس بر روي دكمهadd كليك مي كنيم
شكل زير ظاهر ميشود




گزينه microsoft access driver رو انتخاب كرده و دكمه finish رو كليك ميكنيم
شكل زير ظاهر ميشود




در قسمت data source نامي مستعار جهت دسترسي به اطلاعات انتخاب ميكنيم من به طور مثال نام data رو انتخاب كردم پس از تعيين نام مستعار بايد مسير بانك اطلاعاتي رو تعيين كنيم براي اين منظور بر روي دكمه select كليك كنيد
شكل زير ظاهر ميشود



پس از انتخاب مسير وبانك اطلاعاتي مربوطه دكمه ok رو كليك كنيد
من به طور مثال بانك اطلاعاتي kala.mdb رو انتخاب كردم
خب تا اينجا كار ايجاد نام مستعار و همچنين مسير بانك اطلاعات با موفقييت انجام شد
حالا در دلفي يك پروژه جديد رو شروع كنيد واجزاي زير رو به فرم اضافه كنيد
database1
table1
datasourc1
dbgrid1
روي فرم دبل كليك كنيد وكدهاي زير رو قرار بديد

procedure TForm1.FormCreate(Sender: TObject);

begin

Database1.LoginPrompt:=False;

Database1.DatabaseName:='data';

Database1.Connected:=true;

Table1.DatabaseName:=Database1.DatabaseName;

Table1.TableName:='Mailing List';

DataSource1.DataSet:=Table1;

DBGrid1.DataSource:=DataSource1;

Table1.Open;

end;

دوستان بايد توجه داشته باشند كه خاصيت Table1.TableName رو با يكي ازجداول اطلاعتي موجود در بانك اطلاعاتي خودتون تنظيم كنيد من اينجا به طور مثال اين خاصيت رو با نام mytableكه نام يكي از جداولم ميباشد تنظيم كردم.
همچنين چون در اين مثال من خاصيت databasname مربوط به database1رو به صورت Database1.DatabaseName:='data';
تنظيم كردم چون قبلا مسير منتهي به بانك اطلاعاتيم رو با نام مستعار data ايجاد كردم
اميدوارم كه استفاده لازم رو ببريد
با تشكر رضا كرمي





چهارشنبه، 19 آذر، 1382

سلام دوستان....

تخليه سطل زباله از درون برنامه دلفي

 

procedure EmptyRecycleBin;

const

SHERB_NOCONFIRMATION = دلفيستان
;

SHERB_NOPROGRESSUI =


;

SHERB_NOSOUND = $00000004;

type

TSHEmptyRecycleBin = function(Wnd: HWND; pszRootPath: pChar; dwFlags: DWORD):

HRESULT; stdcall;

var

SHEmptyRecycleBin: TSHEmptyRecycleBin;

LibHandle: THandle;

begin

LibHandle := LoadLibrary(pChar('Shell32.dll'));

if LibHandle <> 0 then

@SHEmptyRecycleBin := GetProcAddress(LibHandle, 'SHEmptyRecycleBinA');

if @SHEmptyRecycleBin <> nil then

begin

SHEmptyRecycleBin(Application.Handle, nil, SHERB_NOCONFIRMATION or

SHERB_NOPROGRESSUI or SHERB_NOSOUND);

end;

FreeLibrary(LibHandle);

@SHEmptyRecycleBin := nil;

end;

 

procedure TForm1.Button1Click(Sender: TObject);

begin

EmptyRecycleBin;

end;

 

 

تغيير روزوليشن صفحه ويندوز

 

function SetDisplay1024x768: Boolean;

var

DevMode: TDeviceMode;

begin

EnumDisplaySettings(nil, 0, DevMode);

DevMode.dmFields := DM_PELSWIDTH or DM_PELSHEIGHT;

DevMode.dmPelsWidth := 1024;

DevMode.dmPelsHeight := 768;

Result := ChangeDisplaySettings(DevMode, CDS_UPDATEREGISTRY)

= DISP_CHANGE_SUCCESSFUL;

end;

 

procedure TForm1.Button1Click(Sender: TObject);

begin

SetDisplay1024x768;

end;

 

 

 



چهارشنبه، 12 آذر، 1382

سلام بر همه علاقمندان دلفی موضوعاتی که در زير عنوان ميشوند اغلب در رابطه با کاربرد توابع سيستمی api ويندوز با استفاده از زبان دلفي ميباشند دوستاني كه علاقمند به كاربرد اين موضوعات در برنامه هاي خود هستند با ذكر عنوان مربوطه مي توانند در كاموننت بعدي منتظر پاسخ خود باشند



 1- حذف فايلها از درون برنامه دلفي
2- اضافه كردن گزينه هاي جديد به منوي مربوط به راست كليك در Windows Explorer
3- اضافه كردن برنامه ها به منوي شروع ويندوز(Windows start menu)
4- اضافه كردن يك url جديد در Windows Favorite
5- دسترسي به گزينه هاي منوي شروع ويندوز
6- ايجاد تغيير وظيفه كليدهاي موس
7- تغيير ساعت وتاريخ ويندوز
8- تغيير روزوليشن صفحه
9- چك كردن اين موضوع كه آيا برنامه كنسول در حال اجرا در وضعيت تمام صفحه ميباشد و ياخير
10- بررسي اينكه آيا كاربر يك كليد ميانبر خاص را ايجاد كرده است يا خير
11- ساخت يك فرم فقط با استفاده از توابع api
12- حذف كليد ميانبر
13- بررسي اينكه آيا يك برنامه كاربردي به درخوست كاربر پاسخ ميدهد ويا اينكه متوقف شده است
14- از كار انداختن صفحه كليد وموس
15- نمايش صفحه خصوصيات فايلها
16- خالي كردن سطل زباله
17- پيدا كردن منابع شبكه
18- پيدا كردن گروههاي كاري(workgroups) در شبكه lan
19- بدست آوردن اطلاعاتي در رابطه با فايلها
20- بدست آوردن مسير يك برنامه كاربردي با انتخاب آيكن مربوطه
21- استخراج ويژگيهاي يك برنامه كاربردي
22- درج نام فايلهاي مورد نظر از يك مسير خاص در يك ListBox
23- پيدا كردن كامپيوترهاي موجود در يك گروه كاري شبكه
24- پيدا كردن نام كامپيوتر وكاربر جاري
25- پيدا كردن مسير يك فايل از طريق ميانبر آن
26- پيدا كردن كلمه عبور مربوط به يك screen saver
27- پيدا كردن مسير فايلهاي موجود در منوي شروع ويندوز
28- بدست آوردن ليستي از سرويسهاي نصب شده در ويندوز
29- Shoot down كردن كامپيونر
30- فعال ويا غير فعال كردن screen saver
31- فراخواني جعبه هاي گفتگوي سيستم ويندوز ز طريق كدهاي دلفي
32- تغيير رنگ صفحات ويندوز
33- بستن برنامه هايي كه به درخواست كاربر پاسخ نمي دهند
34- ساخت يك برنامه كه بعد از اجرا خودش را حذف ميكند
35- مشخص كردن اينكه سيستم جهت نمايش حروف كوچك تنظيم شده است يا حروف بزرگ
36- يافتن تنظيمات محلي سيستم
37- تعيين زمان بالا آمدن ويندوز(up time)
38- بدست آوردن اطلاعاتي از پنجرهاي موجود در desktop
39- مخفي كردن برنامه دلفي در ويندوز
40- فراخوني يك برنامه كاربردي از درون برنامه دلفي
41- باز كردن پنجرهopen file dialog بدون استفاده از كامپوننتهاي متداول در دلفي
42- بازبيني محتويات پوشهFavourites مربوط به اينترنت اكسپلورر
43- بازبيني محتويات history درinternet explorer
44- Reboot, log off, shut down or turn off the system
45- Restore files from the recycle bin and delete files present in the recycle bin
46- محدود كردن حركات موس در فرم
47- بدست آوردن ليستي از برنامه هاي نصب شده در ويندوز
48- گرفتن تصوير از صفحه كامپيوتر
49- جستجوي پوشه هايي كه در شبكه به اشتراك گذاشته شده اند
50- فرستادن يك فايل به سطل زباله
51- تنظيم سرعت اشاره گر
52- تنظيم screen saver جاري
53- نشان دادن سلسله مراتب در ويندوز
54- تعيين گنجايش بافر
55- خاموش كردن كامپيوتر از طريق شبكه
56- رد يابي عملياتهاي ويندوز



شنبه، 8 آذر، 1382

سلام دوستان...

1-ايجاد يكaliases جهت بانك اطلاعاتي در زمان اجراي برنامه دلفی

uses
DBIProcs, DBITypes;

procedure AddBDEAlias(sAliasName, sAliasPath, sDBDriver: string);
var
h: hDBISes;
begin
DBIInit(nil);
DBIStartSession('dummy',h,'');
DBIAddAlias(nil, PChar(sAliasName), PChar(sDBDriver),
PChar('PATH:' + sAliasPath), True);
DBICloseSession(h);
DBIExit;
end;

مثال زير با استفاده از تابع فوق يك اليس در مسيرتعيين شده جهت بانك اطلاعاتي پارادوكس ايجاد ميكند

AddBDEAlias('DATA','C:\WORK\DATA','paradox');

2- بدست آوردن مسير جاري بانك اطلاعاتي با استفاده از تابع

 GetDataBaseDir

uses DbiProcs, DBiTypes;

function GetDataBaseDir(const Alias: string): string;
{* Will return the directory of the database given the alias
(without trailing backslash) *}
var
sp:PChar;
Res:pDBDesc;
begin
try
New(Res);
sp := StrAlloc(length(Alias) + 1);
StrPCopy(sp,Alias);
if DbiGetDatabaseDesc(sp,Res) = 0 then
Result := StrPas(Res^.szPhyName)
else
Result := '';
finally
StrDispose(sp);
Dispose(Res);
end;
end;


 



پنجشنبه، 29 آبان، 1382

سلام دوستان امروز ميخوام ساخت يک پخش کننده صوتی مخصوص فرمتهای mp3 بوسيله دلفي رو تقديمتون كنم در نظر داشته باشيد كه كامپوننت تعبيه شده در كتابخانه اجزا دلفي يا mediaplayer به طور معمول قادر به پخش موزيكهاي با پسوند mp3 نيست
پس شروع كنيد يه پروژه تازه رو در دلفي شروع كنيد كامپوننتهاي زير رو از پالت اجزا دلفي بر روي فرم قرار بديد
۱- شش edit با نامهايedTitle, edArtist, edAlbum, edYear, edGenre, edComment
2-يك GroupBox
۳ -يك list box با نام mp3List
۴ - يك bitbtn با نام btnOpenFolder
۵ - يك StaticText با نام txtFolder
۶ - يك timer با نام ProgresTimer
۷ - يك ProgressBar با نام progres
8 - يك جزو MediaPlayer با نامmp3Player

اين هم interfaceپخش كننده



كدهاي زير رو در ينيت فرم اصلي كپي كنيد

 
unit Unit۱;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons, MPlayer, ComCtrls, ExtCtrls;

type
TForm1 = class(TForm)
mp3player: TMediaPlayer;
mp3List: TListBox;
btnOpenFolder: TBitBtn;
GroupBox1: TGroupBox;
edTitle: TEdit;
edArtist: TEdit;
edAlbum: TEdit;
edYear: TEdit;
edGenre: TEdit;
edComment: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
txtFolder: TStaticText;
ProgresTimer: TTimer;
Progres: TProgressBar;
procedure btnOpenFolderClick(Sender: TObject);
procedure mp3ListClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure ProgresTimerTimer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

type
TID3Rec = packed record
Tag : array[0..2] of Char;
Title,
Artist,
Comment,
Album : array[0..29] of Char;
Year : array[0..3] of Char;
Genre : Byte;
end;

const
MaxID3Genre=147;
ID3Genre: array[0..MaxID3Genre] of string = (
'Blues', 'Classic Rock', 'Country', 'Dance', 'Disco', 'Funk', 'Grunge',
'Hip-Hop', 'Jazz', 'Metal', 'New Age', 'Oldies', 'Other', 'Pop', 'R&B',
'Rap', 'Reggae', 'Rock', 'Techno', 'Industrial', 'Alternative', 'Ska',
'Death Metal', 'Pranks', 'Soundtrack', 'Euro-Techno', 'Ambient',
'Trip-Hop', 'Vocal', 'Jazz+Funk', 'Fusion', 'Trance', 'Classical',
'Instrumental', 'Acid', 'House', 'Game', 'Sound Clip', 'Gospel',
'Noise', 'AlternRock', 'Bass', 'Soul', 'Punk', 'Space', 'Meditative',
'Instrumental Pop', 'Instrumental Rock', 'Ethnic', 'Gothic',
'Darkwave', 'Techno-Industrial', 'Electronic', 'Pop-Folk',
'Eurodance', 'Dream', 'Southern Rock', 'Comedy', 'Cult', 'Gangsta',
'Top 40', 'Christian Rap', 'Pop/Funk', 'Jungle', 'Native American',
'Cabaret', 'New Wave', 'Psychadelic', 'Rave', 'Showtunes', 'Trailer',
'Lo-Fi', 'Tribal', 'Acid Punk', 'Acid Jazz', 'Polka', 'Retro',
'Musical', 'Rock & Roll', 'Hard Rock', 'Folk', 'Folk-Rock',
'National Folk', 'Swing', 'Fast Fusion', 'Bebob', 'Latin', 'Revival',
'Celtic', 'Bluegrass', 'Avantgarde', 'Gothic Rock', 'Progressive Rock',
'Psychedelic Rock', 'Symphonic Rock', 'Slow Rock', 'Big Band',
'Chorus', 'Easy Listening', 'Acoustic', 'Humour', 'Speech', 'Chanson',
'Opera', 'Chamber Music', 'Sonata', 'Symphony', 'Booty Bass', 'Primus',
'Porn Groove', 'Satire', 'Slow Jam', 'Club', 'Tango', 'Samba',
'Folklore', 'Ballad', 'Power Ballad', 'Rhythmic Soul', 'Freestyle',
'Duet', 'Punk Rock', 'Drum Solo', 'Acapella', 'Euro-House', 'Dance Hall',
'Goa', 'Drum & Bass', 'Club-House', 'Hardcore', 'Terror', 'Indie',
'BritPop', 'Negerpunk', 'Polsk Punk', 'Beat', 'Christian Gangsta Rap',
'Heavy Metal', 'Black Metal', 'Crossover', 'Contemporary Christian',
'Christian Rock', 'Merengue', 'Salsa', 'Trash Metal', 'Anime', 'Jpop',
'Synthpop' {and probably more to come}
);

implementation

uses ShellAPI, ShlObj; // needed for the BrowseForFolder function

{$R *.DFM}

procedure FillID3TagInformation(mp3File:string; Title,Artist,Album,Year,Genre,Comment:TEdit);
var //fMP3: file of Byte;
ID3 : TID3Rec;
fmp3: TFileStream;
begin
fmp3:=TFileStream.Create(mp3File, fmOpenRead);
try
fmp3.position:=fmp3.size-128;
fmp3.Read(ID3,SizeOf(ID3));
finally
fmp3.free;
end;

{ or the non Stream approach - as in ChangeID3Tag procedure
try
AssignFile(fMP3, mp3File);
Reset(fMP3);
try
Seek(fMP3, FileSize(fMP3) - 128);
BlockRead(fMP3, ID3, SizeOf(ID3));
finally
end;
finally
CloseFile(fMP3);
end;
}

if ID3.Tag <> 'TAG' then begin
Title.Text:='Wrong or no ID3 tag information';
Artist.Text:='Wrong or no ID3 tag information';
Album.Text:='Wrong or no ID3 tag information';
Year.Text:='Wrong or no ID3 tag information';
Genre.Text:='Wrong or no ID3 tag information';
Comment.Text:='Wrong or no ID3 tag information';
end else begin
Title.Text:=ID3.Title;
Artist.Text:=ID3.Artist;
Album.Text:=ID3.Album;
Year.Text:=ID3.Year;
if ID3.Genre in [0..MaxID3Genre] then
Genre.Text:=ID3Genre[ID3.Genre]
else
Genre.Text:=IntToStr(ID3.Genre);
Comment.Text:=ID3.Comment
end;
end;


procedure ChangeID3Tag(NewID3: TID3Rec; mp3FileName: string);
var
fMP3: file of Byte;
OldID3 : TID3Rec;
begin
try
AssignFile(fMP3, mp3FileName);
Reset(fMP3);
try
Seek(fMP3, FileSize(fMP3) - 128);
BlockRead(fMP3, OldID3, SizeOf(OldID3));
if OldID3.Tag = 'TAG' then
{ Replace old tag }
Seek(fMP3, FileSize(fMP3) - 128)
else
{ Append tag to file because it doesn't exist }
Seek(fMP3, FileSize(fMP3));
BlockWrite(fMP3, NewID3, SizeOf(NewID3));
finally
end;
finally
CloseFile(fMP3);
end;
end;


procedure FillMP3FileList(Folder: string; sl: TStrings);
var Rec : TSearchRec;
begin
sl.Clear;
if SysUtils.FindFirst(Folder + '*.mp3', faAnyFile, Rec) = 0 then
try
repeat
sl.Add(Rec.Name);
until SysUtils.FindNext(Rec) <> 0;
finally
SysUtils.FindClose(Rec);
end;
end;

function BrowseDialog(const Title: string; const Flag: integer): string;
var
lpItemID : PItemIDList;
BrowseInfo : TBrowseInfo;
DisplayName : array[0..MAX_PATH] of char;
TempPath : array[0..MAX_PATH] of char;
begin
Result:='';
FillChar(BrowseInfo, sizeof(TBrowseInfo), #0);
with BrowseInfo do begin
hwndOwner := Application.Handle;
pszDisplayName := @DisplayName;
lpszTitle := PChar(Title);
ulFlags := Flag;
end;
lpItemID := SHBrowseForFolder(BrowseInfo);
if lpItemId <> nil then begin
SHGetPathFromIDList(lpItemID, TempPath);
Result := IncludeTrailingBackslash(TempPath);
GlobalFreePtr(lpItemID);
end;
end;


procedure TForm1.btnOpenFolderClick(Sender: TObject);
var mp3Folder : string;
begin
mp3Folder := BrowseDialog('Choose a folder with mp3 files', BIF_RETURNONLYFSDIRS);
if mp3Folder = '' then Exit;

txtFolder.Caption := mp3Folder;

FillMP3FileList(mp3Folder, mp3List.Items);
end;

procedure TForm1.mp3ListClick(Sender: TObject);
var mp3File: string;
begin
if mp3List.Items.Count=0 then exit;
mp3File := Concat(txtFolder.Caption, mp3List.Items.Strings[mp3List.ItemIndex]);
if not FileExists(mp3File) then begin
ShowMessage('MP3 file '+#13#10+ mp3File +#13#10+'does not exist!');
exit;
end;

FillID3TagInformation(mp3File, edTitle, edArtist, edAlbum, edYear, edGenre, edComment);

Progres.Max:=0;

mp3player.Close;
mp3player.FileName:=mp3File;
mp3player.Open;

Progres.Max := mp3player.Length;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
txtFolder.Caption := ExtractFilePath(Application.ExeName);
FillMP3FileList(txtFolder.Caption, mp3List.Items);
Progres.Max:=0;
end;

procedure TForm1.ProgresTimerTimer(Sender: TObject);
begin
if Progres.Max<>0 then
Progres.Position := mp3player.Position;
end;
end.

منبع :سايت delphi.about.com



سه‌شنبه، 27 آبان، 1382

با سلام
دوستی در رابطه با استفاده از يونيکد در دلفی سوال کردن
کامپوننتی که ميتونند از اينجا دانلود کنند با اضافه کردن اجزايی به پالت دلفی به سادگی اينکار رو انجام ميده..




دوستي در رابطه با پيدا كردن ركوردهاي تكراري در بانك اطلاعاتي با استفاده از دستورات اس كيو ال پرسيدن.. اين مقاله كه توسط دوست خوبم آقاي ابوالفضل مهدوي تهيه شدن ودر سايتbarnamenevis.net درج شده تا حد زيادي مشكل اين دوست رو حل ميكنه


حذف ركوردهاي تكراري از يك بانك
گاها براي ما اتفاق مي افتد كه بخواهيم از يك table ركوردهاي تكراري را حذف كنيم .در اين چند خط برنامه سعي مي‌كنم يا ذكر مثال اين مساله را بررسي كنم . فرض كنيد اطلاعات زير موجود باشد :

 LastName  FirstName  NameID
 Robert  Aide  106
 David  Koid  ۱۰۷
 Hongb   Li  ۱۰۸
 Rober  Aide  ۱۲۳


مي‌خواهيم اطلاعات تكراري در اين table را حذف كنيم. به ترتيبي كه ركوردي كه حذف ميشود مقدار فيلد NameID آن از فيلدي كه مانند آن است و در جدول مي‌ماند بيشتر باشد. يعني فيلد 123 حذف و 106 باقي بماند.

فرض اين است كه فيلد NameID كليد جدول و يكتاست. اگر چنين فيلدي در جدول نبود مي‌توان آنرا ايجاد كرد.(فيلدي از نوع int و Identity )

در قطعه كد زير ابتدا جدول را از اطلاعات فرضي پر كرده و سپس با يك دستور Delete ركوردهاي تكراري آنرا حذف مي‌كنيم..



Craete Table Dups (NameID int,FirstName varchar(10),LastName varchar(10))

Go



Insert into Dups values (106, ‘Robert’, ‘Aide’)

Insert into Dups values (107, ‘David’, ‘Koidl’)

Insert into Dups values (108, ‘Hongbo’, ‘Li’)

Insert into Dups values (123, ‘Robert’, ‘Aide’)

Insert into Dups values (124, ‘David’, ‘Koidl’)

Insert into Dups values (125, ‘Hongbo’, ‘Li’)

Insert into Dups values (138, ‘Robert’, ‘Aide’)

Insert into Dups values (139, ‘David’, ‘Koidl’)

Insert into Dups values (140, ‘Hongbo’, ‘Li’)

Insert into Dups values (153, ‘Robert’, ‘Aide’)

Insert into Dups values (154, ‘David’, ‘Koidl’)

Insert into Dups values (155, ‘Hongbo’, ‘Li’)

Go

Delete From Dups

Where

Exists(

Select NameId

From Dups DupsInner

Where DupsInner.FirstName = Dups.FirstName

And DupsInner.LastName = Dups.LastName

And DupsInnet.NameID
Go

بعد از پر كردن جدول اطلاعات آن به شكل زير خواهد بود.



106---------Robert--------Aide

107---------David----------Koidl

108---------Hongbo--------Li

123---------Robert --------Aide

124---------David---------- Koidl

125--------- Hongbo-------Li

138----------Robert -------Aide

139---------- David -------- Koidl

140-----------Hongbo-------- Li

153-----------Robert -------- Aide

154-----------David----------- Koidl

155 ----------Hongbo ----------Li


كه پس از دستور Delete به شكل زير در خواهد آمد.



106----------Robert------ Aide

107----------- David------- Koidl

108-----------Hongbo-------Li


با آرزوي موفقيت براي كليه دوستان.




جمعه، 23 آبان، 1382

سلام دوستان تاخير من رو ببخشاييد..
اول مناظره VBكارها و حضرات دلفي رو اينجا بخونيد
دوم اينكه دوستان سولالت خوبي پرسيدن كه در حال جواب مشروح به آنها هستم... پس منتظر باشيد



[خانه | آرشيو | پست الكترونيك ]

  RSS 2.0