كيفية تعبئة StringGrid ببيانات تقويم ميلادي
#1
السلام عليكم ورحمة الله وبركاته وكل عام وانتم بخير
لدي استفسار حول تعبئة جدول بمعطيات ماخوذة من تقويم صغير

قمت بتقويم صغير ب ImgArray

كما هو موضح بالمرفق استعمل ال StringGrid بدل من الimage
كود :
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,ExtCtrls, ComCtrls, Buttons; type TForm1 = class(TForm) MonthBtn: TButton; Shape5: TShape; StaticText9: TStaticText; StaticText8: TStaticText; StaticText7: TStaticText; StaticText3: TStaticText; StaticText5: TStaticText; StaticText11: TStaticText; StaticText4: TStaticText; Shape1: TShape; SpeedButton1: TSpeedButton; SpeedButton2: TSpeedButton; procedure FormCreate(Sender: TObject); procedure MonthBtnClick(Sender: TObject); procedure SpeedButton1Click(Sender: TObject); procedure SpeedButton2Click(Sender: TObject); private { Private declarations } ImgArray: Array[1..42] of Timage; // Array to hold the days images ... x,y: Integer; GD: Integer; NrOfDays: Integer; Pos:String; Year,Month,day:word; // current year month and day ... ADate:TDate; Procedure FindToday; Procedure DayClick(Sender: TObject); Procedure FindFirstDayOfMonth; Procedure CalculateDates; Procedure CreateImages1; public { Public declarations } MonthNo:Integer; end; var Form1: TForm1; implementation {$R *.DFM} {$R Images3.Res} //----------------------------------------------------------------------- procedure TForm1.FormCreate(Sender: TObject); Var i:Integer; Begin DecodeDate(Date,year,month,Day); CreateImages1; END; //----------------------------------------------------------------------- Procedure TForm1.CreateImages1; Var i: Byte; Begin DateSeparator:='.'; GD:=1; x := 1; y := 84; for i := 1 to 42 do begin ImgArray[i]:=TImage.Create(self); with ImgArray[i] do begin Name := 'Img'+IntToStr(i); Parent := Self; Height := 30; Width := 50; Picture.Bitmap.LoadFromResourceName(hInstance,'DayOff'); Left := x+45; Top := y; OnClick := DayClick; Tag := 0; Hint:=''; ShowHint:=True; End; x := x + 41; IF x>=280 then begin x:=1; y:=y+22; End; End; FindToday; End; //----------------------------------------------------------------------- Procedure TForm1.FindToday; Var i:Byte; Begin if Pos=IntToStr(Day)+IntToStr(Month)+IntToStr(Year) then exit; MonthBtnClick(self); for i:=1 to 42 do if ImgArray [i].Tag=Day then begin DayClick(ImgArray[i]); Break; End; End; //----------------------------------------------------------------------- procedure TForm1.MonthBtnClick(Sender: TObject); begin Case MonthNo of 0,2,4,6,7,9,11: NrOfDays:=31; 3,5,8,10: NrOfDays:=30; 1: begin if (IsLeapYear(2010)) then NrOfDays:=29 else NrOfDays:=28; end; end; CalculateDates; End; //----------------------------------------------------------------------- procedure TForm1.SpeedButton1Click(Sender: TObject); begin FindToday; end; //----------------------------------------------------------------------- Procedure TForm1.CalculateDates; Var i, WeekDay: Byte; Begin Screen.Cursor:=crHourGlass; Shape1.Visible:=False; WeekDay:=1; DateSeparator:='.'; GD:=1; For i:=1 to 37 do begin with ImgArray[i] do begin Picture.Bitmap.Canvas.Brush.Style:=bsClear; ADate:=StrToDate('1.'+'9'+'.'+'2010'); If (GD=1) then begin If (DayOfWeek(ADate)=WeekDay) Then begin Picture.Bitmap.Canvas.Font.Color:=clRed; Picture.Bitmap.Canvas.Font.Size:=10; Picture.Bitmap.Canvas.TextOut(15,1,IntToStr(GD)); Tag:=GD; GD:=GD+1; End else begin Cursor:=crDefault; Tag:=0; WeekDay:=WeekDay+1; Hint:=''; End; End else if (GD<=NrOfDays) and (GD>1) then begin Picture.Bitmap.Canvas.Font.Color:=clBlack; Picture.Bitmap.Canvas.Font.Size:=10; Picture.Bitmap.Canvas.TextOut(15,1,IntToStr(GD)); Tag:=GD; GD:=GD+1; End else begin Tag:=0; WeekDay:=WeekDay+1; Hint:=''; End; // if End; // with End; //For FindFirstDayOfMonth; Screen.Cursor:=crDefault; End; //----------------------------------------------------------------------- Procedure TForm1.FindFirstDayOfMonth; var i: word; begin for i:=1 to 37 do if ImgArray[i].Tag=1 then begin DayClick(ImgArray[i]); Break; End; End; //----------------------------------------------------------------------- Procedure TForm1.DayClick(sender: TObject); VAR Day_No,Month_No : Integer; thweel : Tdate; aDay_Name,Day_Name,aMonth_Name,Month_Name,Dook:String; Begin If (TImage(sender).Tag<>0) then Begin pos:=IntToStr(TImage(sender).Tag)+'9'+'2010'; Shape1.Left:=TImage(sender).Left-1; Shape1.top:=TImage(sender).Top-1; Shape1.Cursor:=TImage(sender).Cursor; Shape1.Hint:=TImage(sender).Hint; Shape1.BringToFront; Shape1.Visible:=True; End; End; //----------------------------------------------------------------------- procedure TForm1.SpeedButton2Click(Sender: TObject); begin Close; End; //----------------------------------------------------------------------- END.
الرد
#2
وعليكم السلام ورحمة الله وبركاته
أرفق المشروع (Res.*)
الرد
#3
وهذا ملف الريسورس


