سؤال

وكيف يمكنني معرفة موقف (صف ومؤشر عمود) من الضوابط داخل TGridPanel؟ أود أن استخدام الحدث OnClick مشترك لعدد من الأزرار وبحاجة إلى معرفة X، Y الموقف من زر.

وأنا باستخدام دلفي 2007.

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

المحلول

ولسوء الحظ، بسبب على سحر TGridPanel ، أو هو أكثر تعقيدا من مجرد الحصول على أعلى وخصائص اليسار ...

وهذا ينبغي أن نفعل ذلك لأية مراقبة، تكييفه مع الاحتياجات الخاصة بك:

procedure GetRowColumn(const AControl: TControl; var ARow, AColumn: Integer);
var
  I: Integer;
begin
  if AControl.Parent is TGridPanel then
  begin
    I := TGridPanel(AControl.Parent).ControlCollection.IndexOf(AControl);
    if I > -1 then
    begin
      ARow := TGridPanel(AControl.Parent).ControlCollection[I].Row;
      AColumn := TGridPanel(AControl.Parent).ControlCollection[I].Column;
    end;
  end;
end;

procedure TForm1.ButtonClick(Sender: TObject);
var
  Row, Column : Integer;
begin
  GetRowColumn(Sender as TControl, Row, Column);
  // do something with Row and Column
  ShowMessage( Format('row=%d - col=%d',[Row, Column]));
end;

نصائح أخرى

ويمكنك استخدام المرسل يلقي باعتباره tButton ثم يطلب منها لفي أعلى واليسار على سبيل المثال:

Procedure TForm1.OnClick(Sender:tObject);
var
  X,Y : Integer;
begin
  if Sender is TButton then
    begin
      X := TButton(Sender).Top;
      Y := TButton(Sender).Left;
      // do something with X & Y
    end;
end;

وأو إذا كان لديك لمجرد الرغبة في معرفة ما تم الضغط على زر، يمكنك أيضا استخدام خاصية TAG لإدراج رقم في كل زر، ومن ثم استرداد قيمة العلامة في حدث onclick الخاصة بك. فقط تذكر لأول تعيين خاصية العلامات إلى شيء. يمكنك القيام بذلك في مصمم النموذج إذا كان لديك فقط إسقاط الأزرار في لوحة الشبكة أو في روتينك تستخدم لإنشاء وإدراج الأزرار الخاصة بك.

Procedure TForm1.OnClick(Sender:tObject);
var
  iButton : integer;
begin
  if Sender is TComponent then
    begin
      iButton := TComponent(Sender).Tag;
      // do something with iButton
    end;
end;

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

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