منزل
Top.Mail.Ru Yandeks.Metrika
المنتدى: "WinAPI";
الأرشيف الحالي: 2002.07.25;
تنزيل: [xml.tar.bz2];

إلى

السحب والإسقاط. مرة أخرى. البحث عن فروع مماثلة


artgamer   (2002-05-19 15:41) [0]

اسمعوا يا سادة. لقد طرحت هذا السؤال بالفعل ، لكنني لم أتلق إجابة ذات مغزى عليه. لذا أسأل مرة أخرى - كيف يمكنني إجراء السحب والإفلات على بعض عناصر النموذج - على سبيل المثال ، لوحة أو SpeedButton. بحثت عن الأسئلة الشائعة على مواقع مختلفة ووجدت نفس السؤال على "مملكة دلفي". الجواب: "النثر
إجراء WMDROPFILES (var رسالة: TWMDROPFILES) ؛ الرسالة WM_DROPFILES ؛
من الضروري أن تكتب ليس في النموذج ، ولكن في خلف TPanel للوحة ، إلخ. "
أو كتب أناتولي بودغوريتسكي: يجب أن يتم ذلك على مستوى النموذج ، وإذا كان من الضروري في الوقت نفسه تحديد أن المؤشر أعلى عنصر معين ، فاحصل على إحداثيات الماوس"وكيف نفعل ذلك؟
أفهم ، ربما سؤالي (ونفسي) يبدو غبيًا ، لكن صدقوني - لن ألهِ أبدًا الناس عن العمل إذا تمكنت من معرفة ذلك بنفسي.
التحيات ، Artgamer.



Song   (2002-05-19 17:09) [1]

بطة هل تريد أن تقول أن WM_DROPFILES لا يعمل عند نقل الملفات إلى نموذج الطلب؟



~Sergius   (2002-05-19 17:36) [2]

قبض على المكون. ستكتشف كيفية القيام بذلك. لا تلومني ، لمدة نصف ساعة استغرق الأمر كله - لكنه يعمل.
على الرغم من أنه في الواقع ، هناك العديد من FAKs حول هذا الموضوع بحيث سيكون من الممكن اكتشافه (علاوة على ذلك ، فإن المبدأ نفسه بسيط جدًا) :-)