الملفات المرفقة
.rar   Images3.rar (الحجم : 223 بايت / التحميلات : 42)
الرد
#4
إقتباس :وهذا ملف الريسورس
لم ترفق كل المشروع...

بصفة عامة...
للوصول إلى أي خانة:
كود :
property Cells[ACol, ARow: Integer]
سطر/عمود:
كود :
property Cols[Index: Integer] property Rows[Index: Integer]
عدد الأسطر/الأعمدة:
كود :
property RowCount; property ColCount;
يمكنك تخزين أي شيء واسترجاعه من خلال:
كود :
property Objects[ACol, ARow: Integer]: TObject
استخدم حدث الرسم OnDrawCell
كود :
procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);

مثال لرسم صورة:
كود :
StringGrid1.Canvas.StretchDraw(StringGrid1.CellRect(k,j), ImgArray[i].Picture.Bitmap);
للمزيد طالع الـ Help
بالتوفيق.
الرد
#5
شكرا مشرفنا العزيز على الرد
وكل عام وانت بخير وجميع اسرة منتدانا العزيز وجميع الاعضاء الكرام

عزيزي انا ما اقدرت ان اوضف الجدول محل الصورة لكي اعرض ارقام التاريخ

كود :
For i:=1 to 37 do begin with ImgArray[i] do begin Picture.Bitmap.Canvas.Brush.Style:=bsClear; ADate:=StrToDate('1.'+'9'+'.'+'2010'); If (GD=1) then begin If (DayOfWeek(ADate)=WeekDay) Then begin Picture.Bitmap.Canvas.Font.Color:=clRed; Picture.Bitmap.Canvas.Font.Size:=10; Picture.Bitmap.Canvas.TextOut(15,1,IntToStr(GD)); هنا يبدأ بطباعة التاريخ كيف يطبع في ال stringGrid بدلا من picture.bitmap.canvace فقط استبدل الصورة بجدول فقط Tag:=GD; GD:=GD+1;
هذا المشروع كاملا مرفق
عسى نلقى الحل عندكم وشكرا مقدما


الملفات المرفقة
.rar   StringGrid.rar (الحجم : 5.09 ك ب / التحميلات : 54)
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم