معرفة موقف عنصر تحكم داخل TGridPanel
-
05-07-2019 - |
سؤال
وكيف يمكنني معرفة موقف (صف ومؤشر عمود) من الضوابط داخل 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;
ويمكنك أيضا استخدام خاصية كلمة دلالية لتخزين أكثر من مجرد عدد صحيح، لأن مؤشر يستخدم حاليا نفس حجم الذاكرة والعدد الصحيح يمكنك يلقي مؤشر إلى عدد صحيح وإدراج تلك القيمة في الممتلكات العلامة. فقط أن ندرك أن أي مؤشر كنت مكان في هذا المجال لا تزال تعامل على أنها عدد صحيح. أنت مسؤول عن الذاكرة فإنه يشير إلى، لن تدار من قبل المكون.