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

إلى

حظر طرق الأحداث * البحث عن فروع مماثلة


Ученик   (2002-07-16 08:43) [0]

يوجد مصمم نماذج ، على سبيل المثال من مكتبة الإرشاد (http://www.delphikingdom.com/mastering/poligon/extlib.htm)
نفذت في وقت التشغيل ، وضعت على النموذج
PageControl ، في وضع تصميم النموذج ، عند تحديد صفحات PageControl بالماوس ، يجب حظر المكالمة إلى طريقة TPageControl.OnChange وغيرها.
هل هناك طريقة عالمية لمنع استدعاء أساليب أحداث الكائنات في RunTime؟



GenBr   (2002-07-16 08:56) [1]

حسنًا ، ربما يكون YourComponent.YourEvent = لا شيء ؛



Anatoly Podgoretsky   (2002-07-16 09:08) [2]

إذا كان csDesigning في ComponentState أمرًا طبيعيًا في كل معالج تحتاجه
أو هل تتحدث عن RunTime ، فالخاصية في الواقع هي عكس: = nil؛



Ученик   (2002-07-16 09:16) [3]

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



NickBy   (2002-07-16 16:44) [4]

من خلال RTTI تحصل على قائمة بجميع أحداث الكائن وتعيين لا شيء للمؤشرات.
يُنصح بالاحتفاظ بالمؤشرات القديمة قبل إعادة التعيين في حال احتجت إلى إزالة النموذج من وضع التحرير في المستقبل.



Ученик   (2002-07-16 17:26) [5]

> نيكي
شكرا ، لا يوجد علم ، هل من المثير للاهتمام أن دلفي يفعل ذلك أيضا ، أم أنه مختلف تماما هناك؟



Skier   (2002-07-16 17:35) [6]

> تلميذ
يمكن إزالة علامة csDesigning في وقت التشغيل.
على الرغم من أن هذا هو النهج القبيح ...



Anatoly Podgoretsky   (2002-07-16 17:41) [7]

الطالب (16.07.02/09/16 XNUMX:XNUMX)
هذه فقط الطريقة الصحيحة وتم تصميم هذه العلامة خصيصًا لهذا الغرض ، وقت تصميم حل النزاع
لكنني ما زلت لا أفهم ما هو الوقت الذي يتعلق به disign مقابل وقت التشغيل



Юрий Зотов   (2002-07-16 18:55) [8]

بما أنك تريد استخدام آليات تصميم وقت "دلفي نفسها - لذا استخدمها حتى النهاية. أقصد ، عليك أن تفعل نفس الشيء مثل IDE نفسه.

استدعاء واحد إلى SetDesigning (True، True) للنموذج بالكامل يحل المشكلة. في النهاية - SetDesigning (خطأ ، صحيح) لها.



Skier   (2002-07-16 18:57) [9]

> يوري زوتوف
أقصر - SetDesigning (True) و SetDesigning (False) :)



Ученик   (2002-07-16 19:05) [10]

> يوري زوتوف
إذا كان هذا الأمر مناسبًا لي ، فهذا هو ما يتم استخدامه في مصممي النماذج ، وكان الأمر يتعلق بمنع استدعاء أساليب الحدث طوال مدة تصميم نموذج المستخدم ، والذي حدده المطور عند تطوير البرنامج.



Юрий Зотов   (2002-07-16 20:32) [11]

> Skier © (16.07.02 18: 57)
تمت الإشارة إلى المعلمة الافتراضية على وجه التحديد - للتأكيد عليها.

> المتدرب (16.07.02/19/05 XNUMX:XNUMX م)
ما تمت مناقشته ، فهمت. هل حاولت استخدام ما كتبته في المنزل؟ محاولة إعطائها. إذا كان المصمم الذي تستخدمه مكتوبًا بشكل صحيح ، فهذا يحل المشكلة.



Ученик   (2002-07-16 21:18) [12]

> يوري زوتوف
إذا لم يزعجك ذلك ، فكيف تكتب مصمم نماذج بشكل صحيح ، إذا كانت الشروط كما يلي:

