انشآء Forms عند الضغط على زرButton ؟
#1
السلام عليكم ورحمة الله

اخوآني الكرام, اعمل على تجربة لإنشآء فورمات(عدة فورمات) لكن لم افلح,
اليونيت 1 و اليونيت 2 في الأسفل,
PHP كود :
unit Unit1;

interface

uses
  Windows
, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  
Dialogs, StdCtrls, Unit2;

type
  TForm1 
= class(TForm)
    
Button1: TButton;
    
procedure FormCreate(Sender: TObject);
    
procedure Button1Click(Sender: TObject);
  private
    { Private 
declarations }
    
I : integer;
  public
    { Public 
declarations }
  
end;

var
  
Form1: TForm1;
  
Frm: array of TForm2;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
SetLength
(frm, i);
frm[i] := Form2.Create(application);
frm[i].Show;
end;

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

end. 
PHP كود :
unit Unit2;

interface

uses
  Windows
, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  
Dialogs, StdCtrls;

type
  TForm2 
= class(TForm)
    
Button1: TButton;
    
Button2: TButton;
    
Edit1: TEdit;
    
ListBox1: TListBox;
    
ListBox2: TListBox;
  private
    { Private 
declarations }
  public
    { Public 
declarations }
    
Form2: TForm2;
  
end;

var
  
Form2: TForm2;

implementation

{$R *.dfm}

end. 

هناك رسآلة خلل,
Access Violation at adress 004AA981 ... Read of Adress 000000000 (شئ من هذا)
هناك شئ ناقص, لكن لم اتمكن من معرفة ماذا, الخلل يحدث عند الضغط على Button1

بارك الله لكم
فرّج همّ المهمومين يا الله
اللهم فك قيد اسرانا و اسرى المسلمين
الرد
#2
السلام عليكم

1- ممكن لم أفهم سؤالك بالضبط ؟؟
2- يمكن إقتراح بسيط ؟؟ لما لا تعمل dLL يحتوى على العديد
من الـ Forms لتسهيل الإستدعاء + تنظيم و فعالية أكثر ؟؟ أو ملف Ressource ?? .

مجرد رأي .... بالتوفيق أخي AL-MOB4RM3G .
I'M Fly Like A G6

الرد
#3
هنا الخلل
كود :
frm[i] :=[color=Red] T[/color]Form2.Create(application
);
الرد
#4
الأخ TF6M اظن فهمت سؤآلي خطأ والله اعلم,
اقصد عندي نموزج من فروم, وعند الضغط على بوتون, يتم انشآء فورم 1, وعند الضغط مرة اخرى يتم انشآؤ فورم 2,, وهكذا, يعني فورم 1 و 2 لهم نفس المكونات و الى آخره,

الأخ o15s19 جربت ذلك ولكنني لم افلح,
التجربة في المرفقات,

بارك الله لكم,


الملفات المرفقة
.rar   Create_Forms.rar (الحجم : 4.83 ك ب / التحميلات : 36)
فرّج همّ المهمومين يا الله
اللهم فك قيد اسرانا و اسرى المسلمين
الرد
#5
هنا الخلل الأخر
كود :
SetLength(frm, i[color=Red]+1[/color]);
الرد
#6
جميل اخي o15s19, بارك الله لك,
اشكرك كثيرا, :bye1:
فرّج همّ المهمومين يا الله
اللهم فك قيد اسرانا و اسرى المسلمين
الرد
#7
السلام عليكم ورحمة الله
لم افهم الغرض من تعريف array ! هل لغرض اعطاء رقم تسلسلي في الكابشن للفرم المنشأة فقط ام هناك سبب آخر ؟

طريقة اخرى ابسط :
PHP كود :
var
  
Form1: TForm1;
  
i : integer = 0;

implementation
uses Unit2
;

{
$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
  var 
Frm: TForm2;
begin
  i 
:= i + 1;
  
frm := TForm2.Create(Self);
  
frm.Caption := 'Form : ' + IntToStr(i) + ' created';
  
frm.Show;
end;

end. 
الرد
#8
إقتباس :لم افهم الغرض من تعريف array ! هل لغرض اعطاء رقم تسلسلي في الكابشن للفرم المنشأة فقط ام هناك سبب آخر ؟
نعم, هذا واحد من الأسباب, :laugh: + حتى اتمكن من الوصول الى الفورم الذي اود الوصول اليه بستخدام رقم الفورم, من ال Application main
فرّج همّ المهمومين يا الله
اللهم فك قيد اسرانا و اسرى المسلمين
الرد
#9
وعليكم السلام ورحمة الله
إذا الغرض الاستفادة من رقم تسلسلي للنماذج، يمكن الاستفادة من خدمة MDI
بضبط خاصية FormStyle للنموذج الأول على fsMDIForm وللنموذج الثاني (الابن) على fsMDIChild، بقراءة:
PHP كود :
Application.MainForm.MDIChildCount 
بالتوفيق.
اللهم احقن دماء المسلمين، لا تنسوهم بالدعاء...
الرد
#10
AL-MOB4RM3G كتب :نعم, هذا واحد من الأسباب, :laugh: + حتى اتمكن من الوصول الى الفورم الذي اود الوصول اليه بستخدام رقم الفورم, من ال Application main

كود :
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Unit2; type TForm1 = class(TForm) Button1: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } I : integer; public { Public declarations } end; var Form1: TForm1; Frm: array of TForm2; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin inc(i); SetLength(frm, i); frm[i] :=T Form2.Create(application); frm[i].Show; caption:='nbr de form crée'+inttostr(i); end; procedure TForm1.FormCreate(Sender: TObject); begin i := 0; end; end.
لكن من الافضل استعمال TList عوض array حتى يمكنك من استعمال أدوات و الدوال(Méthode) لTList إضافة و حذف فورم عند creat و destroy
ما هو هدف البرنامج ؟
الرد


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


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