create کردن آرایه از جنس دکمه ==> لطفا اگر اطلاعی در مورد نحوه create کردن یک آرایه از جنس button دارید من رو راهنمایی کنید .ممنون
create کردن آرایه از جنس دکمه ==> لطفا اگر اطلاعی در مورد نحوه create کردن یک آرایه از جنس button دارید من رو راهنمایی کنید .ممنون
برای تعریف آرایه از دکمه به شکل زیر عمل کنید.
var
a :Array[1..2] OF TButton;
و سپس به شکل زیر Create کنید.
a[1] := TButton.Create(Owner);
موفق باشید
آرایه رو Create نمی کنند، هر یک از اعضای آن را Create می کنند:
var
i : integer;
A : array [1..5] of TButton;
begin
for i:= 1 to 5 do
A[i] := TButton.Create(Form1);
end;
البته برای نگه داشتن لیستی از Object ها روش های بهتری هست مثل TComponentList یا TObjectList در یونیت Contnrs.
وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.
برنامه مورد نظر شما رو در تاپیک قبلی شما گزاشته ام. به لینک زیر مراجعه کنید :
https://barnamenevis.org/showthread.php?t=89227
اینجور اجزا برا کاری ساخت به یک مالک(Owner) نیاز دارند که عمر آنها وابسته به عمر مالک میشود.
و علاوه بر مالک به یک زمینه برای نمایش به نام Parent احتیاج دارند. بهتره هر کدوم از درایه ها رو ینجوری بسازی
a:=TButton.Create(Form1);
a.Parent:=Form1;
فکر نمی کنم parent با اسم جزء تداخل داشته باشه.
تا جایی که میدونم Parent برای معرفی جد و مادر اجزا استفاد همیشه.
اجزایی که قابلیت نمایش را دارند باید برای نمایش تعلق آن ها به جزء دیگه معرفی بشه. اگه Parent معرفی نشه برای نمایش دادن دچاره مشکل میشی.
فکر کنم اجزایی که توسط windows به برنامه داده میشه مثه کلید، Parent داشته باشند.
دوست عزیز منظور من این بود که نگه داشتن لیست Button ها در یک آرایه راحت است و اگر بخواهی برای تعریف هر Button از یک متغییر استفاده کنی خیلی با مشکل برخود می کنی.
حتی اگر بخواهی لیست Button هایی که در آرایه تعریف کرده ای را نمایش بدهی باید Parent مشخص شود.
موفق باشید
من مشکلی مشابه همین دارم اما با راه حلهای شما مشکل حل نشد.
فرض کنید تعداد 40 عدد panel وجود دارد برای آنکه بخشی از این پنلها نمایش داده شود باید چه کار کرد .
مثلا: از پنل 15 تا 38 را می خواهیم نمایش دهیم.مصداق آن در ایجاد یک تقویم است .اول هر ماه مشخص نیست چه روزی است و برای هر ماه یک پنل ممکن است visible شود.
لطفا اگر میتوانید به من کمک کنید.
ببینید شاکله ی نرم افزار ساخته شده .40 پنل موجود است که در هر پنل تعدادی comboboxوeditو... وجود دارد این برای آن است که اطلاعات مربوط به همان روز وارد شود.
اما مشکل اینجاست که من نمیتوانم همین createکه شما برنامه آنرا نوشتید تبدیل به خواصیت visibleکنم واین عمل را برای پنل هایی که در آرایه ذخیره کرده ام اعمال کنم. با تشکر.
اینجا رو ببینید:
https://barnamenevis.org/showpo...6&postcount=11
وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.
اما هیچکدام از این جوابها مربوط به مشکل من نیست.مشکل نه تقویم شمسی است نه ...** مشکل خیلی واضحه همین کاری که برای create کردن انجام می دهیم(هر تعداد پنل که می خواهیم نمایش میدهیم) چطور میشود برای دستور visible انجام داد . پنلها از قبل ساخته شده اند و وجود دارند من فقط می خوام نشان دادن یا نشان ندادن آنها را کنترل کنم .
از راهنمایی های شما متشکرم اما اگر امکان دارد در این زمینه به من کمک کنید .
اگر می خواهی Object هایی را که Create کرده ای نمایش دهید باید اینجوری عمل کنی.
a[1].Parent := Form1;
a[1].Visible := True;
موفق باشید
یعنی هیچ جوره نمیشه تو دلفی در هنگام Design آرایهای از کنترلها ساخت؟ تو VB این کار خیلی راحته و با مقداردهی خصوصیت Index میشه این کار رو کرد.
لینک زیر را نگاه کنید.
کل Editهای صفحه را به ترتیب می خواند.از روی نام کامپونتها می توانی تشخیص دهی کدام را نمایش دهی.مثلا نام کامپونتها را Edit_01 تا Edit_40 بگذارید و با دستور Copy قسمت عددی را جدا کرده و اگر داخل رنج بود نمایش دهید.
https://barnamenevis.org/showth...ComponentCount
موفق باشید
اما چطور میشه با دستور copy مقدار عددی را جدا کرد؟در ضمن کد زیر رو هم نوشتم ولی نمیتونم کاملش کنم .For i := 0 To ComponentCount Do
IF Components[i] Is Tpanel Then
Begin
if (Components[i] as Tpanel).visible= then
End
مشکل پروژه حل نشد و در نهایت قالب پروژه را عوض کردم.
در طول این پروژه من با ناتوانی های دلفی در ضمینه های مختلف خیلی در گیر بودم.
وتوصیه میکنم قبل از نوشتن هر برنامه ابتدا از توانایی های برنامه ای که با آن کار میکنید خوب مطمئن شوید.در غیر این صورت مثل من چند هفته تلاشتونو باید پاک کنید.
تشکر میکنم از تمامی دوستان .
مشکل از دلفی نبود، از شما بود. من پیشنهاد میکنم قبل از شروع یک پروژه:در طول این پروژه من با ناتوانی های دلفی در ضمینه های مختلف خیلی در گیر بودم.
وتوصیه میکنم قبل از نوشتن هر برنامه ابتدا از توانایی های برنامه ای که با آن کار میکنید خوب مطمئن شوید.
1- با زبان و محیط برنامه نویسی مورد نظر خودتون کاملا آشنا بشید.
2- قبل از پیاده سازی یک امکان جدید، توانایی های خود در پیاده سازی آن را کاملا بررسی کنید.
وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.
شما درست میگید اما این در صورتیه که مشکل پس از 2 هفته پیگیری و جستجو حل بشه .اما همین طور که میبینید نه شما و دوستان تونستید این مشکل رو حل کنید،و نه تمام کسانی که در اطراف من متخصص برنامه نویسی بودند تونستند این مشکل رو حل کنن وعلاوه بر اینها استاد راهنمای من در این پروژه برای این که مشکله من رو حل کنه پیشنهاد عوض کردن قالب پروژه رو داد و از حل مشکل ابراز بی اطلاعی کرد .که البته راهش با سلیقه من اصلا جور در نمیاد! به دلایلی که ذکر شد به این نتیجه رسیدم که اینجا دیگه دلفی کم آورده!1- با زبان و محیط برنامه نویسی مورد نظر خودتون کاملا آشنا بشید.
2- قبل از پیاده سازی یک امکان جدید، توانایی های خود در پیاده سازی آن را کاملا بررسی کنید.
شایدم حرف شما به احتمال ضعیفی درست باشه برای همین، صفحه پروژه خودم رو برای دانلود در زیر گذاشتم .لطفا نگید که چرا از این راه برای رسیدن به هدفت میری چون با راه دیگه ای موافق نیستم.توجه کنید که میخوام تاریخی مه از کاربر گرفته میشه تقویم زیر نمایش داده بشه و اطلاعات مورد نیاز از کاربر گرفته بشه.ودر نهایت حقوق کارمند محاسبه بشه.
https://barnamenevis.org/attach...1&d=1204757323
ولی باز هم این دلیل به کم توانی و با ناتوانی دلفی نیست که در بالا علی کشاورز هم یاد کرد.
عوض کردن صورت مسئله کاری است که اکثر اساتید ما می کند تا از سوالاتی که جوابهای آن را باد نیستند فرار کنند.
اگر دوستان هم نتوانستد کمک کنند شاید روش حل مسئله روش درستی نبوده و باید از روش دیگری استفاده کرد.
موفق باشید
وقتی شما نمی تونید مشکلی که دارید درست توضیح بدید، انتظار دارید دیگران چیکار کنند؟!اما همین طور که میبینید نه شما و دوستان تونستید این مشکل رو حل کنید،و نه تمام کسانی که در اطراف من متخصص برنامه نویسی بودند تونستند این مشکل رو حل کنن وعلاوه بر اینها استاد راهنمای من در این پروژه برای این که مشکله من رو حل کنه پیشنهاد عوض کردن قالب پروژه رو داد و از حل مشکل ابراز بی اطلاعی کرد .
از نظر دلفی برای کار شما باید امکان تعریف لیستی از اشیا فراهم باشه، که هست. از طرفی امکان تغییر خصوصیات این اشیاء هم وجود داشته باشه، که داره. اینجا مشکل اینه که شما بلد نیستید که چطور این کار رو انجام بدید و فقط هم میگید این راه حل نیست، آن راه حل نیست. مثلا به پست های خودتون در این تاپیک نگاه کنید:
فرض کنید تعداد 40 عدد panel وجود دارد برای آنکه بخشی از این پنلها نمایش داده شود باید چه کار کرد .
مثلا: از پنل 15 تا 38 را می خواهیم نمایش دهیم.مصداق آن در ایجاد یک تقویم است .اول هر ماه مشخص نیست چه روزی است و برای هر ماه یک پنل ممکن است visible شود.خب، تا اینجا کی میتونه کمک کنه؟! فقط مشخص شده که شما نتونستید مقدار خصوصیت Visible چند کنترل را تنظیم کنید. چرا نتونستید مشخص نیست، چون کاربران باید حدس بزنند شما از چه راهی رفتید. اکثرا هم به اندازه کافی گرفتار هستند که فرصت حدس زدن مشکل شما را نداشته باشند. وقتی مشکل مشخص نشده، جواب کلی میشه اونی که در پست شماره 14 گرفتید. در پست بعد از آن شما باز هم توضیحی به توضیحات قبلی اضافه نمی کنید، فقط همان توضیح را تکرار می کنید، Syndrome این بار راه حل دیگه ایی ارائه میکنه که شما هم قبول می کنید. اما در پست 18 کلا مسیر سوال را عوض می کنید و درباره کار کردن با تابع Copy می پرسید. در پست 19 درباره تابع Copy برای شما یک مثال زده میشه. در پست 20 انگار که اصلا مثالی برای Copy زده نشده و قبل از آن در پست 18 خودتان به راه حل ارائه شده "احسنت" نگفتید(!) مجددا ار حل نشدن مشکلتان گله مند هستید در حالی که باز هم اطلاعات جدیدی ارائه نمی کنید.اما مشکل اینجاست که من نمیتوانم همین createکه شما برنامه آنرا نوشتید تبدیل به خواصیت visibleکنم واین عمل را برای پنل هایی که در آرایه ذخیره کرده ام اعمال کنم.
واقعا فکر می کنید چه کمکی باید به شما صورت می گرفت؟! کل سوالات شما این بود:
1- چطور مقدار Visible تعدادی Panel را تغییر بدیم.
2- چطور از تابع Copy استفاده کنیم.
جواب هر دو سوال هم در تاپیک داده شد. اگر جوابها به کار شما نیامد، علتش عدم توانایی شما در بیان مشکل بود.
مسلم هست که وقتی کاربری بدون ارائه اطلاعات بیشتر، فقط گله میکنه، کمتر کسی مشکل را پیگیری میکنه. من شخصا چند بار این تاپیک سر زدم، ولی هیچ توضیح مفیدی از شما ندیدم، پس بعد از مدتی بیخیال این تاپیک شدم و فقط پست ها را از نظر انظباطی کنترل می کردم. الان اگه وقت گذاشتم و سه صفحه تاپیک را مرور کردم، برای این بود که هم شما و سایر دوستانی که بعد از این ممکنه مشکلی براشون پیش بیاد، متوجه بشند که ما اینجا توانایی خواندن ذهن شما را نداریم. مسئولیتی هم در قبال حل مشکل شما نداریم. اگر مشکل به خوبی مطرح شده باشه و حل آن در توان ما باشه، کمک می کنیم، وگرنه به تاپیک توجه خاصی نمیشه و سوال فراموش میشه. پس لطفا وقتی به مشکلی بر می خورید، چند لحظه روی سوال فکر کنید، آن را از زوایای مختلف بررسی کنید و چک کنید که چقدر برای فردی که در جریان پروژه شما نیست، قابل فهم هست، بعد اگر به این نتیجه رسیدید که مشکل را کامل و جامع توضیح دادید و اطلاعات کافی ارائه کردید، اون وقت امید به گرفتن جواب داشته باشید.
من فکر می کنم اگر در پست قبل از شما انتقاد نکرده بودم، همین فرم ضمیمه شده را هم در تاپیک قرار نمی دادید!
وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.
مثال:
unit vhozoor;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, Grids, DBGrids, DB, ADODB, Contnrs;
type
Thozoor = class(TForm)
{Components list is omitted for simplicity}
...
procedure Button4Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button5Click(Sender: TObject);
private
MyPanels : TComponentList;
function IsMyPanel(control : TControl): Boolean;
procedure AddPanels;
procedure SetPanelVisibility(Index : integer; Visible: Boolean);
public
{ Public declarations }
end;
var
hozoor: Thozoor;
implementation
uses Unit1;
{$R *.dfm}
procedure Thozoor.FormCreate(Sender: TObject);
begin
MyPanels := TComponentList.Create(False);
AddPanels;
end;
procedure Thozoor.FormDestroy(Sender: TObject);
begin
MyPanels.Free;
end;
//Check Name property for the given control to see if it is MyPanel.
function Thozoor.IsMyPanel(control: TControl): Boolean;
begin
//A panle is MyPanle if its name follows this pattern: pX
//X is a number from 1 to 35.
Result := (Length(Control.Name) < 4) and (Copy(Control.Name,1,1) = 'p');
end;
//Sort the list according to panel names
function SortMyPanels(Item1, Item2: Pointer): Integer;
begin
Result := CompareText(TComponent(Item1).Name, TComponent(Item2).Name);
end;
//Adds panels to MyPanels list
procedure Thozoor.AddPanels;
var
j : integer;
begin
for j := 0 to ControlCount-1 do
if (Controls[j] is TPanel) and (IsMyPanel(Controls[j])) then
MyPanels.Add(Controls[j]);
MyPanels.Sort(@SortMyPanels);
end;
//Sets visibility of a given panel in MyPanels list
procedure Thozoor.SetPanelVisibility(Index: integer; Visible: Boolean);
begin
(MyPanels[Index] as TPanel).Visible := Visible;
end;
توضیحی بیشتر از اونی که توی خود کد نوشتم، نمیدم!
procedure Thozoor.Button1Click(Sender: TObject);
var
i : integer;
begin
for i := 1 to 7 do
SetPanelVisibility(i,False);
end;
وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.
دوست ندارم فکر کنید که من قدر نشناسم ، ولی درصدی حق بدید که وقتی به آدم میگن که این کار در دلفی ممکن نیست و وقتی از گرفتن جواب از دوستان نا امید میشین به نتیجه ای که در مطلب 19 نوشتم میرسید.در هر صورت دوست نداشتم مشگل اینطوری حل بشه،یعنی من پروژرو بدم و شما حل کنید می خواستم خودم حل کنم که هر چی سعی کردم گویا شما منظور من رو از سئوال نفهمیدید ،این کار رو خودم هم درست نمی دونم ولی مثل اینکه بحث داشت خراب میشد. قبول دارم که سوادم در دلفی هنوز خیلی کمه و شاهدم که شما وقت زیادی رو برای حل کردن این مشکل صرف کردید.باز هم ممنونم
البته تا کد ها رو بفهمم وقت زیادی میبره ولی در هر حال متشکرم.سعی میکنم زیاد هم مزاحم شما نشم.
چرا در برنامه پنلهای 1تا35 در نظر گرفته شده؟ وقتی برنامه اجرا میشه پنل های p1 تا p9 کار نمیکنه شاید مشکل از سُرت برنامه باشه .لطفا اگر کسی میتونه کمک کنه.
چون من اول یه آرایه 35 تایی برای نگه داری Object ها تعریف کرده بودم که بعدش منصرف شدم. برای بدست آوردن تعداد اشیای موجود در لیست:چرا در برنامه پنلهای 1تا35 در نظر گرفته شده؟
MyPanels.Count
چون سورت حرف به حرف مقایسه میکنه در نتیجه مقادیری مثل 11 یا 12 که با 1 شروع میشند قبل از مقادیر 2و 3 و... قرار میگیرند که با مقادیری بزرگتر از یک شروع میشند. باید نام کنترلهایی که عددشون تک رقمی هست را بجای 1و2 و3 و 4 و... با 01و02و03و04 و...جایگزین کنید تا سورت ترتیب آنها را درست نمایش بده.پنل های p1 تا p9 کار نمیکنه شاید مشکل از سُرت برنامه باشه
وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.
مشکلات کار با پنل ها حل شد ولی در پیمایش روی edit comdobox label مشکل دارم در کدی که شما نوشتید نمیتواند کامپوننت های بالا را پیدا کند و ذخیره کند.چه باید کرد؟
یعنی چی؟!!نمیتواند کامپوننت های بالا را پیدا کند و ذخیره کند.
وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.
ببینید من در هر پنل یک edit یکcomboboxویکlabel قرار دادم اما نمیتوانم کاری که شما برای پنل ها انجام دادید برای آنها هم انجام دهم مثلا در کد زیرvarمیخواهم لیبل ها تاریخ آن روز را نمایش دهند اما در کد بالا اصلا لیبلی پیدا نمیکنه که وارد حلقه بشه .ببینید پنل ها parent لیبل و... هستند میخواهم بدانم چطور میشود اطلاعاتی که کاربر در ادیتها وارد میکند را بخوانم یا چطور caption لیبل ها را مقدار دهی کنم.
j : integer;
begin
for j := 0 to ControlCount-1 do
if (Controls[j] is TPanel) and (IsMyPanel(Controls[j])) then
MyPanels.Add(Controls[j]);
MyPanels.Sort(@SortMyPanels);
همونطور که داریم:
Controls[j] is TPanel
همونطور هم می تونیم داشته باشیم TEdit یا TLabel.
همونطور هم می تونیم داشته باشیم:
TLabel(Controls[j]).Caption := 'Test';
وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.
در طول اجرای، برنامه اصلا وارد شرط زیر نمیشود.باز هم میگم لیبل ها زیر مجموعه ی پنلها هستند این مشکلی ایجاد نمیکنه ؟
for q := 0 to ControlCount-1 do
begin
if (Controls[q] is Tlabel) and (IsMyll(Controls[q])) then
Myll.Add(Controls[q]);
end;
Trace کن ببین وارد حلقه می شودیا نه؟
ComponentCount-1 امتحان کن ببین درست می شود یا نه؟
اگر نشود برنامه را اینجا قرار بده تا تست شود.
موفق باشید
سلام .
یه برنامه خیلی وقت پیشا نوشته بودم که نرسیدم تکمیلش کنم .
شاید خیلی جاهاشو بد کد نویسی کرده باشم و خیلی جاها کدای زائدی باشه و شاید اصلا بدرد نخوره .
اما میذارم چون نسبت به چیزایی که اینجا یاد گرفتم تعهداتی دارم .
procedure TMainForm.butclick(sender : TObject );
var
btname : string ;
begin
btname := TButton(sender).Name;
ReminderForm.Edit_RemindeDate.Text := inttostr(CurrentYear) + '/' + copy(btname,3,2) + '/' + copy(btname,6,2);
ReminderForm.ShowModal ;
end;
Procedure TMainForm.CreateButton ; // ÑæÓå ÓÇÎÊ Ï˜ãå åÇ
var
counter : integer ;
//mybtn : TfcImageBtn ;
ButtonDate,ButtonAllYearDate : string ;
Begin
try
counter := 0 ;
for I := 1 to 5 do
Begin
for L := 7 downto 1 do
Begin
mybtn[strtoint(ReturnValidMountNumber(PageCount))][ReturnVildLPosistion(I*L)] := TfcImageBtn.Create(MountPage.Pages[pagecount]);
//-----------
with mybtn[strtoint(ReturnValidMountNumber(PageCount))][ReturnVildLPosistion(I*L)] do
Begin
Parent := MountPage.Pages[pagecount] ;
OnClick := butclick;
Caption := IntToStr(counter + 1) ;
Height := 32 ;
Width := 32 ;
Font.Size := 10 ;
BiDiMode := bdRightToLeft ;
Font.Name := 'Tahoma' ;
Font.Style := [fsBold] ;
Font.Color := clBlack ; // ÑæÒåÇí ÛíÑ ÊÚØíá
// Effects
TextOptions.Style := fclsOutline ;
TextOptions.OutlineColor := clWhite ;
//==
Image.LoadFromFile('C:\button\testn.bmp');
ImageDown.LoadFromFile('C:\button\testn2.bmp');
// ÌãÚå åÇ
IF LeftCounter = 30 Then
Begin
Font.Color := clRed ;
Image.LoadFromFile('C:\button\testtatiil.bmp');
End ;
//---
Left := SetLeftPos ;
Top := TopCounter * 28 ;
ButtonPosition[PageCount][ReturnVildLPosistion(i*L)] := Left ;
//==============
Name := 'b_' + ReturnValidMountNumber(PageCount) + '_' + ReturnValidDayNumber(counter + 1) ;
//====== ÑÝÊä ÊÇÑíÎ ÇãÑæÒ æ ãÔÎÕ ÓÇÒí ========
ButtonDate := SetTrueDate(PageCount, counter + 1) ; // ÊÇÑíÎ Çíä Ϙãå
ButtonAllYearDate := 'Year/' + copy(ButtonDate,6,5); // ÊÇÑíÎ Çíä Ϙãå ÏÑ ÝíáÏåÇí åãå ÓÇáå
//---
WhatsThisButtonImage(ButtonDate) ; // ÊÚííä Ô˜á˜åÇ
//====== ÇíÇä ========
// ÑÝÊä ÑæíÏÇÏ ÑæÒ
DTM.DBQuery.SQL.Clear ;
DTM.DBQuery.SQL.Add('select * from eventtable where date = ' + QuotedStr(ButtonDate));
DTM.DBQuery.ExecSQL ;
//-------------
IF DTM.DBQuery.RecordCount > 0 Then Hint := DTM.DBQuery.FieldValues['eventtitle'] ;
IF ButtonDate = CalenderForm.FarsiCalendar1.Today Then
Begin
//Flat := False ;
Font.Color := clBlue ; // ãÔÎÕ ÓÇÒí Ϙãå ÇãÑæÒ
MountPage.ActivePageIndex := PageCount ;
IF DTM.DBQuery.RecordCount > 0 Then
Begin
with EventForm do
Begin
Labl_Today.Caption := 'ÇãÑæÒ : ' + (ReturnPersianDate(LeftCounter,counter+1));
Labl_TodayEvent.Caption := DTM.DBQuery.FieldValues['eventtitle'] ;
Show;
End ;
End;
End ;
//====== ÇíÇä ========
//****************************
counter:= counter + 1 ;
//Top := TopCounter * 28 ;
SplashForm.ProgressBar_Loading.Position := SplashForm.ProgressBar_Loading.Position + 1 ;
IF counter = NumberOfMountDays Then Break ;
End ;
End;
End ;
except
end ; // end try
End;
Function TMainForm.WhatsThisButtonImage(Date:String):String ;
var
AllYear : String ;
HintEventTypeTemp,HintRemindeMessageTemp,HintCompo sed : String ;
Day,Mount : integer ;
Begin
AllYear := 'Year/' + copy(Date,6,5); // ÊÇÑíÎ Çíä Ϙãå ÏÑ ÝíáÏåÇí åãå ÓÇáå
day := strtoint(copy(Date,6,2));
Mount := strtoint(copy(Date,9,2)) ;
// ÊÚííä Ô˜á˜åÇí Ϙãå åÇí
with DTM.Query_Reminder do
begin
SQL.Clear ;
SQL.Add('Select * from remindertable where EventDate = ' + QuotedStr(Date) + 'OR EventDate = ' + QuotedStr(AllYear));
ExecSQL ;
end ;
//===
IF DTM.Query_Reminder.RecordCount = 1 Then // ÇÑ ÝÞØ í˜ ÚäæÇä ãæÌæÏ ÈæÏ
Begin
SmallIcon[day][Mount] := TfcImageBtn.Create(self);
with SmallIcon[day][Mount] do
Begin
Parent := MyBtn[day][Mount].Parent ;
Height := 16 ;
Width := 16 ;
SmallIcon[day][Mount].Top := MainForm.MyBtn[day][Mount].Top ;
SmallIcon[day][Mount].Left := MainForm.MyBtn[day][Mount].Left ;
HintEventTypeTemp := DTM.Query_Reminder.FieldValues['RemindeType'] ;
HintRemindeMessageTemp := DTM.Query_Reminder.FieldValues['RemindeMessage'] ;
HintComposed := HintEventTypeTemp + ' : ' + HintRemindeMessageTemp ;
Case DTM.Query_Reminder.FieldValues['RemindeIntType'] OF
0 : Begin
Image.LoadFromFile('C:\button\IcAp.bmp');
ImageDown := Image ;
Hint := HintComposed ;
End ;
1 : Begin
Image.LoadFromFile('C:\button\IcBirthday.bmp');
ImageDown := Image ;
Hint := HintComposed ;
End ;
2 : Begin
Image.LoadFromFile('C:\button\IcCheck.bmp');
ImageDown := Image ;
Hint := HintComposed ;
End ;
3 : Begin
Image.LoadFromFile('C:\button\IcQuiz.bmp');
ImageDown := Image ;
Hint := HintComposed ;
End ;
4 : Begin
Image.LoadFromFile('C:\button\IcMarry.bmp');
ImageDown := Image ;
Hint := HintComposed ;
End ;
5 : Begin
Image.LoadFromFile('C:\button\IcDead.bmp');
ImageDown := Image ;
Hint := HintComposed ;
End ;
6 : Begin
Image.LoadFromFile('C:\button\IcImportant.bmp');
ImageDown := Image ;
Hint := HintComposed ;
End ;
7 : Begin
Image.LoadFromFile('C:\button\IcUnknow.bmp');
ImageDown := Image ;
Hint := HintComposed ;
End ;
end;
SmallIcon[day][Mount].Repaint ;
End ;
End ;
//--
IF DTM.Query_Reminder.RecordCount > 1 Then
Begin
SmallIcon[day][Mount] := TfcImageBtn.Create(self);
with SmallIcon[day][Mount] do
Begin
Parent := MyBtn[day][Mount].Parent ;
Height := 16 ;
Width := 16 ;
SmallIcon[day][Mount].Top := MainForm.MyBtn[day][Mount].Top ;
SmallIcon[day][Mount].Left := MainForm.MyBtn[day][Mount].Left ;
Image.LoadFromFile('C:\button\many.bmp');
ImageDown := Image ;
With DTM.Query_Reminder Do
Begin
First ;
Hint := DTM.Query_Reminder.FieldValues['RemindeType']+ ' : ' + DTM.Query_Reminder.FieldValues['RemindeMessage'] + #13 ;
Next ;
While Not Eof Do
Begin
Hint := Hint + DTM.Query_Reminder.FieldValues['RemindeType']+' : ' + DTM.Query_Reminder.FieldValues['RemindeMessage'] + #13 ;
Next;
End ;
End ;
SmallIcon[day][Mount].Repaint ;
End ;
End;
End ;
اگر فایلش بود شاید میشد یه چیزایی فهمید ولی الان این کد هیچ کمکی نمیکنه!
یک طور دیگه سئوالمو مطرح میکنم .در کد زیر تمامی لیبل ها ی از پیش تعریف شده پاک میشود .حال اگر یک لیبل داخل یک پنل باشد دستور زیر هیچ تاثیری روی آن ندارد چرا؟
var
i:integer;
begin
For i := 0 To ControlCount-1 Do
IF Controls[i] Is Tlabel Then
Begin
(Controls[i] as tlabel).visible:=false;
End ;
چون اگه به Help دلفی مراجعه کنید، متوجه میشید که Controls لیستی از کنترلهایی که Child کنترل مورد نظر هستند را در اختیار شما قرار میده. پس کنترل هایی مثل Label ایی که توی یک Panel هستند با خصوصیت Controls فرم قابل دسترس نیستند، چون Parent شان Panel هست، نه فرم.یک طور دیگه سئوالمو مطرح میکنم .در کد زیر تمامی لیبل ها ی از پیش تعریف شده پاک میشود .حال اگر یک لیبل داخل یک پنل باشد دستور زیر هیچ تاثیری روی آن ندارد چرا؟
از طرفی اگر در همان Help سری به لینک See Also می زدید، متوجه می شدید که خصوصیت دیگه ایی وجود داره به نام Components که اگر به توضیحاتش توجه کنید، نوشته لیست کامپوننت هایی که توسط کامپوننت موردنظر (در اینجا فرم) Owned هستند را بر میگردونه، یعنی هر کامپوننتی که Owner اش فرم مربوطه باشه با TForm.Components برگشت داده میشه. پس باید بجای Controls از Components و بجای ComponentsCount از ControlCounts استفاده بکنید تا جواب درست بگیرید.
همین مورد در پست 34# هم به شما گفته شد، ازش تشکر هم کردید، ولی همون سوال رو دوباره ادامه دادید!
این Help دلفی برای همه کاربرانش هست، مخصوص عده خاصی نیست. با یک F1 ساده روی نام کامپوننت، یا متد مربوطه در ادیتور هم فعال میشه و شما رو یکراست میبره به صفحه مربوط به اون متد، خصوصیت، رویداد، کلاس، یا تابع خاص.
وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.