سؤال

حاولت تعيين نمط علامة على 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.

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