ورود

View Full Version : خطا در جابجا کردن اشیا



idehrayan
دوشنبه 29 دی 1393, 20:40 عصر
سلام خدمت همه اساتید
در زمان اجرا برنامه با کد زیر میشه buttom و edit و... بدون هیچ گونه درد سری جابجا کرد ولی نمی دنم چرا نمیشه با این کد label رو جابجا کرد فکر کنم label هندل مورد نظر پشتیبانی نمیکنه اساتید محترم نظری ندارن؟


procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
ReleaseCapture;
SendMessage(Button1.Handle , $A1, 2, 0);

end;

Mask
سه شنبه 30 دی 1393, 16:10 عصر
از StaticText میتونید استفاده کنید.

idehrayan
سه شنبه 30 دی 1393, 18:05 عصر
سلام mask عزیز از اینکه جواب دادین متشکرم
متاسفانه
StaticText هم جواب نداد ایا کامپوننت دیگه هم هستش که خصوصیت ترنسپارنت داشته باشه
یا روش هست که لیبل رو با موس جابجا کرد البته خودم یک قطعه کد نوشتم ولی به راحتی کد بالا نیست(باید از چندتا رویداد استفاده کنم)

idehrayan
سه شنبه 30 دی 1393, 20:38 عصر
سلام
یه روش برای درگ کردن اشیا پیدا کردم که برای دوستانی که دنبال این قضیه هستن میزارم

ابتدا عنصری که قراره درگ بشه خصوصیت dragmode=dmAutomatic بعد هم از کدهای زیر در فرم استفاده میکنیم


procedure TForm1.FormDragDrop(Sender, Source: TObject; X, Y: Integer);
begin
tform(Source).Left:=x;
tform(Source).Top:=y;
end;


procedure TForm1.FormDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
Accept:=true;
end;

Mask
چهارشنبه 01 بهمن 1393, 10:38 صبح
خوب چون گفتید روش رو بگم و خودتون بنویسید:
برای رفع این مشکل که محدود به استفاده از هیچ کنترلی نباشید ، بهترین و زیباترین راه اینه:
برنامه رو دو حالته میکنید، DesignMode و RunMode .بررسی میکنید ، وقتی برنامه در مد دیزاین بود تمام کنترلهای موجود رو Finde کرده و یک پنل رو به صورت ران تایم به صورت پرنت زیرشون قرار میدید.
سپس خود اون کامپونت رو Align ش رو به صورت Client قرار میدید. سپس به طریق روشهایی که در بالا گفتید ، وقتی پنل رو جابه جا و ریسایز کنید ، خود کنترل مورد نظر هم تغییر میکنه.
بعد از تغییرات لازم و وارد شدن به RunMode همه پنل ها رو Free میکنیم.این بهترین روشی بود که دارم استفاده میکنم. البته یوسف عزیز هم زحمت کشیدند و این عملیات رو به صورت کنترل به کنترل انجام دادند برام(کلا شرمنده مون کرد در حد لالیگا:خجالت:).

دلفــي
چهارشنبه 01 بهمن 1393, 12:57 عصر
سلام خدمت همه اساتید
در زمان اجرا برنامه با کد زیر میشه buttom و edit و... بدون هیچ گونه درد سری جابجا کرد ولی نمی دنم چرا نمیشه با این کد label رو جابجا کرد فکر کنم label هندل مورد نظر پشتیبانی نمیکنه اساتید محترم نظری ندارن؟


procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X,

Y: Integer);
begin
ReleaseCapture;
SendMessage(Button1.Handle , $A1, 2, 0);

end;




procedure TForm1.Label1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
Dummy:TPanel;
begin
with TLabel(Sender) do begin
Dummy:=TPanel.Create(Owner);
Dummy.Parent:=Parent;
Dummy.BevelOuter:=bvNone;
Dummy.Alignment:=Alignment;
Dummy.Caption:=Caption;
Dummy.SetBounds(Left, Top, Width, Height);
Parent.Update;
end;
ReleaseCapture;
Dummy.Perform(WM_SysCommand,$F012,0);
with Dummy do Label1.SetBounds(Left, Top, Width, Height);
Dummy.Free;
end;

BORHAN TEC
چهارشنبه 01 بهمن 1393, 15:08 عصر
با سلام،
پست های قبلی رو نخوندم ولی یک مجموعه کامپوننت به نام cindy components وجود داره که در خصوص جابجایی اشیا قابلیت های خوبی به شما میده. با استفاده از اون حتی میشه یه چیزی مثل Form Designer دلفی رو هم طراحی کرد. این هم از لینک این کامپوننتها که رایگان هم هستند:
http://sourceforge.net/projects/tcycomponents/