كيفية إبقاء زر Delphi TSpeedButton مضغوطًا إذا كان هو الوحيد في المجموعة

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

  •  03-07-2019
  •  | 
  •  

سؤال

لست متأكدًا من سبب امتلاك TSpeedButton لهذه الخاصية، ولكن عندما يكون TSpeedButton هو الزر الوحيد في فهرس مجموعة معين، فإنه لا يظل مضغوطًا، سواء تم الضغط على "AllowAllUp" أم لا.ربما يكون التحكم في Jedi كافيًا، ولكن نأمل أن يكون هناك بعض الإصلاح.هي موضع تقدير أي مساعدة أو الحكايات.

راجع للشغل، أنا (لا أزال) أستخدم دلفي 7، ولست متأكدًا مما إذا كان هذا لغزًا شاملاً.

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

المحلول

وليس لدي أي D7 هنا، ولكن في D2006 وSpeedbutton يبقى أسفل إذا كان GroupIndex له قيمة> 0.

وإذا لم يكن هذا السلوك الذي ترغب في ذلك، يمكنك تعيين اسقاط الملكية يدويا في عند_النقر-Eventhandler (تأكد من أن GroupIndex هو 0).

نصائح أخرى

لقد حاولت ذلك للتو في دلفي 7 (النسخة 4.453):

  • إنشاء تطبيق جديد
  • يضيف TSpeedButton لتشكيل
  • تعيين AllowAllUp := true;
  • تعيين GroupIndex := 1;
  • تشغيل التطبيق

عند النقر على الزر، يقوم بتبديل حالته السفلية دون الحاجة إلى أي رمز آخر.

وknight_killer هو الصحيح. استطيع ان اقول لكم انه سوف يعمل في أي إصدار من دلفي:

object SpeedButton1: TSpeedButton
  Left = 152
  Top = 384
  Width = 23
  Height = 22
  AllowAllUp = True
  GroupIndex = 99
end

ودلفي لا عمل لك حتى "لا أكتب أي CODE".

في IDE تحديد ALL من SpeedButtons بأنك تريد أن تعمل كمجموعة ثم قم بتعيين كله مجموعة "GroupIndex" إلى شيء آخر غير "0" وانت القيام به - مع NO CODE - NADA !!

وجلالة الملك، غريب، أتذكر استخدام هذا مرات قليلة جدا بالنجاح. ربما عليك أن تحاول اللعب مع الملكية Down وSpeedButton على ذلك؟ أنا لا أعتقد أنه تبديل تلقائيا عند النقر فوقه --- يجب تبديل صراحة Down، أعتقد ...

[عدل: Checked استبدال Down --- TSpeedButton ليس لديها خاصية Checked، آسف]

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

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
  MyBoolProperty := not MyBoolProperty;
  SpeedButton1.Down := MyBoolProperty;
end;

وهو خدعة لتعيين GroupIndex إلى قيمة فريدة ومجموعة AllowAllUp إلى true. إذا كنت قد نسيت الأولى، فإنه لن البقاء باستمرار، إذا كنت قد نسيت الثانية، فإنه لن البقاء حتى مرة واحدة كانت عليه.

وتعيين AllowAllUp إلى True.

وتعيين GroupIndex بعدم 0.

لإبقاء كل شيء في عند_النقر، حاول

 with Speedbutton1 do
 begin
      if tag = 1 then tag := 0 else tag := 1;
      down := (tag = 1);
 end;

والجماعات GroupIndex الأزرار. قد تكون أزرار واحد فقط في المجموعة النشط. كل منهم يحتاج إلى نفس المؤشر أعلى من 0.

وAllowAllUp يسمح للتبديل زر أسفل ثم لأعلى عند النقر النتيجة 2 مرات على التوالي.

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

AllowAllUp := True; 
GroupIndex := 1;

وبعد ذلك في حال OnClick زر كتبت:

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
  if( SpeedButton1.AllowAllUp ) then 
  begin 
    SpeedButton1.AllowAllUp := False; 
    SpeedButton1.Down := True; 
  end else 
  begin 
    SpeedButton1.AllowAllUp := True; 
    SpeedButton1.Down := False; 
  end; 
end;

وهذا تبديل زر أسفل عندما يتم النقر عليها وحتى عندما يتم النقر عليه مرة أخرى.

والأمل أنه سوف يكون من أي مساعدة

وتعيين AllowAllup إلى true، وصولا الى كاذبة.

وبعد ذلك في حالة OnClick:

....
btn.AllowAllUp := not btn.AllowAllUp;
btn.Down       := not btn.Down;
....
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top