PDA

View Full Version : مبتدی: نمایش تصاویر به صورت متوالی در دلفی 7



10987654321
جمعه 02 اردیبهشت 1390, 11:54 صبح
سلام من یه پروژه داارم برای 1شنبه .با استفاده از win 3.1 با ابزار آن عکس ها پشت سر هم بیان با فاصله بر حسب میلی ثانیه کد هاشو میخوام

SAASTN
جمعه 02 اردیبهشت 1390, 12:15 عصر
سلام، خوش آمدید، فکر می کنم بهتره اول یه نگاهی به این بخشها بندازید.
http://barnamenevis.org/misc.php?do=showrules
http://barnamenevis.org/showthread.php?282940-%D8%AA%D9%88-%D8%B1%D9%88-%D8%AE%D8%AF%D8%A7-%D8%A8%D9%87-%D9%85%D9%86-%DA%A9%D9%85%DA%A9-%DA%A9%D9%86%DB%8C%D8%AF!

10987654321
جمعه 02 اردیبهشت 1390, 13:18 عصر
خوب سوالمو کجا مطرح کنم ؟؟ اطلاعات زیادی ندارم فقط خیلی به کمک احتیاج دارم

nsco_nsco
جمعه 02 اردیبهشت 1390, 13:42 عصر
سلام باید عکسها رو شو و هیدن کنی برای ثانیه شمارت هم :
یکی تایمر بساز و این کد رو بزار:
timer1.interval:=5000;
طبق دستور بالا 5 ثانیه صبر می باشد بر حثب میلی ثانیه است موفق باشی :قلب:

