PDA

View Full Version : چگونه میشود عکس پشت زمینه در BDGrid انداخت



شهریاری 1
پنج شنبه 10 تیر 1389, 11:41 صبح
یک برنامه طراحی کردم می خواستم یک تصویر پشت زمینه BdGrid مثل آرم بندازم لطفا اگر کسی این کار رو کرده یا راهی به نظرش میرسه ممنونش میشوم .:لبخندساده:

Felony
پنج شنبه 10 تیر 1389, 13:11 عصر
من کمی با متدهای DBGrid سر و کله زدم ، کد زیر یه تصویر رو روی DBGrid رسم میکنه ولی متن های زیری عکس نمایش داده نمیشن .
DBGrid1.Canvas.Draw(20,20,Image1.Picture.Graphic);

BORHAN TEC
پنج شنبه 10 تیر 1389, 13:55 عصر
بهتره در رویداد مربوط به Paint مربوط به Form از کد زیر استفاده کنید:

procedure TForm1.FormPaint(Sender: TObject);
var
graph: TGraphic; // TGraphic is an abstractc class
MyTop: Integer;
MyLeft: Integer;
begin
DBGrid1.Repaint;
graph := TBitmap.Create;
graph.LoadFromFile('c:\1.bmp');

MyTop := DBGrid1.Height - graph.Height;
MyLeft := DBGrid1.Width - graph.Width;

DBGrid1.Canvas.Draw(MyLeft, MyTop, graph, 20);
end;

Felony
پنج شنبه 10 تیر 1389, 14:23 عصر
بهتره در رویداد مربوط به Paint مربوط به Form از کد زیر استفاده کنید:

procedure TForm1.FormPaint(Sender: TObject);
var
graph: TGraphic; // TGraphic is an abstractc class
MyTop: Integer;
MyLeft: Integer;
begin
DBGrid1.Repaint;
graph := TBitmap.Create;
graph.LoadFromFile('c:\1.bmp');

MyTop := DBGrid1.Height - graph.Height;
MyLeft := DBGrid1.Width - graph.Width;

DBGrid1.Canvas.Draw(MyLeft, MyTop, graph, 20);
end;

اینم شد همون کدی که من نوشتم که ...

BORHAN TEC
پنج شنبه 10 تیر 1389, 14:43 عصر
اینم شد همون کدی که من نوشتم که ...
این کد همانطور که می بینید در شرایط مختلف کار می کنه. مثلا برنامه مورد نظر تحت هر شرایطی (مثل تغییر اندازه و...) عکس رو در قسمت پایین و سمت راست DbGrid نشون میده و همچنین در کد من Opacity هم با استفاده از پارامتر چهارم قابل تنظیم است.

(البته می تونستم به شکل دیگه ای بهتون جواب بدم. یعنی :عصبانی:)

tdkhakpur
پنج شنبه 10 تیر 1389, 14:57 عصر
بازی با canvas دردی را دوا نخواهد کرد برای اینگونه کارها شما باید پیغامهای زیر مربوط به کنترل را بوسیله تعییر مسیر پروسه کنترل در اختیار بگیرید


WM_ERASEBKGND: // تغییرات در برابر تغییرات اندازه یا طراحی مجدد کنترل
WM_PAINT : // تغییر در برابر باز سازی مجدد و یا ترسیم مجدد

شما میتوانید در داخل دو تا case بالا ترسیم تصویر را قید کنید.

Felony
پنج شنبه 10 تیر 1389, 15:35 عصر
این کد همانطور که می بینید در شرایط مختلف کار می کنه. مثلا برنامه مورد نظر تحت هر شرایطی (مثل تغییر اندازه و...) عکس رو در قسمت پایین و سمت راست DbGrid نشون میده و همچنین در کد من Opacity هم با استفاده از پارامتر چهارم قابل تنظیم است.
تحت شرایط مختلف یعنی چی ؟
1- این کد اصلا در رویداد OnPaint مربوط به فرم برنامه کار نمیکنه .
2- پارامتر Opacity بی فایده هست و هیچ تغییری در Opacity عکس نشون داده نمیشه .


(البته می تونستم به شکل دیگه ای بهتون جواب بدم. یعنی )
منظورتون رو متوجه نشدم ... !

BORHAN TEC
جمعه 11 تیر 1389, 09:58 صبح
تحت شرایط مختلف یعنی چی ؟
1- این کد اصلا در رویداد OnPaint مربوط به فرم برنامه کار نمیکنه .
2- پارامتر Opacity بی فایده هست و هیچ تغییری در Opacity عکس نشون داده نمیشه .
در رویداد OnPaint مربوط به فرم کار می کنه، خودم تستش کردم و جواب داد !
این کد تنها مشکلی که داره اینه که در موقعی که DBGrid رو اسکرول می کنیم عکس نشان داده شده به هم می خوره! در ضمن Opacity بی فایده نیست و تاثیر داره!
عکس زیر هم نتیجه اجرای برنامه در دلفی 2010 هست:

Felony
جمعه 11 تیر 1389, 10:26 صبح
در رویداد OnPaint مربوط به فرم کار می کنه، خودم تستش کردم و جواب داد !
این کد تنها مشکلی که داره اینه که در موقعی که DBGrid رو اسکرول می کنیم عکس نشان داده شده به هم می خوره! در ضمن Opacity بی فایده نیست و تاثیر داره!
بله کار میکنه ، من تو یه برنامه که قبلا نوشته بودم تست کردم ( تو اون برنامه متد paint رو Override کرده بودم و یادم نبود ) .

برای رفع مشکل اسکرول هم میتونید کد رو تو یه تایمر قرار بدید .