كيفية ضبط القراد المخصص على ttrackbar في Delphi 2010؟
-
23-09-2019 - |
سؤال
حاولت تعيين نمط علامة على Tsmanual و Min و Max إلى 1 و 100 على التوالي وأضيفت القراد في 9 و 19 و 79 و 89 ولا يتم عرض القراد على الإطلاق باستثناء Detault أولاً والأخير الذي يظهره التحكم تلقائيًا. لقد جربت قيمًا أخرى ولم يتم عرض أي منها على الإطلاق. الكود الخاص بي هو:
TrackBar1.TickStyle := tsManual;
TrackBar1.Min := 1;
TrackBar1.Max := 100;
TrackBar1.SetTick( 9 );
TrackBar1.SetTick( 19 );
TrackBar1.SetTick( 79 );
TrackBar1.SetTick( 89 );
أي اقتراحات؟ أنا متأكد من أنني أفتقد تفاصيل مهمة ، والوثائق متناثرة إلى حد ما. هذا في مشروع نماذج VCL فارغ جديد في Delphi 2010 مع Update 4.
شكرا لكم مقدما.
المحلول
TtrackBar.settick () لا يرسل رسالة tbm_settic إذا كانت خاصية المقبض غير معتمدة حاليًا:
procedure TTrackBar.SetTick(Value: Integer);
begin
if HandleAllocated then // <-- here
SendMessage(Handle, TBM_SETTIC, 0, Value);
end;
لا يتم تخصيص مقبض النافذة حتى تتم قراءة خاصية المقبض لأول مرة ، وليس عند إنشاء المكون في البداية. على هذا النحو ، استدعاء اليد () قبل استدعاء Settick ():
TrackBar1.TickStyle := tsManual;
TrackBar1.Min := 1;
TrackBar1.Max := 100;
TrackBar1.HandleNeeded; // <-- here
TrackBar1.SetTick( 9 );
TrackBar1.SetTick( 19 );
TrackBar1.SetTick( 79 );
TrackBar1.SetTick( 89 );
نصائح أخرى
لا أعرف لماذا لا يعمل TrackBar1.Settick الإجراء ، ولكن إذا أرسلت بنفس الطريقة التي يعمل بها الإجراء. ستحتاج إلى إضافة وحدة CommCtrl إلى شرط استخداماتك لحل TBM_Settic كما هو موضح ...
implementation
Uses CommCtrl;
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
TrackBar1.TickStyle := tsManual;
TrackBar1.Min := 0;
TrackBar1.Max := 100;
SendMessage(TrackBar1.Handle, TBM_SETTIC, 0, 9);
SendMessage(TrackBar1.Handle, TBM_SETTIC, 0, 19);
SendMessage(TrackBar1.Handle, TBM_SETTIC, 0, 79);
SendMessage(TrackBar1.Handle, TBM_SETTIC, 0, 89);
end;
أتمنى أن يساعدك هذا!
إلى جانب ال handle
أن تكون جاهزًا و TickStyle
= tsManual
, ، ال frequency
يجب ضبط الخاصية على متعددة أو بسهولة أكبر ، إلى 1.