10987654321
جمعه 02 اردیبهشت 1390, 14:06 عصر
خوب همون نوشتن برنامه عکس ها رو مشکل دارم که باید مثلا با comobox ,directory list boxo ,file list box نمیدونم چجوری فایل ها رو روی اون ها add کنم .یک دکمه last ,next میخواهم وقتی برنامه image1.picture.loadfromfeli(filelistbox1.[items] این error میده اینارو خود استاد داده نمیدونم اصلا قضیه چیه کل کدهاشو میخواهم

10987654321
جمعه 02 اردیبهشت 1390, 14:08 عصر
راستش مبتدی هستم اگر میشه یکم بیشتر توضیح بدین

10987654321
جمعه 02 اردیبهشت 1390, 17:13 عصر
عکس هارو تو کدوم شی addکنم. ؟como directory file list?

SAASTN
جمعه 02 اردیبهشت 1390, 22:36 عصر
ببینید این سوالاتی که می پرسید خیلی کلیه و مسائل مختلفی رو در بر می گیره.
تصور نمی کنم اینطوری به نتیجۀ مطلوبی برسیم، بهتره فضای پروژه و وضعیت فعلی برنامه رو یکم مشخص تر کنیم.
برای این منظور لطفا چند نکته رو مشخص کنید:
پروژه مربوط به مقطع و چه مبحثی هست؟
چرا ویندوز 3.1؟ چه محدودیتی وجود داره؟
برنامه قصد انجام چه کاری رو داره؟ یعنی دقیقا تعریف پروژه چیه؟ چیزی شبیه به متحرک سازی چند Frame متوالی؟ یا یه چیزی مثل نمایش اتوماتیک چند عکس با فاصله زمانی بالا؟
فایل های تصویر چه فرمتی دارن و کجا ذخیره شدن؟ حدودا چندتا هستند؟
در حال حاضر برنامه ای برای این موضوع نوشته اید یا تازه قصد شروع دارید؟ یا نمونه هایی شبیه در دست دارید؟
اگر برنامه ای رو شروع کردید یا نمونه هایی در دست دارید که می خواید تغییرشون بدید دقیقا با چه مشکلی روبرو شدید؟

نمیدونم اصلا قضیه چیه کل کدهاشو میخواهم
ببینید، عرفی که اینجا وجود داره اینه که کسی نمیاد کل برنامه مد نظر شما رو از صفر تا صد بنویسه. اما خوب میشه کمک کرد تا بخش های مختلف برنامه از هم مجزا بشه، و روش انجام هر بخش هم توضیح داده بشه. اگه هم در اجرا به مشکلی بر خوردید دوستان راهنمایی می کنن تا به نتیجه مطلوب برسید.
کل این مطلب رو آقای موسوی در همون تاپیکی که لینک دادم خیلی شیوا تر بیان کردن:

دقت کنید، منظورم از مطرح نمودن سوال این نیست که بنویسید "برنامه ای بنویسید که ...". خیر. بلکه بنویسید "ازم خواستن من فلان برنامه رو بنویسم، منم تا این حد پیش رفتم، اما به این دلیل و این دلیل، متوجه نمیشم چطوری باید فلان بخش از الگوریتم رو پیاده سازی کنم...".

Pascal
شنبه 03 اردیبهشت 1390, 13:51 عصر
عکس هارو تو کدوم شی addکنم. ؟como directory file list?

حتماٌ بايد در يك كنترل ديگر اضافه كنيد ؟!
براي بارگذاري از FileListBox بايد از كد زير استفاده كنيد.



Image1.Picture.LoadFromFile(FileListBox1.FileName) ;



كد دكمه Next


FileListBox1.ItemIndex :=FileListBox1.ItemIndex+1;




كد دكمه Last



FileListBox1.ItemIndex := FileListBox1.Items.Count;

SAASTN
چهارشنبه 07 اردیبهشت 1390, 15:20 عصر
salam alan hamechiz ru neveshtam faghat barnameye timer ro ke mizanam too run error mide hang mikone barname
az interval ham error migire
لطفا پست ها تون رو به زبان فارسی بنویسید.
در مورد خطا کدی که خطا میگیره و متن خطا رو بذارید، تا بشه علت رو تشخیص داد.
در مورد بخشی هم که هنگ می کنه به همین ترتیب، اگر می تونید کد کوچکتری نسبت به برنامتون ایجاد کنید که همین مشکل رو داره، و قرارش بدین و در غیر اینصورت کل پروژه رو پیوست کنید، چون از متن فعلی که نوشتید هیچ حدسی نمیشه زد.

Pascal
پنج شنبه 08 اردیبهشت 1390, 00:43 صبح
احتمالا شما سعي كرديد يك عكس در Image ‌لود كنيد در حالي كه filelistbox‌ خالي هست (منظورم كد مربوط به تايمر است).

10987654321
شنبه 10 اردیبهشت 1390, 09:48 صبح
error:project1.exe raised expection class EInvalid graphic with message unknown picture file extention (.jpg) procceced stop use step or run to continue .

اما ران نمیشه حالا کد هارم میزارم فقط تایمر با timer1.interval:= زمان رو بر حسب میلی ثانیه میخوام

10987654321
شنبه 10 اردیبهشت 1390, 09:48 صبح
ses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, FileCtrl, Buttons;

type
TForm1 = class(TForm)
DriveComboBox1: TDriveComboBox;
DirectoryListBox1: TDirectoryListBox;
FileListBox1: TFileListBox;
Image1: TImage;
Edit1: TEdit;
Timer1: TTimer;
Label1: TLabel;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
i:integer;

implementation

{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
image1.Picture.LoadFromFile(filelistbox1.Items[i]);
i:=i+1;
if i=filelistbox1.items.capacity then i:=0;
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
begin
image1.Picture.LoadFromFile(filelistbox1.Items[i]);
i:=i-1;
if i<0 then i:=filelistbox1.Items.Capacity-1;
begin
if filelistbox1.Items.Capacity>0 then
image1.Picture.LoadFromFile(filelistbox1.Items[i]);
i:=i+1;
if i=filelistbox1.Items.Capacity then i:=0 else
showmessage('there is no image');
end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
timer1.Interval:=5000;
Timer1.Enabled:=true;
end;

end.

Pascal
شنبه 10 اردیبهشت 1390, 15:14 عصر
به قسمتت uses برنامه
jpeg را اضافه كنيد

SAASTN
شنبه 10 اردیبهشت 1390, 15:19 عصر
برای رفع خطا jpeg رو use کنید.
اگه می خواید Timer عکس ها رو پشت سر هم نمایش بده یه روش کد زیر هست:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if I < FileListBox1.Items.Count then
Image1.Picture.LoadFromFile(FileListBox1.Items[i]);
if FileListBox1.Items.Count > 0 then
begin
Inc(I);
I := I mod FileListBox1.Items.Count;
end;
end;

فقط توجه داشته باشید که FileList.Mask رو مثلا به *.jpg تغییر بدید.
لطفا برای قرار دادن کد از تگ های PAS یا (#)Code استفاده کنید.

----------------
ببخشید مثل اینکه با پست 14 (http://barnamenevis.org/showthread.php?283799-%D9%86%D9%85%D8%A7%DB%8C%D8%B4-%D8%AA%D8%B5%D8%A7%D9%88%DB%8C%D8%B1-%D8%A8%D9%87-%D8%B5%D9%88%D8%B1%D8%AA-%D9%85%D8%AA%D9%88%D8%A7%D9%84%DB%8C-%D8%AF%D8%B1-%D8%AF%D9%84%D9%81%DB%8C-7&p=1255915&viewfull=1#post1255915) جناب Pascal (http://barnamenevis.org/member.php?9482-Pascal) همزمان شد.

10987654321
سه شنبه 13 اردیبهشت 1390, 11:04 صبح
مرسی باز امتحان می کنم باید چه کار کنم حتی مثلا توی ادیت باکس 0.2 هم که میزنم جواب بده؟باید برای تایم float تعریف کنم؟

SAASTN
سه شنبه 13 اردیبهشت 1390, 12:11 عصر
باید چه کار کنم حتی مثلا توی ادیت باکس 0.2 هم که میزنم جواب بده؟باید برای تایم float تعریف کنم؟
نه دیگه، TTimer.Interval جنسش Integer هست و واحدش هم 0.001 ثانیه. از این کمتر دیگه نمیشه. ولی اگه منظورتون 0.2 ثانیه است، باید اون رو با StrToFloat به مقدار اعشاری تبدیل کنید، و در 1000 ضربش کنید و دوباره با Round یا ... به مقدار صحیح تبدیلش کنید:
Timer1.Interval := Round(StrToFloat(Edit1.Text) * 1000);

10987654321
جمعه 16 اردیبهشت 1390, 22:49 عصر
nit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, Buttons, FileCtrl, jpeg;

type
TForm1 = class(TForm)
DriveComboBox1: TDriveComboBox;
DirectoryListBox1: TDirectoryListBox;
FileListBox1: TFileListBox;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
Edit1: TEdit;
Label1: TLabel;
BitBtn3: TBitBtn;
BitBtn4: TBitBtn;
Image1: TImage;
Timer1: TTimer;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure BitBtn4Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Edit1Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
i:integer;
a1:integer;

implementation

{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
if filelistbox1.Items.Capacity>0 then
image1.Picture.LoadFromFile(filelistbox1.Items[i]);
i:=i+1;
if i=filelistbox1.Items.Capacity then i:=0;
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
begin
if filelistbox1.Items.Capacity>0 then
image1.Picture.LoadFromFile(filelistbox1.Items[i]);
if i<=0 then i:=filelistbox1.Items.Capacity;
i:=i-1;
end;

procedure TForm1.BitBtn3Click(Sender: TObject);
begin
if a1<=0 then
ShowMessage('ÚÏÏí æÇÑÏ äÔÏå ÇÓÊ');
Timer1.Interval := Round(StrToFloat(Edit1.Text) * 1000);
timer1.Enabled:=true;
end;

procedure TForm1.BitBtn4Click(Sender: TObject);
begin
timer1.Enabled:=FALSe;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
bitbtn1.click;
end;

procedure TForm1.Edit1Change(Sender: TObject);
begin
a1:=strtoINT(edit1.Text);
if a1<=0 then
ShowMessage('ÚÏÏ æÇÑÏ ÔÏå äÈÇíÏ ÕÝÑ íÇ ßæßÊÑ ÈÇÔÏ');
end;


end.

10987654321
جمعه 16 اردیبهشت 1390, 22:51 عصر
الان دیگه این درسته؟این رو تو ادیت باکس میزنم ارور میگیره که 0 نباشه:عصبانی++::عصبانی++:

SAASTN
یک شنبه 18 اردیبهشت 1390, 00:46 صبح
خوب بدبخت داره میگه نمی تونه صفر باشه دیگه. Interval حتما باید مقدار بزرگتر یا مساوی یک داشته باشه.
عدد کمتر از 0.001 که وارد نمی کنید؟ چون تابع Round عدد رو گرد می کنه و این گرد کردن میونه رو به پائین باشه و صفر نتیجه بده.
بهتره از کد زیر استفاده کنید:
Timer1.Interval := Max(1, Ceil(StrToFloat(Edit1.Text) * 1000));
اون تایع Ceil برای گرد کزدن رو به بالاست و تابع Max هم که با پارامتر 1 فراخوانی شده باعث میشه مقدار Timer1.Interval هیچوقت از یک کمتر نشه.
هر دوی این توابع در یونیت Math تعریف شدن.
ضمنا قرار دادن کد به این صورت طویل کمک زیادی نمی کنه. شما بهتره فایل های کامپایل شده و اجرایی (exe, dll, dcu) رو از فولدر پروژتون پاک کنید و کل فولدر رو فشرده کرده و اینجا پیوست کنید.
و برای بار دوم: لطفا برای قرار دادن کد از تگ های PAS یا (#)Code استفاده کنید.

10987654321
سه شنبه 27 اردیبهشت 1390, 16:16 عصر
مرسی ممنونم

M_Maskout
چهارشنبه 28 اردیبهشت 1390, 06:55 صبح
مرسی ممنونم
سلام
دوست عزیز در صورتیکه پاسخی که به شما داده شده، مشکل شما رو حل کرده بهتره گزینه "تشکر کردن" در انتهای پست مربوطه رو بزنید، تا مشخص بشه به جواب رسیدین و یا اگر خودتون مشکل رو حل کردین، راه حل اون رو بنویسین و در غیر اینصورت با زدن پست جدید بیشتر توضیح بدین تا سایر دوستان بتونند بهتون کمک کنن.