PDA

View Full Version : سوال: بدست آوردن شماره ستون و سطر یک خانه از Stringgrid



سيد مجتبي هاشمي
جمعه 07 آبان 1389, 21:40 عصر
دوستان سلام.
دوستان مشکلی در کار کردن با Stringgrid داشتم. ممنون میشم اگه جواب بدین.

میخواستم بدونم چه کدی و کجا این کد رو بنویسم که زمانی که دکمه موس رها شده بالا میآید شماره ستون و سطر مربوط به خانه ای از Stringgrid را که این اتفاق در آن خانه افتاده است را به من بدهد. منظورم رویه On Mouse Up است.

Felony
جمعه 07 آبان 1389, 21:57 عصر
به وسیله متد Selection میتونید خونه ای که فوکوس روش هست رو به دست بیارید ، کد زیر رو در رویداد OnMouseUp شئ StringGrid مورد نظر بنویسید :

var
R, C: String;
begin
R:= IntToStr(StringGrid1.Selection.Top);
C:= IntToStr(StringGrid1.Selection.Left);
ShowMessage(R+ ' & '+ C);
end;

سيد مجتبي هاشمي
شنبه 08 آبان 1389, 20:19 عصر
دوست عزیز با تشکر از راهنماییتون.

اما مشکل من حل نشد. من میخواهم زمانی که تعدادی از خانه های یک Stringgrid رو انتخاب میکنم شماره ستون و سطر اولین خانه ای رو که در اون کلیک کرده ام و آخرین خانه ای رو که دکمه موس رو در اونجا رها میکنم بهم بده. حالا از هر جای Stringgrid که شروع بشه و به هر جای Stringgrid که خاتمه پیدا کنه فرقی نمیکنه.
اگه لطف کنید جواب بدین خیلی بهم کمک کردین.
"برای یاداوری: در دلفی ابتدا شماره ستون و بعدا شماره سطر نوشته میشه"

Felony
شنبه 08 آبان 1389, 20:31 عصر
var
L, T, B, R : integer;
begin
L:= StringGrid1.Selection.TopLeft.x;
T:= StringGrid1.Selection.TopLeft.y;
R:= StringGrid1.Selection.BottomRight.x;
B:= StringGrid1.Selection.BottomRight.y;
ShowMessage('Cells from ' + IntToStr(L) + ',' + IntToStr(T) + ' to ' + IntToStr(R) + ',' + IntToStr(B));
end;


"برای یاداوری: در دلفی ابتدا شماره ستون و بعدا شماره سطر نوشته میشه"
به این میگن اشکال بنی اسرائیلی ، ما که سطر و ستون رو به تابع پاس ندادیم که قرار باشه مشکلی به وجود بیاد ، حالا چه حسن کچل چه کچل حسن !

سيد مجتبي هاشمي
شنبه 08 آبان 1389, 22:14 عصر
باز هم ممنون.

آقای تاجیک حالا که این چهارتا عدد به دست اومد میخواهم با راست کلیک کردن روی خانه های انتخاب شده و انتخاب یک گزینه خانه های مورد نظر را با مقداری خاص پر کند.
من کد زیر را برای یکی از گزینه های popup menu نوشتم اما زمانی که این کد باید اجرا بشه همان کد قبلی که در رویداد On Mouse Up نوشته بودم و همان چهارتا عدد را بهمون داد اجرا میشه.



procedure TMain.N_Fill_1Click(Sender: TObject);
var
i, j : Integer;
begin
for i := L to T do
for j := R to B do
StringGrid1.Cells[i,j] := '1';
end;


لطفا راهنمایی کنید برای پر کردن خانه های انتخاب شده با یک مقدار خاص باید چه کدی و این کد رو کجا باید نوشت.
باز هم ممنون.

Felony
یک شنبه 09 آبان 1389, 03:08 صبح
کدتون مشکل داشت ، به صورت زیر تغییرش بدید :
var
i, j: Integer;
begin
for i := L to R do
for j := T to B do
StringGrid1.Cells[i, j] := '1';
end;

سيد مجتبي هاشمي
یک شنبه 09 آبان 1389, 12:21 عصر
آقای تاجیک از این کد هم اسفاده کردم همون مشکل رو داشت.

لطف میکنید بگید این کد با کدی که من نوشته بودم چه فرقی داره ؟؟؟؟؟؟؟؟؟؟
به نظرم هر دوتاشون یکی بود. "من از دلفی 7 استفاده میکنم."

Felony
یک شنبه 09 آبان 1389, 12:31 عصر
آقای تاجیک از این کد هم اسفاده کردم همون مشکل رو داشت.

لطف میکنید بگید این کد با کدی که من نوشته بودم چه فرقی داره ؟؟؟؟؟؟؟؟؟؟
به نظرم هر دوتاشون یکی بود.
کجاشون یکی بود ؟!

این کد شما :


var
i, j : Integer;
begin
for i := L to T do
for j := R to B do
StringGrid1.Cells[i,j] := '1';
end;

تو حلقتون از چب ( L ) به بالا رفتید ( T ) و از راست ( R ) به پائین ( B ) ؛ حالا به نظرتون حلقتون چند بار باید اجرا بشه ؟! کدوم حلقه سطرها رو پیمایش میکنه و کدوم ستونها رو ؟!

این هم کد من :


var
i, j: Integer;
begin
for i := L to R do
for j := T to B do
StringGrid1.Cells[i, j] := '1';
end;

از چب به راست برای ستون ها و از بالا به پائین برای سطرها !

نمونه ضمیمه شده رو ببینید .

موفق باشید .

سيد مجتبي هاشمي
پنج شنبه 25 آذر 1389, 20:01 عصر
با سلام. آقاي تاجيك با تشكر از راهنمايي هاي قبلي شما. يه سوال ديگه در مورد StringGrid برام پيش اومده.
ميخواستم ببينم چه طور ميشه توي StringGrid دو يا چند مقدار نوشت مثل تصويري كه ضميمه شده است63710