الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سؤال عن طريقة انشاء برنامج كبير بالاعتماد على الإطارات (frames)

بدأه imadma في 12 أكتوبر 2012 · 0 رد · 769 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1

السلام عليكم

ارجو أن تساعدوني في حل مشكلتي

أن لا أحب البرامج التي تنبثق فيها الكثير من الفورمز Forms

لذلك قررت أن اعتمد في البرنامج الجديد الذي أعمل عليه على الإطارات الكثيرة التي أنشئها على Panel تتوسط الإطار العام للبرنامج

طبعا ليكون البرنامج خفيفا لا يمكن وضع كل الإطارات في زمن التصميم (Design -Time) والانتقال بينها بخاصية الإظهار والإخفاء (Show/Hide) بل يجب إنشائها ديناميكيا في اثناء تنفيذ البرنامج (Run Time)

المشكلة أنني أريد اضافة خاصية الرجوع إلى الإطار السابق دون فقدان البيانات المدخلة عيه (back) وذلك يوفر مرونة كبيرة للمستخدم

طبعا عدد الإطارات التي يمكن الرجوع إليها سيكون محدودا ( مثلاٌ 4 أو 5)

-----------------

لتحقيق ذلك فكرت في الاعتماد على PageControl تحتوي على أربعة Tabsheet (قمت بوضع خاصية Tabvisible إلى False)

وقمت بكتابة التالي

  private
	FCurrentFrame: TFrame;
	procedure SetCurrentFrame(Value: TFrame);
  public
	property CurrentFrame: TFrame read FCurrentFrame write SetCurrentFrame;
  end;

var
  Form1: TForm1;
  n: integer;
  // Const  Max_Frame_History = 3;
implementation

uses Frame01, Frame02, Frame03;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin

 if  Form1.VirtualTable1.Locate('Frame', 'Frame1', [loCaseInsensitive]) then
   Form1.PageControl1.ActivePageIndex:= Form1.VirtualTable1Num.AsInteger

  else
  begin
  Form1.CurrentFrame := TFrame1.Create(nil);
  with Form1.VirtualTable1 do
  begin
  edit1.Text:=Inttostr(PageControl1.ActivePageIndex);
	Locate('Num', PageControl1.ActivePageIndex, [loCaseInsensitive]);
	edit;
	VirtualTable1Frame.AsString := 'Frame1';
	Post
  end;
  end;


end;

procedure TForm1.Button2Click(Sender: TObject);
begin

 if  Form1.VirtualTable1.Locate('Frame', 'Frame2', [loCaseInsensitive]) then
   Form1.PageControl1.ActivePageIndex:= Form1.VirtualTable1Num.AsInteger

  else
  begin
  Form1.CurrentFrame := TFrame2.Create(nil);
  with Form1.VirtualTable1 do
  begin
	Locate('Num', PageControl1.ActivePageIndex, [loCaseInsensitive]);
	edit;
	VirtualTable1Frame.AsString := 'Frame2';
	Post
  end;
  end;

end;

procedure TForm1.Button3Click(Sender: TObject);
begin

 if  Form1.VirtualTable1.Locate('Frame', 'Frame3', [loCaseInsensitive]) then
   Form1.PageControl1.ActivePageIndex:= Form1.VirtualTable1Num.AsInteger

  else
  begin
  Form1.CurrentFrame := TFrame3.Create(nil);
  with Form1.VirtualTable1 do
  begin
	Locate('Num', PageControl1.ActivePageIndex, [loCaseInsensitive]);
	edit;
	VirtualTable1Frame.AsString := 'Frame3';
	Post
  end;
  end;

end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  Form1.CurrentFrame := nil;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  	n:=0;
end;



procedure TForm1.SetCurrentFrame(Value: TFrame);
begin
  if Value <> FCurrentFrame then
  begin
	if assigned(FCurrentFrame) then
  	FreeAndNil(FCurrentFrame);
	FCurrentFrame := Value;
	if assigned(FCurrentFrame) then
	begin
  	if PageControl1.ActivePageIndex = 0 then
  	if  n=0 then
  	FCurrentFrame.Parent := TabSheet1
  	else
    	FCurrentFrame.Parent := TabSheet2
  	else if PageControl1.ActivePageIndex = 1 then
    	FCurrentFrame.Parent := TabSheet2
  	else if PageControl1.ActivePageIndex = 2 then
    	FCurrentFrame.Parent := TabSheet3
  	else if PageControl1.ActivePageIndex = 3 then
    	FCurrentFrame.Parent := TabSheet1;
  	if PageControl1.ActivePageIndex<3 then
  	if  n=0 then
   	n:=1
  	else
   	PageControl1.ActivePageIndex := PageControl1.ActivePageIndex + 1
  	else
  	PageControl1.ActivePage:= TabSheet1;
  	FCurrentFrame.Align := alClient;

	end;
  end;
end;

لم يعمل معي هذا الكود للأسف ولم أفهم لماذا

تم تعديل هذه المشاركة بواسطة imadma في 12 أكتوبر 2012 في 23:53

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…