ahmadi.edu
یک شنبه 22 اسفند 1389, 12:39 عصر
اگه میتونی کد های فرمتو بزار یه نگاهی بندازم ...
ّبرادر فکر نمیکنم و تقریبا 99% مطمئنم که ربطی به کدهام نداره کلا C# این مشکل رو داره که اگه تو یک فرم از چندتا عکس استفاده کنی فرم دیر باز بشه میخواستم ببینم راه حلی داره یا نه.
ولی بازم کدهای داخل فرمم رو میذارم که دوستان اگه خواستن یه نگاهی بکنن.
public partial class frmSkin : Form
{
public frmSkin()
{
InitializeComponent();
}
[DllImport("Gdi32.dll", EntryPoint = "CreateRoundRectRgn")]
public static extern IntPtr CreateRoundRectRgn
(
int nLeftRect, // x-coordinate of upper-left corner
int nTopRect, // y-coordinate of upper-left corner
int nRightRect, // x-coordinate of lower-right corner
int nBottomRect, // y-coordinate of lower-right corner
int nWidthEllipse, // height of ellipse
int nHeightEllipse // width of ellipse
);
public override Color BackColor
{
get
{
return base.BackColor;
}
set
{
base.BackColor = value;
backColor = BackColor;
}
}
public static Color backColor;
private void pictureBox_MouseEnter(object sender, EventArgs e)
{
PictureBox Temp = (PictureBox)sender;
switch (Temp.Name)
{
case "pictureBoxClose": pictureBoxClose.Image = global::EtahaClient.Properties.Resources.close_ove r;
break;
case "pictureBoxMax": pictureBoxMax.Image = global::EtahaClient.Properties.Resources.max_over;
break;
case "pictureBoxMin": pictureBoxMin.Image = global::EtahaClient.Properties.Resources.min_over;
break;
}
}
private void pictureBox_MouseLeave(object sender, EventArgs e)
{
PictureBox Temp = (PictureBox)sender;
switch (Temp.Name)
{
case "pictureBoxClose": pictureBoxClose.Image = global::EtahaClient.Properties.Resources.Close1;
break;
case "pictureBoxMax": pictureBoxMax.Image = global::EtahaClient.Properties.Resources.max;
break;
case "pictureBoxMin": pictureBoxMin.Image = global::EtahaClient.Properties.Resources.min;
break;
}
}
private void pictureBox_MouseDown(object sender, MouseEventArgs e)
{
PictureBox Temp = (PictureBox)sender;
switch (Temp.Name)
{
case "pictureBoxClose": pictureBoxClose.Image = global::EtahaClient.Properties.Resources.close_dow n;
this.Close();
break;
case "pictureBoxMax": pictureBoxMax.Image = global::EtahaClient.Properties.Resources.max_down;
{
if (WindowState == FormWindowState.Maximized)
WindowState = FormWindowState.Normal;
else
{
this.WindowState = FormWindowState.Maximized;
this.Size = this.MaximumSize;
}
}
break;
case "pictureBoxMin": pictureBoxMin.Image = global::EtahaClient.Properties.Resources.min_down;
this.WindowState = FormWindowState.Minimized;
break;
}
}
private void pictureBox_MouseUp(object sender, MouseEventArgs e)
{
PictureBox Temp = (PictureBox)sender;
switch (Temp.Name)
{
case "pictureBoxClose": pictureBoxClose.Image = global::EtahaClient.Properties.Resources.Close1;
break;
case "pictureBoxMax": pictureBoxMax.Image = global::EtahaClient.Properties.Resources.max;
break;
case "pictureBoxMin": pictureBoxMin.Image = global::EtahaClient.Properties.Resources.min;
break;
}
}
const int HT_CAPTION = 0x2;
const int WM_NCLBUTTONDOWN = 0xA1;
[DllImportAttribute("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
[DllImportAttribute("user32.dll")]
public static extern bool ReleaseCapture();
private void frmSkin_Load(object sender, EventArgs e)
{
//GeneralSendRecieve.CurrentColor = cl_ModifyRegistry.Read("CurrentColor");
//if (GeneralSendRecieve.CurrentColor == "")
// GeneralSendRecieve.CurrentColor = "156, 221, 244";
//switch (GeneralSendRecieve.CurrentStyle)
//{
// case "Back_New1":
// GeneralSendRecieve.frmSkinForm.BackgroundImage = global::EtahaClient.Properties.Resources.back_new1 ;
// break;
// case "Back_New2":
// GeneralSendRecieve.frmSkinForm.BackgroundImage = global::EtahaClient.Properties.Resources.back_new2 ;
// break;
// case "Back_New3":
// GeneralSendRecieve.frmSkinForm.BackgroundImage = global::EtahaClient.Properties.Resources.back_new3 ;
// break;
//}
BackColor = Color.FromArgb(int.Parse(GeneralSendRecieve.Curren tColor.Trim().Split(',')[0]), int.Parse(GeneralSendRecieve.CurrentColor.Trim().S plit(',')[1]), int.Parse(GeneralSendRecieve.CurrentColor.Trim().S plit(',')[2]));
pictureBoxMax.Enabled = MaximizeBox;
pictureBoxMin.Enabled = MinimizeBox;
}
public void ChangeControlBackColor(Button b)
{
b.DataBindings.Add("BackColor", this, "BackColor");
}
public void SetFormSkin(Form frm)
{
frm.DataBindings.Add("BackColor", GeneralSendRecieve.frmSkinForm, "BackColor");
frm.DataBindings.Add("BackgroundImage", GeneralSendRecieve.frmSkinForm, "BackgroundImage");
}
private void panel1_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
SendMessage(this.Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
ReleaseCapture();
}
}
private void frmSkin_Paint(object sender, PaintEventArgs e)
{
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
Rectangle rectBar = new Rectangle();
rectBar = this.Bounds;
GraphicsPath path = null;
Pen p = new Pen(Color.FromArgb(128, 127, 250));
// Pen p = new Pen(Color.FromArgb(int.Parse(GeneralSendRecieve.Cu rrentBorder.Split(',')[0]), int.Parse(GeneralSendRecieve.CurrentBorder.Split(' ,')[1]), int.Parse(GeneralSendRecieve.CurrentBorder.Split(' ,')[2])));
path = Create(0, 0, rectBar.Width - 2, rectBar.Height - 2, 10);
e.Graphics.DrawPath(p, path);
p = new Pen(Color.White);
path = Create(1, 1, rectBar.Width - 4, rectBar.Height - 4, 9);
e.Graphics.DrawPath(p, path);
e.Graphics.SetClip(path);
e.Graphics.ResetClip();
}
private void panel2_Paint(object sender, PaintEventArgs e)
{
}
public enum RectangleCorners
{
None = 0, TopLeft = 1, TopRight = 2, BottomLeft = 4, BottomRight = 8,
All = TopLeft | TopRight | BottomLeft | BottomRight
}
public static GraphicsPath Create(int x, int y, int width, int height,
int radius, RectangleCorners corners)
{
int xw = x + width;
int yh = y + height;
int xwr = xw - radius;
int yhr = yh - radius;
int xr = x + radius;
int yr = y + radius;
int r2 = radius * 2;
int xwr2 = xw - r2;
int yhr2 = yh - r2;
GraphicsPath p = new GraphicsPath();
p.StartFigure();
//Top Left Corner
if ((RectangleCorners.TopLeft & corners) == RectangleCorners.TopLeft)
{
p.AddArc(x, y, r2, r2, 180, 90);
}
else
{
p.AddLine(x, yr, x, y);
p.AddLine(x, y, xr, y);
}
//Top Edge
p.AddLine(xr, y, xwr, y);
//Top Right Corner
if ((RectangleCorners.TopRight & corners) == RectangleCorners.TopRight)
{
p.AddArc(xwr2, y, r2, r2, 270, 90);
}
else
{
p.AddLine(xwr, y, xw, y);
p.AddLine(xw, y, xw, yr);
}
//Right Edge
p.AddLine(xw, yr, xw, yhr);
//Bottom Right Corner
if ((RectangleCorners.BottomRight & corners) == RectangleCorners.BottomRight)
{
p.AddArc(xwr2, yhr2, r2, r2, 0, 90);
}
else
{
p.AddLine(xw, yhr, xw, yh);
p.AddLine(xw, yh, xwr, yh);
}
//Bottom Edge
p.AddLine(xwr, yh, xr, yh);
//Bottom Left Corner
if ((RectangleCorners.BottomLeft & corners) == RectangleCorners.BottomLeft)
{
p.AddArc(x, yhr2, r2, r2, 90, 90);
}
else
{
p.AddLine(xr, yh, x, yh);
p.AddLine(x, yh, x, yhr);
}
//Left Edge
p.AddLine(x, yhr, x, yr);
p.CloseFigure();
return p;
}
public static GraphicsPath Create(Rectangle rect, int radius, RectangleCorners c)
{ return Create(rect.X, rect.Y, rect.Width, rect.Height, radius, c); }
public static GraphicsPath Create(int x, int y, int width, int height, int radius)
{ return Create(x, y, width, height, radius, RectangleCorners.All); }
public static GraphicsPath Create(Rectangle rect, int radius)
{ return Create(rect.X, rect.Y, rect.Width, rect.Height, radius); }
public static GraphicsPath Create(int x, int y, int width, int height)
{ return Create(x, y, width, height, 5); }
public static GraphicsPath Create(Rectangle rect)
{ return Create(rect.X, rect.Y, rect.Width, rect.Height); }
private void pictureBoxMax_Click(object sender, EventArgs e)
{
}
}
exlord
دوشنبه 23 اسفند 1389, 19:44 عصر
شما اومدین توی اونت Paint آبجکت های جدید ساختین از اونجایی که اونت Paint خیلی زیاد اجرا میشه این کارتون باعث کند شدن اجراش میشه ...
توی خیلی از اونایی که تازه دارن با paint کار میکنن دیدم که چون فکر میکنن paint فقط 1 بار اجرا میشه ... مثل یه متد معمولی باهاش رفتار میکنن و همه object هاشونو اونتو میسازن ...
Rectangle rectBar = new Rectangle();
rectBar = this.Bounds;
GraphicsPath path = null; // in 3 khate balayi aslan lazem nist
Pen p = new Pen(Color.FromArgb(128, 127, 250)); // pen nabayd inja sakhte beshe tu form besazin va inja fagat estefade konin
path = Create(0, 0, rectBar.Width - 2, rectBar.Height - 2, 10); // path ro ham age lazem darin bazam ye jaye sabet besazin va inja fagat estefade konin
اینارو اصلا واصه چی استفاده کردین ؟
e.Graphics.SetClip(path);
e.Graphics.ResetClip();
اینم border :
private void BaseForm_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawPath( p,gp);
}
شما اگه کنترل های زیادی داشته باشی و داخل اونها هنگام لود فرم دیتا بریزی فرم نرم باز نمیشه
دیتاتو توی background لود کن
ahmadi.edu
چهارشنبه 25 اسفند 1389, 11:20 صبح
شما اومدین توی اونت Paint آبجکت های جدید ساختین از اونجایی که اونت Paint خیلی زیاد اجرا میشه این کارتون باعث کند شدن اجراش میشه ...
توی خیلی از اونایی که تازه دارن با paint کار میکنن دیدم که چون فکر میکنن paint فقط 1 بار اجرا میشه ... مثل یه متد معمولی باهاش رفتار میکنن و همه object هاشونو اونتو میسازن ...
Rectangle rectBar = new Rectangle();
rectBar = this.Bounds;
GraphicsPath path = null; // in 3 khate balayi aslan lazem nist
Pen p = new Pen(Color.FromArgb(128, 127, 250)); // pen nabayd inja sakhte beshe tu form besazin va inja fagat estefade konin
path = Create(0, 0, rectBar.Width - 2, rectBar.Height - 2, 10); // path ro ham age lazem darin bazam ye jaye sabet besazin va inja fagat estefade konin
اینارو اصلا واصه چی استفاده کردین ؟
e.Graphics.SetClip(path);
e.Graphics.ResetClip();
اینم border :
private void BaseForm_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawPath( p,gp);
}
دیتاتو توی background لود کن
بازم اول تشکر فراوان دارم که پیگیر این مشکل من هستید و براش وقت گذاشتید.چند نکته رو میخواستم بگم
اول اینکه من میدونم رویداد paint فقط یک بار اجرا نمیشه حتی قبل از اینکه بخوایم برنامه رو اجرا کنیم فقط برای دیدن designer فرم هم این رویداد اجرا میشه، اما در زمان اجرای پروژه خیلی هم اجرا نمیشه . بعدش هم اون چندتا ابجکتی که من new کردم اصلا برای سرعت کامپیوتر های امروزی چیزی نیست که برنامه بخواد سر اونا سرعتش پایین بیاد. ایکی ثانیه اون رویداد رو رد میکنه، در این شکی نیست.
2. همونطور که گفتم نمونه کدهایی که شما به من دادی و میگی از نظر منطقی بهتر و قشنگتر است اما در سرعت تاثیری نداره.
3. من اون فایلی که گذاشتی رو ندیدم چون برنامشو الان ندارم(تو مسافرتم).ولی اگه منظورت استفاده از thread هست ، خوب من همون موقعی که فرمم باز میشه میخوام اطلاعاتم رو ببینم. بعدش هم میدونم تاثیری نداره، چون یک بار تست کردم، من فکر میکنم این مشکل، مشکل render گرافیکی فرم هاست ، یه دستوری ، تابعی، اگه باشه که بشه سرعتش رو بیشتر کرد خیلی خوبه.
4. راستی من اینکه گفتم ممکنه داخل textbox هام داده باشه، خودم همچین مشکلی رو ندارم، مشکل من لود کنترل هایی است که در اونها عکسه. البته بازم thread رو یک بار دیگه با دقت بیشتری انجام میدم، ولی چشمم اب نمیخوره.
راستی اگه تو نمایش فرمها از یک effect استفاده کنیم اصلا همچین مشکلی به چشم نمیاد ولی میخوام ببینم راه منطقی داره یا نه.
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.