كيفية إبقاء زر Delphi TSpeedButton مضغوطًا إذا كان هو الوحيد في المجموعة
سؤال
لست متأكدًا من سبب امتلاك 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;
....