PDA

View Full Version : سوال: مشکل در تغییر مکان فرم در سیستم دیگر!؟



mbshareat
شنبه 10 مهر 1389, 19:55 عصر
بنده یه فرم دارم که توش یه TImage گذاشتم.برنامه طوری عمل می کنه که قسمت بالای تصویر که شکل نوار عنوان داره رو می تونیم با ماوس بگیریم و فرم رو که لبه نداره و رنگ خاصی از اون نامرئی شده رو با در حرکت ماوس جابجا کنیم


این هم از کد مورد نظر:متفکر::

Var
ScrollForm: TScrollForm;
PicMouseX,PicMouseY:SmallInt;
PicMouseDown:Boolean;
implementation
procedure TScrollForm.FormPicMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
If PicMouseDown=True then
Begin
Left:=Left+(Mouse.CursorPos.X-PicMouseX);
Top:=Top+(Mouse.CursorPos.Y-PicMouseY);
PicMouseX:=Mouse.CursorPos.X;
PicMouseY:=Mouse.CursorPos.Y;
End;
End;
procedure TScrollForm.FormPicMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
T:TEdit;
begin
If Y<30 then
Begin
PicMouseDown:=True;
PicMouseX:=Mouse.CursorPos.X;
PicMouseY:=Mouse.CursorPos.Y;
End;
End;
procedure TScrollForm.FormPicMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
PicMouseDown:=False;
end;


منطق برنامه درست به نظر می رسه و توی کامپیوتر خونه درست جواب می ده اما در محل کار فرم از مکان نما جا می مونه!:ناراحت:
تفاوت سیستم خونه و محل کارم هم اینه که برنامه تو خونه سریعتر و تو مونیتور CRT و تو محل کار با سرعت یک چهارم و تو مونیتور LCD اجرا می شه.
من با گذاشتن دو تا Label بعضی مقادیر رو هم بررسی کردم اما دلیل این نقص اجرا رو نفهمیدم.:اشتباه:
(اگه به کدی که نوشتم نگاه کنید می بینید سرعت نمی تونه نقشی در اجرای صحیح برنامم داشته باشه)
البته مشکل دیگه ای هم تو برنامه داشتم که تو تاپیک
http://barnamenevis.org/forum/showthread.php?t=250670
مطرح کردم.
کسی راهی به ذهنش نمی رسه؟:گیج:
(خواهش می کنم اگه راهی در نظر ندارین فقط یه سوال به تاپیک اضافه نکنین:خجالت:.)
------------
گر صبر نمایی ز غوره حلوا سازی!!!

Felony
شنبه 10 مهر 1389, 21:47 عصر
کد مشکلی نداره ، بررسی کنید ببینید جایی دیگه ای تو برنامتون مشکلی نیست ؟
اگر جای دیگه ای مشکلی نبود یه نمونه برنامه که این مشکل رو داشته باشه رو ضمیمه کنید .

mbshareat
یک شنبه 11 مهر 1389, 12:55 عصر
با سلام و عرض ادب
من که گفتم کد بدون مشکل تو سیستم خونه اجرا می شه!:بامزه:
کد برنامم رو نمی تونم بذارم چون برنامم هم کمی پیچیدست هم فایلهای تصویری جانبی زیادی می خواد.:گیج:
فقط اینو بگم که همین کد رو تو یه برنامه که هیچ کاری جز جابجایی فرم به این روش انجام نمی داد هم امتحان کردم باز هم همین مشکل رو داشت ولی تفاوت جا موندن کمتر بود!(شاید چون تصویر استفاده شده در برنامه ساده ام به مراتب کوچکتر بود و برنامه سریعتر اجرا می شد:متفکر:)
خواهش می کنم یه نفر جواب درست و حسابی بده چون برنامم کامل شده فقط همین یه مشکل رو داره که البته تو سیستم دوستم که برنامم رو کمی سریعتر اجرا می شه هم بروز می کنه!:اشتباه:
-------
با خدا باش پادشاهی کن بی خدا باش هر چه خواهی کن!!!

Felony
یک شنبه 11 مهر 1389, 17:13 عصر
خوب بهتره MessageHandler فرم رو بازنویسی کنید ، یه نمونه برنامه نوشتم و ضمیمه کردم ، برنامه ضمیمه رو ببینید .
این برنامه هم همون مشکلی که گفتید رو داره ؟

mbshareat
یک شنبه 11 مهر 1389, 19:59 عصر
جناب آقای مجتبی تاجیک :قلب:
برنامتون رو اجرا کردم نکته جدید هم داشت اولش خوشحال شدم. اما این خوشحالی دیری نپایید.
transparent رو برای فرم تنظیم کردم و باز همون مشکل...:ناراحت:
من از تایمر هم استفاده کردم بازم جواب نگرفتم!:افسرده:
خواهش می کنم یه کد کارآمد برام بذاریم چون خیلی دوست دارم شکل فرم لبه گرد و با طراحی خودم باشه.نمی دونم روش دیگه برای تعریف ناحیه نمایش فرم یعنی تعریف RGN هم تاثیر داره یا نه البته کد تعریف ناحیه با توجه به رنگ داخل بیت مپ رو بلد نیستم!:بامزه:

Felony
یک شنبه 11 مهر 1389, 20:19 عصر
خواهش می کنم یه کد کارآمد برام بذاریم
کد کارامد یعنی چی ؟
شما اومدی یه مشکل رو مطرح کردی که چیز معمولی نیست ، بهتم میگم نمونه بزار میگی نمیشه ، پسر خوب یه نمونه برنامه درست کن که این مشکل رو داشته باشه و قرار بده شاید مشکل کار پیدا شد .

mbshareat
یک شنبه 11 مهر 1389, 21:05 عصر
جناب آقای مجتبی تاجیک:قلب: معذرت می خوام.
حواسم نبود که صحبتم رو می شه گوشه کنایه هم در نظر گرفت.:بامزه:
در هر صورت ممنونم.مشکلم رو خودم حل کردم فقط هنوز هم نفهمیدم مشکل از کجا بود .
کد برنامه رو ساده تر کردم(قبلا هم فهمیده بودم گاهی فاصله بین مختصات متغیر موقتی و محل مکان نما با وجود حرکت ماوس صفر هست!:گیج:)
کد برنامه رو اینجوری تغییر دادم:


procedure TManabeForm.HelpPicMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
If (X>282) and (X<303) and (Y>11) and (Y<32) then
Close;
PicMouseDown:=True;
PicMouseX:=Mouse.CursorPos.X-Left;
PicMouseY:=Mouse.CursorPos.Y-Top;
end;
procedure TManabeForm.HelpPicMouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
begin
If PicMouseDown=True then
Begin
Left:=Mouse.CursorPos.X-PicMouseX;
Top:=Mouse.CursorPos.Y-PicMouseY;
End
....
باز هم معذرت می خوام خودم می دونستم اشکال به وجود اومده غیر متعارفه و شاید کدش رو هم می ذاشتم تو سیستم شما بدون مشکل اجرا می شد.:متفکر: