delphi4arab منتديات دلفي للعرب
كيف اقوم بتشغيل فورم اشأته برمجياً في كل مرة يعمل البرنامح بها - نسخة قابلة للطباعة

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



كيف اقوم بتشغيل فورم اشأته برمجياً في كل مرة يعمل البرنامح بها - M_Mori2010 - 12-10-2012

السلآم عليكم ورحمة الله وبركاته ...

ماهي طريقة تشغيل فورم انشأته برمجياً بهذه الطريقة :

PHP كود :
var
  
i: integer;
  
F:TForm5;
begin
 F 
:= TForm5.Create(nil);
  
f.Name:='R'+se1.Text;
  
f.Sr1.Port:=se1.Value;
  
f.Sr1.ThreadCacheSize:=strToint(cbb1.Text);
  
f.Sr2.Port:=se1.Value+1;
  
f.Sr2.ThreadCacheSize:=strToint(cbb1.Text);
  
f.Sr3.Port:=se1.Value+2;
  
f.Sr3.ThreadCacheSize:=strToint(cbb1.Text);
  
f.n1.Port:=se1.Value+3;
  
f.n1.ThreadCacheSize:=strToint(cbb1.Text);
  
f.n2.Port:=se1.Value+4;
  
f.n2.ThreadCacheSize:=strToint(cbb1.Text);
  
f.Sr1.Active:=True;
  
f.Sr2.Active:=True;
  
f.Sr3.Active:=True;
  
f.n1.Active:=True;
  
f.n2.Active:=True;
  
f.ClE3.Text:=Edit1.Text;
  
f.cl2.Text:=Edit2.Text;
  
f.tsNt.Caption:=Ow1.Text;
  
f.Caption:=Ow1.Text;
  
f.Ow1.Text:='0';
  
f.Eedt1.Text:='<Center> Welcom To  Chat'+' - ' + Ow1.Text;
  
f.se1.Value:=se1.Value;
  
f.ClE2.Text:=cbb1.Text;
  
f.Show;
end; 

وادرجت له كود حفظ بصيغة Sav لكن المشكلة انه لايعمل عند اغلاق البرنامج وتشغيله مرة اخرى

فما الحل برأيكم ؟


كيف اقوم بتشغيل فورم اشأته برمجياً في كل مرة يعمل البرنامح بها - Lam.Abdeldjalil - 12-10-2012

و عليكم السلام و رحمة الله وبركاته

من المفروض يعمل ، حاول وضع كودك بالصيغة
كود :
F := TForm2.Create(nil); try f.Name:='R'; f.Caption:='RR'; F.ShowModal; finally F.Free; end;
+ لا أرى إستعمالا للمتغير i
ماذا تقصد بـ " وادرجت له كود حفظ بصيغة Sav " ؟


كيف اقوم بتشغيل فورم اشأته برمجياً في كل مرة يعمل البرنامح بها - M_Mori2010 - 12-10-2012

آخي أنه يعمل قبل اغلاق البرنامج لكن الذي آُريدْه هو تشغيله بعد اغلاق البرنامج شكراً لك
عمل المتغير i هو شيء اخر لكن على سرعة النسخ نسيت محوه
آما بالنسبة لـ Sav هذا هو الكود الذي هو عبارة عن حفظ الفورم :
PHP كود :
public
  
constructor Create(AOwner: TComponent); override; // (1)
  
procedure BeforeDestruction; override;
  
end;

var
  
Form5: TForm5;
     
PreservePath: string; // (3)
implementation
uses Unit1
, Unit4, Unit9, Unit3, Unit2;
{
$R *.dfm}
procedure TForm5.BeforeDestruction;
begin
  inherited
;

  
with TFileStream.Create(PreservePath + ClassName + '.sav',    fmCreate) do
  try
    
WriteComponent(Self);
  finally
    
Free;
  
end;
    
end;
Constructor TForm5.Create(AOwner: TComponent);
begin
  PreservePath 
:= ExtractFilePath(Application.ExeName) +
    
'Preserve';
  if 
not DirectoryExists(PreservePath) then
    CreateDir
(PreservePath);
  
PreservePath := PreservePath + '\';

  if FileExists(PreservePath + name + '
.sav') then
  begin
    CreateNew(AOwner, 0);
    with TFileStream.Create(PreservePath + name + '
.sav',
                            fmOpenRead or fmShareDenyWrite) do
    try
      ReadComponent(Self);
    finally
      Free;
    end;
  end
  else

  inherited Create(AOwner);

end; 
ما رآيك بالحل الاتي :
البيانات التي تقوم بنسخ الفورم وعمله موجودة ومخزنة في ListView ما رأيك لو قمت بعمل
اعادة تكوين في كل تشغيل للبرنامج اقوم به لأن البرنامج هو عبارة عن سيرفر لبرنامج دردشة ؟
هل هو حل مناسب ؟

شكراً لك وجزاك الله كل خير


كيف اقوم بتشغيل فورم اشأته برمجياً في كل مرة يعمل البرنامح بها - Lam.Abdeldjalil - 13-10-2012

السلام عليكم

طالع حول ReadComponent
كود :
http://docwiki.embarcadero.com/Libraries/XE3/en/System.Classes.TStream.ReadComponent
ماذا لو حصل مكروه للملف '.sav' :eek: ؟

* قم بإنشاء كل شيئ برمجيا أو في وقت التصميم
+ حمل/إرفع الخصائص فقط من/في ملف أو قاعدة بيانات برمجيا أو أوتوماتيكيا بـ TFormStorage كمثال ( إذا حصل عطب للملف/القاعدة الخصائص تأخذ القيم الإفتراضية )

بالتوفيق


كيف اقوم بتشغيل فورم اشأته برمجياً في كل مرة يعمل البرنامح بها - SMP3 - 13-10-2012

كود :
آخي أنه يعمل قبل اغلاق البرنامج لكن الذي آُريدْه هو تشغيله بعد اغلاق البرنامج شكراً لك
لا يمكن عمل هذا لان عند غلق البرنامج ستتدمر جميع الكائنات ..
هناك حلان : الحل الأول يعتمد على تصميم تطبيق آخر يحتوي على الفورم الذي تريد عرضه بعد ان تقوم بغلق البرنامج
عند الحدث غلق البرنامج قم بتشغيل التطبيق المرفق
الحل الثاني استخدام ال Command Line .. عند غلق البرنامج أعد فتحه مع تمرير برامتر يخبر البرنامج بعرض الفروم x


كيف اقوم بتشغيل فورم اشأته برمجياً في كل مرة يعمل البرنامح بها - M_Mori2010 - 13-10-2012

أخوتي الكرام الحمدلله حلت المشلكة واليكم الحل :

أولأ أنشأت ServerSocket و ClinetSocket على فورم واحد بعنوان 127.0.0.1

ثم وضعت تايمر بتوقيت 100 جزء يقوم بفتح الاتصال في ClinetSocket ومن ثم يوم بارسال جملة اليكم الكود :

هذا بالنسبة للسيرفر :

PHP كود :
procedure TForm10.CheckNameClientRead(Sender: TObject;
  
Socket: TCustomWinSocket);
 var   
s,r,str,name,all_Room,roomcontrol:string;
      
i,n:integer;
  
begin
   S
:=Socket.ReceiveText;
   
n:=pos('@',S);
   if 
n>0 then
   begin
     str
:=copy(S,1,n-1);
     if 
str='*Mr2*' then
      begin
    
for i := 0 to lvl1.Items.Count - 1 do
    
all_Room:=all_Room
    
+lvl1.Items[i].subitems[0] +'^%'
    
+lvl1.Items[i].subitems[1]+'$%'
    
+lvl1.Items[i].subitems[2]+'&)'
    
+lvl1.Items[i].SubItems[3]+'&('
    
+lvl1.Items[i].SubItems[4]+'&!'
    
+lvl1.Items[i].SubItems[5]+'&#'
    
+lvl1.Items[i].SubItems[6]+'&%'
    
+lvl1.Items[i].SubItems[7]+'&^'
    
+lvl1.Items[i].SubItems[8]+'&&'
    
+lvl1.Items[i].SubItems[9]+'(|'
    
+lvl1.Items[i].SubItems[10]+'!!'
    
+lvl1.Items[i].SubItems[11]+'!#'
    
+lvl1.Items[i].SubItems[12]+'!$'
    
+lvl1.Items[i].SubItems[13]+'!%'
    
+lvl1.Items[i].SubItems[14]+'!^'
    
+lvl1.Items[i].SubItems[15]+'!&'
    
+lvl1.Items[i].SubItems[16]+'!*'
    
+lvl1.Items[i].SubItems[17]+'!('
    
+lvl1.Items[i].SubItems[18]+'!)'
    
+lvl1.Items[i].SubItems[19]+'#!'
    
+lvl1.Items[i].SubItems[20]+'##'
    
+lvl1.Items[i].SubItems[21]+'#$'
    
+lvl1.Items[i].SubItems[22]+'#%'
    
+lvl1.Items[i].SubItems[23]+'#&'+'@';
    for 
i:=0 to CheckName.Socket.ActiveConnections-1 do
    
CheckName.Socket.Connections[i].SendText('*Mr2*@'+all_Room);
   
end;
   
end;
  
end; 

وهذا بالنسبة لـ كلاينت


PHP كود :
procedure TForm10.clntsckt1Read(Sender: TObject; Socket: TCustomWinSocket);
var 
str1,name,s,str2,nei_rong:string;
    
n,i:integer;
      
ni_cheng:string;
        
F:TForm5;
begin
str1
:=socket.ReceiveText;
str2:=copy(str1,1,pos('@',str1)-1);
      if 
str2='*Mr2*' then
      begin
        str1
:=copy(str1,pos('@',str1)+1,length(str1)-pos('@',str1));
        while 
str1<>'' do
        
begin
         s
:=copy(str1,1,pos('@',str1)-1);

  
F := TForm5.Create(nil);
  
f.Name:='R'+copy(s,pos('^%',s)+2,pos('$%',s)-pos('^%',s)-2);  //اسم الفورم
  
f.tsNt.Caption:=copy(s,1,POS('^%',s)-1);     // اسم الغرفة
  
f.Caption:=copy(s,1,POS('^%',s)-1);          //اسم الغرفة
                             //بورت الاتصال
  
f.Sr1.Port:=StrToInt(copy(s,pos('^%',s)+2,pos('$%',s)-pos('^%',s)-2));
  
f.Sr2.Port:=StrToInt(copy(s,pos('^%',s)+2,pos('$%',s)-pos('^%',s)-2))+1;
  
f.Sr3.Port:=StrToInt(copy(s,pos('^%',s)+2,pos('$%',s)-pos('^%',s)-2))+2;
  
f.n1.Port:= StrToInt(copy(s,pos('^%',s)+2,pos('$%',s)-pos('^%',s)-2))+3;
  
f.n2.Port:= StrToInt(copy(s,pos('^%',s)+2,pos('$%',s)-pos('^%',s)-2))+4;
                            
//
                            //ثيرد الاتصال
  
f.Sr1.ThreadCacheSize:=StrToInt(copy(s,pos('$%',s)+2,pos('&)',s)-pos('$%',s)-2));
  
f.Sr2.ThreadCacheSize:=StrToInt(copy(s,pos('$%',s)+2,pos('&)',s)-pos('$%',s)-2));
  
f.Sr3.ThreadCacheSize:=StrToInt(copy(s,pos('$%',s)+2,pos('&)',s)-pos('$%',s)-2));
  
f.n1.ThreadCacheSize:=StrToInt(copy(s,pos('$%',s)+2,pos('&)',s)-pos('$%',s)-2));
  
f.n2.ThreadCacheSize:=StrToInt(copy(s,pos('$%',s)+2,pos('&)',s)-pos('$%',s)-2));
                            
//
  
f.ClE3.Text:=copy(s,pos('&%',s)+2,pos('&^',s)-pos('&%',s)-2);  //التاريخ
  
f.cl2.Text:=copy(s,pos('&^',s)+2,pos('&&',s)-pos('&^',s)-2);   //التاريخ
                            //
  
f.edt18.Text:=copy(s,pos('&(',s)+2,pos('&!',s)-pos('&(',s)-2); // السكيورتي
  
f.e1.Text:='0';
  
f.Ow1.Text:=copy(s,pos('&&',s)+2,pos('(|',s)-pos('&&',s)-2);//رقم الصورة المفعلة
  
f.Eedt1.Text:=copy(s,pos('!!',s)+2,pos('!#',s)-pos('!!',s)-2);//رابط
  
f.se1.Value:=StrToInt(copy(s,pos('^%',s)+2,pos('$%',s)-pos('^%',s)-2));//رقم الغرفة
  
f.ClE2.Text:=copy(s,pos('$%',s)+2,pos('&)',s)-pos('$%',s)-2);//حجم الغرفة
  
f.Eow1.Text:=copy(s,pos('&!',s)+2,pos('&#',s)-pos('&!',s)-2);//الاونر
  
f.Erla1.Text:=copy(s,pos('(|',s)+2,pos('!!',s)-pos('(|',s)-2);//المود العام

  
f.edt5.Text:=copy(s,pos('!$',s)+2,pos('!%',s)-pos('!$',s)-2);//اعدادات الاونر
  
f.edt13.Text:=copy(s,pos('!%',s)+2,pos('!^',s)-pos('!%',s)-2);//الغرفة صامتة
  
f.edt14.Text:=copy(s,pos('!^',s)+2,pos('!&',s)-pos('!^',s)-2);//اعدادات المود
  
f.Edit2.Text:=copy(s,pos('!&',s)+2,pos('!*',s)-pos('!&',s)-2);//باسورد الغرفة
  
f.Edit1.Text:=copy(s,pos('!*',s)+2,pos('!(',s)-pos('!*',s)-2);//تفعيل الكتابة
  
f.Edt15.Text:=copy(s,pos('!(',s)+2,pos('!)',s)-pos('!(',s)-2);//الكتابة الخاصة
  
f.Edt16.Text:=copy(s,pos('!)',s)+2,pos('#!',s)-pos('!)',s)-2);//تفعيل الصوت
  
f.Edt17.Text:=copy(s,pos('#!',s)+2,pos('##',s)-pos('#!',s)-2);//تفعيل الصورة
  
f.se4.Text:=copy(s,pos('##',s)+2,pos('#$',s)-pos('##',s)-2);//المايكريفونات
  
f.se2.Text:=copy(s,pos('#$',s)+2,pos('#%',s)-pos('#$',s)-2);//ادوار الانتظار
  
f.se3.Text:=copy(s,pos('#%',s)+2,pos('#&',s)-pos('#%',s)-2);//التحدث بالثواني
  
for i := 0 to lv1.Items.Count - 1 do
  if  
lv1.Items[i].subitems[5]=copy(s,pos('^%',s)+2,pos('$%',s)-pos('^%',s)-2) then begin
  with f
.lv2.Items.Add do  begin
  Caption
:=IntToStr(f.lv2.Items.Count);
  
SubItems.Add(lv1.Items[i].subitems[0]);
  
SubItems.Add(lv1.Items[i].subitems[1]);
  
SubItems.Add(lv1.Items[i].subitems[2]);
  
SubItems.Add(lv1.Items[i].subitems[3]);
  
SubItems.Add(lv1.Items[i].subitems[4]);
  
end;
  
end;
   for 
i := 0 to lvlv2.Items.Count - 1 do
  if  
lvlv2.Items[i].subitems[2]=copy(s,pos('^%',s)+2,pos('$%',s)-pos('^%',s)-2) then begin
  with f
.lv4.Items.Add do  begin
  Caption
:=IntToStr(f.lv4.Items.Count);
  
SubItems.Add(lvlv2.Items[i].subitems[0]);
  
SubItems.Add(lvlv2.Items[i].subitems[1]);
  
SubItems.Add(lvlv2.Items[i].subitems[2]);
  
end;
  
end;
  
f.Sr1.Active:=True;
  
f.Sr2.Active:=True;
  
f.Sr3.Active:=True;
  
f.n1.Active:=True;
  
f.n2.Active:=True;
  
f.Show;
  
f.e1.Clear;
  
f.e1.Text:='0';
  
f.Hide;
  
str1:=copy(str1,pos('@',str1)+1,length(str1)-pos('@',str1));
end;
Form1.n3.Open;
end; 

بحيث يقوم في كل تشغيل بعمل تلقائي لكل فورم لوحده وبعد نهايته من العمل يقوم بتشغيل السوكت الرئيسي

شكراً لكم آخوتي