في نموذج PageControl يحتوي على عدة صفحات ، حدد المطور حدث TPageControl.OnChange ، على سبيل المثال

الإجراء TForm1.PageControl1Change (المرسل: TObject) ؛
بدأ
ShowMessage ("PageControl1Change")
الغاية؛

ينتقل المستخدم إلى وضع تصميم النموذج ، أي يتم استدعاء TFriendForm (Self) .SetDesigning (True، True) ويتم تعريف Form1.Designer ، وينقر المستخدم على علامة التبويب الثانية من PageControla ، يجب أن يتم تبديل الصفحة ، ولكن يجب ألا تظهر الرسالة "PageControl1Change" ،
كيف يحدث في دلفي.



Юрий Зотов   (2002-07-16 21:53) [13]

> كيف تكتب مصمم النماذج

هل تكتب المصمم الخاص بك؟ أو هل ما زلت تستخدم واحدة جاهزة من مكتبة الإرشاد؟

إذا كان لك ، أنصحك بإنهاء هذا الدرس واستخدامه ، على سبيل المثال ، حزمة Dream Controls. لماذا ترك العمل - سوف تفهم بنفسك من خلال النظر في هذه الحزمة. سوف يعمل شخص واحد هناك لمدة عام تقريبًا - وحتى ذلك الحين ، شريطة أن يعرف بالفعل كل شيء أو كل شيء تقريبًا عن مطبخ دلفي.

إذا كان جاهزًا ، فماذا يعني سؤالك "كيفية الكتابة"؟ هو مكتوب بالفعل. لسوء الحظ ، أنا لست على دراية بالمصمم من Extension Library ، لا أستطيع أن أقول أي شيء عنه.

ولكن إذا كان المصمم ، بصرف النظر عن ذلك ، ينشئ بيئة وقت التصميم بشكل صحيح ، فيجب أن يعمل SetDesigning. بالنسبة لجميع أحداث جميع المكونات - لا يوجد عنصر تحكم PageControl له علاقة به.



Ученик   (2002-07-16 22:01) [14]

> يوري زوتوف
شكرا لك ، لكن هذا ليس جوابا ، لكنه مؤسف.



Юрий Зотов   (2002-07-17 09:25) [15]

هذا هو الجواب الذي يمكن تقديمه لمثل هذا السؤال:
> "كيفية كتابة مصمم النموذج بشكل صحيح ، إذا كانت الظروف
> ما يلي: (يشار إليها فيما يلي بتعطيل PageControl.OnChange) "

أولاً ، ما علاقة PageControl و OnChange به؟ يتم قطع الاتصال إما دفعة واحدة (كل أحداث جميع المكونات)) ، أو لا شيء. هذا مصمم.

ثانياً ، ليس من الواضح ما إذا كنت تكتب المصمم الخاص بك ، أو تستخدم المصمم النهائي ، من مكتبة الإرشاد.

ثالثًا ، إذا لم يكن المصمم (المصمم الخاص بك ، أو انتهى - لا يهم) غير ملتوي ، فإن SetDesigning يحل المشكلة (على الرغم من الناحية النظرية ، كان على المصمم نفسه أن يفعل ذلك). إذا كان المنحنى - لا شيء لا يمكنك إيقاف.

رابعًا ، ماذا تعني عبارة "كيفية كتابة مصمم نماذج"؟ سوف تسأل على الفور - "كيف تكتب دلفي الخاص بك." ما هو هناك أشياء صغيرة؟ وأود أن أقول بسرعة ، في حوالي 15 دقيقة وخطوط في 100 ، كيف يتم ذلك. تافه ، أليس كذلك؟ وبالطبع ، أنا أعرف هذا جيدًا - بعد كل شيء ، كتب دلفي بالفعل أكثر من واحد (على الرغم من أنه كتب واحدًا ، وهو مبسط جدًا).

لذلك ، وبالنظر إلى هذه الصيغة من السؤال ، قلت: "إذا كتبت مصممًا بنفسك ، فقم بإسقاطه". آمل أن يكون الأمر واضحًا لماذا؟

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

وماذا يمكن الإجابة عن هذا السؤال؟



Ученик   (2002-07-17 09:45) [16]