وحدة smDropFile ؛ الواجهة يستخدم نوافذ الرسائل ، Sysutils فصول الرسومات ، الضوابط النماذج الحوارات اكتب TOnFileDrop = الإجراء (var filename: string) للكائن ؛ TSmDropFile = class (TComponent) خاص FOldOnAppMessage: TMessageEvent؛ FAcceptExtensions: TStrings؛ FParent: TWinControl ؛ FAcceptAll: منطقي FOnFileDrop: TOnFileDrop؛ FOnWrongFileDrop: TOnFileDrop؛ الإجراء SetAcceptExtensions (القيمة الثابتة: TStrings) ؛ الإجراء OnAppMessage (var Msg: TMsg؛ var Handled: Boolean)؛ الإجراء SetAcceptAll (قيمة القيمة: منطقية) ؛ الإجراء SetOnFileDrop (قيمة الثابت: TOnFileDrop) ؛ الإجراء SetOnWrongFileDrop (قيمة الثابت: TOnFileDrop) ؛ {الإعلانات الخاصة} محمي {الإعلانات المحمية} عام {الإعلانات العامة} إنشاء منشئ (AOwner: TComponent) ؛ تجاوز تدمير المدمرة ؛ تم النشر {الإعلانات المنشورة} الخاصية AcceptExtensions: قراءة TStrings FAcceptExtensions كتابة SetAcceptExtensions؛ الخاصية AcceptAll: قراءة منطقية FAcceptAll كتابة SetAcceptAll؛ الخاصية OnFileDrop: TOnFileDrop قراءة FOnFileDrop كتابة SetOnFileDrop؛ الخاصية OnWrongFileDrop: TOnFileDrop قراءة FOnWrongFileDrop كتابة SetOnWrongFileDrop؛ نهاية ؛ سجل الإجراءات ؛ التنفيذ {$ R SMDROPFILE.RES} يستخدم ShellAPI ؛ سجل الإجراءات ؛ تبدأ مكونات التسجيل ("skaminski" ، [TSmDropFile]) ؛ نهاية ؛ {TSmDropFile} منشئ TSmDropFile.Create (AOwner: TComponent) ؛ تبدأ خلق الموروثة (AOwner) ؛ FAcceptExtensions: = TStringList.Create؛ FParent: = لا شيء ؛ إذا كان AOwner هو TForm ثم FParent: = AOwner as TForm ؛ إذا كان csDesigning في ComponentState إذن FAcceptAll: = صحيح ؛ DragAcceptFiles (FParent.Handle، True) ؛ // السماح للنموذج الأصلي بقبول الملفات FOldOnAppMessage: = Application.OnMessage؛ // تذكر المعالج القديم! Application.OnMessage: = OnAppMessage؛ // قبول جميع رسائل Windows نهاية ؛ المدمر TSmDropFile.Destroy؛ تبدأ Application.OnMessage: = FOldOnAppMessage؛ FAcceptExtensions.Free ؛ تدمير الموروثة. نهاية ؛ الإجراء TSmDropFile.OnAppMessage (var Msg: TMsg؛ var Handled: Boolean)؛ var acfilename: صفيف [0..255] من الحرف ؛ s: سلسلة i: عدد صحيح ؛ تبدأ إذا (Msg.message = WM_DROPFILES) و (Msg.hwnd = FParent.Handle) إذن تبدأ تمت مناولته: = صحيح ؛ ملف السحب (msg.wParam، 0، acfilename، 255) ؛ إذا (FAcceptAll) أو (FAcceptExtensions.IndexOf (UpperCase (ExtractfileExt (acfilename))))) <> -1) ثم تبدأ إذا تم تعيينه (FOnFileDrop) بعد ذلك تبدأ ق: = اسم acfilename ؛ FOnFileDrop (s) ؛ نهاية ؛ النهاية آخر إذا تم تعيينه (FOnWrongFileDrop) بعد ذلك تبدأ ق: = اسم acfilename ؛ FOnWrongFileDrop (s) ؛ نهاية ؛ السحب (msg.w بارام) ؛ النهاية آخر تمت مناولته: = خطأ ؛ // دع نفسك تطير أبعد ... نهاية ؛ الإجراء TSmDropFile.SetAcceptAll (قيمة القيمة: منطقية) ؛ تبدأ FAcceptAll: = القيمة ؛ نهاية ؛ الإجراء TSmDropFile.SetAcceptExtensions (القيمة الثابتة: TStrings) ؛ var i: عدد صحيح ؛ تبدأ بالنسبة إلى i: = 0 إلى Value.Count تبدأ القيمة [i]: = UpperCase (القيمة [i]) ؛ نهاية ؛ FAcceptExtensions.Assign (القيمة) ؛ نهاية ؛ الإجراء TSmDropFile.SetOnFileDrop (قيمة القيمة: TOnFileDrop) ؛ تبدأ FOnFileDrop: = القيمة ؛ نهاية ؛ الإجراء TSmDropFile.SetOnWrongFileDrop (القيمة الثابتة: TOnFileDrop) ؛ تبدأ FOnWrongFileDrop: = القيمة ؛ نهاية ؛ النهاية.




Lady BadnBadn   (2002-05-19 18:02) [3]

اكتب الوريث ولا تزعج نفسك



artgamer   (2002-05-19 18:16) [4]

> أغنية
بطة هل تريد أن تقول أن WM_DROPFILES لا يعمل عند نقل الملفات إلى نموذج الطلب؟
لا ، أنا لا أقول ذلك. عندما أقوم بنقل الملفات إلى نموذج التطبيق يعمل WM_DROPFILES ، ولكن عندما أقوم بنقل الملفات إلى اللوحة الموجودة في نموذج الطلب - لا يحدث شيء!
> سيدة بادنبدن
اكتب الوريث ولا تزعج نفسك
كيف ذلك؟



Song   (2002-05-19 18:23) [5]

في معالج WM_DROPFILES ، اقرأ إحداثيات الماوس واحفظها بإحداثيات SpeedButton (اترك الحيز لارتفاع وعرض الزر). إذا كانت المقارنة صحيحة ، فسيتم نقل التحويل إلى TSpeedButton. هذا ما يدور في ذهنه أناتولي بودغوريتسكي.



artgamer   (2002-05-19 21:02) [6]

