View Full Version : چند تا سوال درمورد TCategoryButton
حمید محمودی
شنبه 02 مرداد 1389, 17:06 عصر
سلام،
برنامه زیر رو در نظر بگیرید :
1- چطور میشه وقتی مثلا item2 (و بهر حال روی هر آیتم دیگه ای غیر از این) کلیک کردیم و سلکت شده هست بقیه آیتم ها disable بشن و ما اگه بر روی exit کلیک کنیم به حالت اول برگرده؟؟
2- میخام یه حلقه for بزارم و برای تک تک آیتم ها یک مقدار رو ست کنم اما چند مورد زیر رو نمیدونم چطور میشه بدست آورد ؟
A: تعداد کل itemها -- این قسمتو با مقدار زیر بدست میارم ولی کلشو میگه نه تعداد آیتم هاشو . مثلا در این برنامه مقدار 7 میده، که میخام عدد 5 رو بست بیاره (فقط آیتم هاش )
B: آیتم کنونی (برای ست کردن یک مقدار مثلا رنگ)
http://www.4shared.com/file/SmGcU4Lg/TCategoryButton.html
http://rapidshare.com/files/408790309/TCategoryButton.rar.html
برنامه نویس هم که این چندوقته Database error میده امروز هم که اصلا آپلود نمیشه کرد.
Upload of file failed.
shedayat
شنبه 02 مرداد 1389, 23:32 عصر
سلام. جواب سوال دوم قسمت الف کدش اینه: (مردم تا پیداش کردم :لبخند:)
caption:= inttostr( CategoryButtons1.Categories.VisibleCount-CategoryButtons1.Categories.Count );
حمید محمودی
شنبه 02 مرداد 1389, 23:47 عصر
ممنون دوست من! خودت که در جریانی الان مهم همون سوال اول هست که چه جوری بیایم آیتم های دیگه رو غیر فعال کنیم!
منتظر جواب دوستان!
shedayat
شنبه 02 مرداد 1389, 23:51 عصر
خوب باید یه حلقه بزاری و تک تک دکمه ها رو غیر فعالشون کنی.
حمید محمودی
شنبه 02 مرداد 1389, 23:58 عصر
خوب باید یه حلقه بزاری و تک تک دکمه ها رو غیر فعالشون کنی.
چه طوری ؟؟؟؟
shedayat
یک شنبه 03 مرداد 1389, 00:03 صبح
خوب برای اینکار اول باید تعداد کل آیتم های کتگوری ها رو بگیری و بعد با یه حلقه تعداد آیتم های دکمه هر کردوم رو بگیری و بعدش هر دکمه رو disable کنی و همینجوری الی آخر ...
حمید محمودی
یک شنبه 03 مرداد 1389, 00:08 صبح
خوب برای اینکار اول باید تعداد کل آیتم های کتگوری ها رو بگیری و بعد با یه حلقه تعداد آیتم های دکمه هر کردوم رو بگیری و بعدش هر دکمه رو disable کنی و همینجوری الی آخر ...
بله اینی که گفتی مشخصه اما امروز از بس درگیر طراحی برنامه اصلی و فکر کردن به جاهای دیگه بودم نتونستم کاملش کنم.بعدا هم میشه مثل امروز!! :دی
اما جداً من بلد نسیتم این قسمت رو بنویسم.
shedayat
یک شنبه 03 مرداد 1389, 00:24 صبح
آره. یه کم فکر می کنم می بینم راست می گی ها! :متفکر:
ولی یه کم روش کار بشه می شه جواب رو بدست آوورد.
جواب سوال دومی قسمت B :
c1.Categories.Items[1].CategoryButtons.SelectedItem.Caption:='assd'
حمید محمودی
یک شنبه 03 مرداد 1389, 00:33 صبح
آقا الان که قشنگ دقت کردم سوال دو قسمت ب رو بد پرسیدم. این کدی که تو نوشتی رو بلد بودم.
یه قسمتی بود که میخاستم در برنامه اصلی باشه که الان یادم نیست :دی (یعنی بعدا بهت میگم)
بعد اصل کاری مونده سوال اول!!!
مرسی
SAASTN
یک شنبه 03 مرداد 1389, 06:24 صبح
- چطور میشه وقتی مثلا item2 (و بهر حال روی هر آیتم دیگه ای غیر از این) کلیک کردیم و سلکت شده هست بقیه آیتم ها disable بشن و ما اگه بر روی exit کلیک کنیم به حالت اول برگرده؟؟
تا حالا ازش استفاده نکرده بودم، ولی الان که نگاه کردم دیدم که Itemهاش که اصلا Enabled ندارن که بخوایم غیر فعالشون کنیم. البته رفتم یونیتشم یه نگاه انداختم، میشه بازنویسیش کرد و Enabled رو بهش اضافه کرد.
اما اگه با از کار انداختن OnClick دکمه ها کارت راه میافته:
procedure TForm1.ButtonExitClick(Sender: TObject);
var
I, J: Integer;
begin
for I := 0 to CategoryButtons1.Categories.Count - 1 do
for J := 0 to CategoryButtons1.Categories[I].Items.Count - 1 do
CategoryButtons1.Categories[I].Items[J].OnClick :=
CategoryButtons1Categories0Items0Click;
end;
procedure TForm1.CategoryButtons1Categories0Items0Click(Send er: TObject);
var
I, J: Integer;
begin
for I := 0 to CategoryButtons1.Categories.Count - 1 do
for J := 0 to CategoryButtons1.Categories[I].Items.Count - 1 do
if CategoryButtons1.Categories[I].Items[J] <> CategoryButtons1.SelectedItem then
CategoryButtons1.Categories[I].Items[J].OnClick := nil;
ShowMessage(CategoryButtons1.SelectedItem.Caption) ;
end;
حمید محمودی
یک شنبه 03 مرداد 1389, 12:30 عصر
سلام،
تا حالا ازش استفاده نکرده بودم، ولی الان که نگاه کردم دیدم که Itemهاش که اصلا Enabled ندارن که بخوایم غیر فعالشون کنیم.
آره منم تا حالا باهاش کار نکرده بودم. منم هرچی میگردم میبینم Enable نداره که بخام غیرفعالش کنم.
راستش برنامه اصلی یکم پیشرفته هست و افرادی که دارن باهاش کار میکنن متاسفانه باید خودتو بکشی تا با همین قسمت های ساده کار بکنن.(عدم آشنایی و کار با کامپیوتر)
به همین دلیل میخام یه طوری باشه که کاملا مشخص باشه. شما کار دیگه ای به ذهنتون نمیرسه؟؟
من به شخصه قصدم این بود که رنگ همه آیتم ها به غیر از آیتمی که انتخاب شده رو مثلا btnShadow بزارم و همه رو (غیر از اونی که سلکت شده) غیر فعال کنم تا کاملا مشخص باشه. که متاسفانه غیر فعالشون نمیشه کرد.
کار زیر کار سختیه؟؟؟ نمیشه انجامش داد؟؟
رفتم یونیتشم یه نگاه انداختم، میشه بازنویسیش کرد و Enabled رو بهش اضافه کرد.
راستی یه سوال دیگه در مورد CategoryButton »
چطور میشه Hint های هر آیتم رو در Statusbar وقتی ماوس روی هر آیتم هستش نشون داد???
این برای این حالت کار نمیکنه.
http://www.delphitricks.com/source-code/forms/show_hints_in_the_statusbar.html
مرسی
SAASTN
یک شنبه 03 مرداد 1389, 19:20 عصر
راستش برنامه اصلی یکم پیشرفته هست و افرادی که دارن باهاش کار میکنن متاسفانه باید خودتو بکشی تا با همین قسمت های ساده کار بکنن.(عدم آشنایی و کار با کامپیوتر)
خوب با این شرایط این کاری که می خواید بکنید که یکم نا متعارف و دور از ذهن تره. چرا از ترکیب کنترل های استاندارد استفاده نمی کنید؟
شما کار دیگه ای به ذهنتون نمیرسه؟؟
خیر، من هم غیر از بازنویسی چیز دیگه ای به ذهنم نمی رسه. البته نمی دونم دقیقا چیکار می خواید بکنید، شاید بشه از روش دیگه ای منظورتون رو پیاده کرد.
کار زیر کار سختیه؟؟؟ نمیشه انجامش داد؟؟
نه، چیز زیادی نداره، باید زمانی که کنترل داره ترسیم میشه رو پیدا کرد و اگه Enabled برابر False بود مثلا خاکستری ترسیم بشه. توی MouseMove کنترل Hot نشه و توی Click کنترل OnClickش اجرا نشه. اگه قبلا کنترل نویسی کرده باشی در عرض چند ساعت میشه درش اورد.
چطور میشه Hint های هر آیتم رو در Statusbar وقتی ماوس روی هر آیتم هستش نشون داد???
این برای این حالت کار نمیکنه.
والا نمی دونم، یکم نگاه کردم ولی چیزی سر در نیاوردم. ولی اگه باز نویسیش کنی و متد CMHintShow رو دوباره بنویسی باید بشه اونم درستش کرد. من کد زیر رو نوشتم که باعث میشه یه پلک بزنه و زود برش داره، نمی دونم کدم چقدر اصولیه ولی اونم با یکم تحقیق می شه درش آورد:
procedure TMyCategoryButtons.CMHintShow(var Message: TCMHintShow);
begin
inherited;
if Message.Result = 0 then
begin
Application.Hint := Message.HintInfo.HintStr;
if Assigned(Application.OnHint) then
Application.OnHint(Self);
end;
end;
حمید محمودی
یک شنبه 03 مرداد 1389, 23:55 عصر
خوب با این شرایط این کاری که می خواید بکنید که یکم نا متعارف و دور از ذهن تره. چرا از ترکیب کنترل های استاندارد استفاده نمی کنید؟
برنامه اصلی یک منو( یه چیز شبه به اون) داره که کاربر باید کارهایی که میخاد انجام بده رو از این قسمت انتخاب کنه. اگه میخاستم دکمه، تولبار و ... میزاشتم کار یکمی سخت میشد. از این جهت که مثلا اگه تعداد کارهایی که باید در منو باشه زیاد باشه که اتفاقا همینطور هم هست، کاربرانی که از مانیتورهای کوچکتر (نه واید) استفاده میکنن (که احتمالا اکثرشون هم همینطور هست) بقیه دکمه ها رو نمیتونستن ببینن. البته میشد یه اسکرول باکس گذاشت ولی به نظرم اینطوری جالب نمیومد.
من گفتم یه کتگوری میزارم و آیتم های مورد نظر رو توش مینویسم و به یک سمت فرم میچسبونم و کاربر راحت میتونه ازش استفاده کنه. منم راحت ترم از این جهت که میشه توی OnButtonClickش یه Case بزارم و هر کاری که خواستم همونجا بهش بگم انجام بده!
یه راه خوب دیگه استفاده از CategoryPanelGroup بود. تنها مشکلش برای این حالت به نظرم دو چیز بود.
اول اینکه نتونستم اون Border مشکی دورشو بردارم و دوم اینکه وقتی یک Speedbutton با استایل فلت رو داخل مزاشتم مشکل داشت. (میتونید ببینید)
و وقتی CategoryButton رو دیدم و توی برنامه استفاده کردم بیخیالش شدم ولی با این شرایط پیش اومده فکر کنم که.......
حالا نمیدونم برای این حالت شما راه بهتری سراغ دارین؟؟؟
اگه قبلا کنترل نویسی کرده باشی در عرض چند ساعت میشه درش اورد.
نه متاسفانه تا به حال اینکارو انجام ندادم با دلفی!! الان کمی سعی کردم بتونم سردر بیارم ولی دیدم کار من نیست (بیخیالش شدم)!!!
راستی در این کنترل نمیشه کپشنشو RTL کرد؟؟؟ نه ؟؟
از دست این کتگوری عجب گیری کردیما!!! :دی
مرسی
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.