delphi4arab منتديات دلفي للعرب
كيفية تعبئة StringGrid ببيانات تقويم ميلادي - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15)
+--- الموضوع : كيفية تعبئة StringGrid ببيانات تقويم ميلادي (/showthread.php?tid=2397)



كيفية تعبئة StringGrid ببيانات تقويم ميلادي - zaferms - 09-09-2010

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

قمت بتقويم صغير ب 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.



كيفية تعبئة StringGrid ببيانات تقويم ميلادي - kachwahed - 09-09-2010

وعليكم السلام ورحمة الله وبركاته
أرفق المشروع (Res.*)



كيفية تعبئة StringGrid ببيانات تقويم ميلادي - zaferms - 09-09-2010

وهذا ملف الريسورس


كيفية تعبئة StringGrid ببيانات تقويم ميلادي - kachwahed - 10-09-2010

إقتباس :وهذا ملف الريسورس
لم ترفق كل المشروع...

بصفة عامة...
للوصول إلى أي خانة:
كود :
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
بالتوفيق.



كيفية تعبئة StringGrid ببيانات تقويم ميلادي - zaferms - 11-09-2010

شكرا مشرفنا العزيز على الرد
وكل عام وانت بخير وجميع اسرة منتدانا العزيز وجميع الاعضاء الكرام

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

كود :
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;
هذا المشروع كاملا مرفق
عسى نلقى الحل عندكم وشكرا مقدما