كيفية اكتشاف أن الماوس غير متحرك وأن الزر لا يزال مضغوطًا؟

StackOverflow https://stackoverflow.com/questions/692976

سؤال

في دلفي، قمت بإضافة مكون شريط التمرير (الموجه عموديًا) إلى الجانب الأيمن من النموذج الخاص بي.

لقد قمت بإضافة حدث Scrollbar OnChange حتى أتمكن من تغيير عرض النموذج وموضع الإبهام في شريط التمرير عندما ينقر المستخدم على زر UpArrow أو DownArrow بالماوس، ويعمل هذا بشكل جيد.

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

لاحظت أن جميع عناصر التحكم في شريط التمرير تكرر الأمر وتستمر في التمرير بينما يظل الماوس مضغوطًا على السهم، وأرغب في تنفيذ هذا السلوك.

فكيف يمكنني بسهولة اكتشاف ما إذا كان المستخدم لم يحرك الماوس ويستمر في الضغط على زر الماوس بينما يظل الماوس فوق السهم؟


خاتمة.بطريقة ما، حدث تلف في شريط التمرير في مشروعي.بعد أن قمت بحذف ScrollBar، وإضافته مرة أخرى، اختفت المشكلة.

هذه واحدة من تلك المشاكل الصعبة التي استغرقت الكثير من الوقت لحلها.شكرا لمساعدتك.أنا أغلق هذا السؤال.

هل كانت مفيدة؟

المحلول

استخدم ال OnScroll حدث.

يضيف الكود التالي "xxx" إلى المذكرة طالما تم الضغط على زر الماوس في شريط التمرير.تم اختباره مع دلفي 6.

procedure TForm1.ScrollBar1Scroll(Sender: TObject; ScrollCode: TScrollCode;
  var ScrollPos: Integer);
begin
    Memo1.Lines.Add( 'xxx' );
end;

نصائح أخرى

والطريقة المعتادة للتعامل مع لصناعة السيارات في تكرار هو تمكين TTimer وتحقق في OnTimer () معالج الحدث إذا كان الإجراء يحتاج إلى أن يقوم مرة أخرى، و تنشيط جهاز ضبط الوقت إن لم يكن. إذا كنت بحاجة إلى نموذج التعليمات البرمجية، ويبدو لي أن نتذكر أن SynEdit السيطرة استخدمت تقنية مماثلة لautoscrolling في السحب و عمليات الهبوط.

إذا لا أحد مكونات تغليف سلوك كنت تبحث عن وأنت لا يمكن محاكاة بسهولة السلوك مع الطرق المتاحة يجب فئة فرعية حقا أقرب المكون الذي يفعل معظم ما تحتاج اليه وإضافة السلوكيات التي هي في عداد المفقودين.

وأنا أعلم أن بعض العمل الاضافي وتشارك ولكنه في الواقع هو أفضل وسيلة للذهاب. الآن مع دلفي، يبدو لي أن أذكر أن عناصر subclassed تحتاج قليلا من العمل الإضافي وكذلك لتكون قادرة على أن تستخدم من IDE لتصميم النموذج، ربما لم يتغير هذا منذ الإصدار 7.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top