> يوري زوتوف
على الأقل من أجل الحشمة ، نظرت إلى الكود المصدري ، لا يمكنك الإجابة - كما قلت من قبل: أنا مرر ، لماذا أكون ذكيًا.



MAxiMum   (2002-07-17 10:49) [17]

يا رفاق ، وفي رأيي ، أنتما على حق في التحدث بلغات مختلفة فقط. استمع لبعضها البعض ولا تقسم.



Skier   (2002-07-17 11:18) [18]

> تلميذ
كتبت مصمم النموذج الخاص بي.
لذا ، إذا كان لديك أسئلة ، سأحاول الإجابة ...



Ученик   (2002-07-17 11:29) [19]

> المتزحلق
في نموذج PageControl يحتوي على عدة صفحات ، حدد المطور حدث TPageControl.OnChange ، على سبيل المثال

الإجراء TForm1.PageControl1Change (المرسل: TObject) ؛
بدأ
ShowMessage ("PageControl1Change")
الغاية؛

ينتقل المستخدم إلى وضع تصميم النموذج ، أي يتم استدعاء TFriendForm (Self) .SetDesigning (True، True) ويتم تعريف Form1.Designer ، وينقر المستخدم على علامة التبويب الثانية من PageControla ، يجب أن يتم تبديل الصفحة ، ولكن يجب ألا تظهر الرسالة "PageControl1Change" ،
كيف يحدث في دلفي.




Skier   (2002-07-17 11:50) [20]

> تلميذ

تحتاج إلى كتابة المعالج التالي لمصممك
(والتي سوف "راحة اليد" بدلاً من IDesigner)

الدالة TSomeClass.IsDesignMsg (المرسل: TControl؛ var Message: TMessage): Boolean؛ بدأ WM_MOUSEFIRST..WM_MOUSELAST: تبدأ // .......................... النتيجة: = MouseMessage (مرسل ، رسالة) ؛ // .......................... ينتهي. // WM_MOUSEFIRST .. ينتهي.

طريقة MouseMessage (مع بعض المتغيرات الداخلية الخاصة بي ،
كسول جدا لتنظيف :))

الدالة TSomeClass.MouseMessage (ASender: TControl؛ رسالة رسالة: TMessage): منطقية. / / هذا "كعكة" سوف "تبديل" صفحات PageControl // (في حالتنا) الدالة DispatchDesignHitTest (المرسل: TControl ؛ الرسالة: TWMMouse): Boolean؛ بدأ Message.Msg: = CM_DESIGNHITTEST؛ Message.Result: = 0؛ Sender.Dispatch (رسالة) ؛ النتيجة: = (Message.Result <> 0) ؛ ينتهي. // DispatchDesignHitTest فار AShift: TShiftState ؛ ADesignMessage: Boolean؛ بدأ النتيجة: = FRubberBandPainting ؛ إن لم يكن النتيجة ثم تبدأ ADesignMessage: = DispatchDesignHitTest (ASender ، TWMMouse (رسالة))؛ النتيجة: = النتيجة أم لا ADesignMessage ؛ ينتهي. // إذا AShift: = KeysToShiftState (TWMMouse (رسالة). المفاتيح) ؛ رسالة القضية WM_LBUTTONDOWN ، WM_LBUTTONDBLCLK ، WM_RBUTTONDOWN: تبدأ إذا كانت النتيجة و (Message.Msg = WM_LBUTTONDOWN) ، FDesignHitDispatched: = خطأ آخر FDesignHitDispatched: = True؛ DesignMouseDown (ASender ، GetMouseButton (Message.Msg) ، AShift ، TWMMouse (رسالة) .XPos ، TWMMouse (رسالة) .YPos) ؛ ينتهي. // WM_LBUTTONDOWN WM_MOUSEMOVE: ابدأ DesignMouseMove (ASender ، AShift ، TWMMouse (رسالة) .XPos ، TWMMouse (رسالة) .YPos) ؛ ينتهي. // WM_MOUSEMOVE WM_LBUTTONUP ، WM_RBUTTONUP: تبدأ DesignMouseUp (ASender ، GetMouseButton (Message.Msg) ، AShift ، TWMMouse (رسالة) .XPos ، TWMMouse (رسالة) .YPos) ؛ ينتهي. // WM_LBUTTONDOWN ينتهي. // القضية ينتهي.