> أغنية
ربما لا أفهم شيئًا ، ولكن كيف يمكنني قراءة إحداثيات الماوس من معالج WM_DROPFILES إذا لم يتم استدعاء WM_DROPFILES هذا؟



Song   (2002-05-19 21:05) [7]

نعم ، يجب مراعاة الرسالة ومتى تحدث. قراءة إحداثيات الماوس - GetCursorPos ()



Song   (2002-05-19 21:52) [8]

لقد نسيت أن أضيف "لا" بين "نعم" و "ج" :))



~Sergius   (2002-05-20 03:53) [9]

يبدو أن الموضوع قد تم إغلاقه بالفعل.
نموذج WM_DROPFILES يمسك النموذج. في معالج هذا الحدث ، نحدد كيفية مسح إحداثيات الماوس بالفعل. وبواسطة هذه الإحداثيات ، نحدد التحكم في المؤشر. كل شيء!



artgamer   (2002-05-20 22:05) [10]

اوه! تعذبت! "في معالج الأحداث ، في معالج الأحداث." وربما لا أعرف ما هو. وكيف أحسب عند ظهور رسالة ، إذا لم تصل الرسالة على الإطلاق؟ حسنًا ، سأتسلق FMDrop من أدوات LMD وأتبع مثال سرجيوس - ربما سأكتشف كيف يعمل هذا shnyaga.
ولكن شكرا على أي حال لمحاولتك المساعدة. كود ~ Sergius مناسب لي ، ولكنه صحي للغاية - البرنامج يحتوي على حد 9000 سطر ، ولدي بالفعل 8700 وكل شيء ينمو :). بشكل عام ، يمكن اعتبار الموضوع مغلقًا بالفعل ، وألتزم رسميًا بهذا السؤال لم يعد يثير! شكرا مرة أخرى - وليلة سعيدة.



Anatoly Podgoretsky   (2002-05-20 22:17) [11]

يمكنني معرفة ما إذا كانت الرسالة لم تصل ، ثم شيء ما يمنعها. في الوقت نفسه ، إنه شيء غريب ، فحص على وجه التحديد ، ألقى الملفات على SpeedButton الموجود على اللوحة ، كل شيء على ما يرام ، الأمر غير قياسي.



artgamer   (2002-05-20 23:03) [12]

> اناتولي بودغوريتسكي
شكرا لك!



صفحات: 1 فرع كامل

المنتدى: "WinAPI";
الأرشيف الحالي: 2002.07.25;
تنزيل: [xml.tar.bz2];

الطابق العلوي





الذاكرة: 0.59 ميغابايت
الوقت: 0.034 ج
14-81452
JohnnyJ
2002-06-23 04:18
2002.07.25
<<< F U T B O L >>>


14-81474
ريكس
2002-06-29 01:35
2002.07.25
تنسيق PNG


1-81221
Yurko
2002-07-10 03:57
2002.07.25
الحافظة


14-81451
VictorT
2002-06-27 14:54
2002.07.25
نكتة


3-81192
كنغر
2002-07-04 20:02
2002.07.25
تغيير البيانات في الدليل ، وعرضها في الجداول.





الأفريكانية الألبانية عربي الأرميني أذربيجان الباسكي البيلاروسية Bulgarian التشيكية الصينية المبسطة) تقاليد صينية) الكرواتية التشيكية دانماركي Dutch English الإستونية الفلبينية Finnish جيب
الجاليكية الجورجية الألمانيّة اليونانيّة الكريولية الهايتية اللغة العبرية الهندية الهنغارية أيسلندي Indonesian الأيرلندية Italian اليابانيّة الكوريّة اللاتفية اللتوانية المقدونية الملايو المالطية Norwegian
اللغة الفارسية بولنديّة البرتغاليّة رومانية Russian صربي السلوفاكيّة سلوفيني إسباني السواحيلي Swedish Thai التركية الأوكراني الأردية الفيتنامية ويلزي اليديشية البنغالي البوسنية
السيبيونو الاسبرانتو الغوجاراتية الهوسا همونغ الإيبو جاوي الكانادا الخمير لاو لاتينية الماوري المهاراتية المنغولية النيبالية البنجابية الصومالية التاميل التيلجو اليوروبا
زولو
Английский Французский ألماني Итальянский البرتغالية Русский Испанский