Ученик   (2002-07-17 11:57) [21]

> Skyer
لكن الرسالة "PageControl1Change" لا تظهر؟
بالتأكيد نفس المكون في لوحة ، إن لم يكن من الصعب محاولة (هؤلاء).



Skier   (2002-07-17 12:01) [22]

> تلميذ
أدرك أنك تريد كتابة مصمم نماذج "بنقرتين
الفئران "وما زلت تريد مني العمل من أجلك!
آسف ، بالطبع ، لكن في هذه الحالة ، أسحب نفسي ...



Ученик   (2002-07-17 12:07) [23]

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



Skier   (2002-07-17 12:12) [24]

> تلميذ
نعم ، لم أشعر بالإهانة :)
هل لديك الفرصة في المصمم لكتابة الخاصة بك
معالجات الحدث؟ (لغة ​​الماكرو الخاصة أو شيء من هذا؟)



Ученик   (2002-07-17 12:16) [25]

> المتزحلق
لم يتم تحديد أي حدث من قبل المطور عند كتابة البرنامج ،
عندما يدخل المستخدم وضع التصميم ، من الضروري تعطيل معالجة الحدث في ؟؟؟؟ ، على سبيل المثال ، يتم أخذ المشكلة مع PageControl ، معالجات الكتابة للمستخدم
الأحداث في مصمم بلدي لا يمكن.



Skier   (2002-07-17 12:19) [26]

> تلميذ
كيف يمكنك قراءة نموذج من ملف من خلال TReader؟



Skier   (2002-07-17 12:23) [27]

> تلميذ


> والرسالة "PageControl1Change" لا تظهر؟



في السعي: إذا كنت "تتداخل" IDesigner والكتابة
معالج IsDesignMsg الخاص بك (كما أظهرت) ، ثم لا ينبغي أن الحدث
يبدو ...



Ученик   (2002-07-17 12:27) [28]

> المتزحلق
إذا كنا نتحدث عن حالة المستخدم من عناصر التحكم في النموذج ، فسيتم قراءتها من ملف INI.



Ученик   (2002-07-17 12:33) [29]

> المتزحلق
وإذا تم "حظر" IDesigner وتم معالجة IsDesignMsg وتعرف DispatchDesignHitTest (أي التناظرية)؟
لهذا السبب طلبت ، ولكن ، على ما يبدو ، دون جدوى)))



Skier   (2002-07-17 12:37) [30]

> تلميذ

> تتم قراءته من ملف .ini

أنصحك بعدم قراءة شكل وحالة الضوابط من ملفات INI ،
من الأفضل كتابة فصول TWriter و TReader الخاصة بك (لقد انتهيت
بالضبط هكذا). بالطبع هناك المزيد من المتاعب ، لكنها ستمنح مرونة جيدة.
والسرعة.
مع هذا النهج ، يمكنك تخزين النماذج في شكل ثنائي ، و
لذلك اكتبها في ملف وفي حقل blob
(قاعدة بيانات tobish).

ثم إذا كنت بحاجة إلى تخزين ، على سبيل المثال ، صورة لـ TImage في ملف INI ، ماذا ستفعل؟

ومن خلال TWriter الخاص بك ، سوف تقوم بتسجيله بهدوء شديد ...




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

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

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





الذاكرة: 0.66 ميغابايت
الوقت: 0.035 ج
14-95532
Alx2
2002-07-03 12:08
2002.07.29
المهمة :)


3-95210
مارتن
2002-07-06 16:19
2002.07.29
HELP !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


3-95194
AndruhaM
2002-07-05 18:34
2002.07.29
كيفية حماية لوحة Paradox الخاصة بك من النسخ


6-95481
DikobraZ
2002-05-11 18:18
2002.07.29
المقبس erro 10057


14-95484
- = CrazyFish = -
2002-06-28 17:33
2002.07.29
معدل من فضلك ...





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