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=3592)



تحويل كود الى اجراء منفصل - saiedcracker - 13-11-2011

السلام عليكم و رحمة الله
عندى كود بسيط يجعل شكل معين يتحرك داخل الفورم بلا توقف ,
نفذت الكود بشكل عادى فتم بلا مشاكل و لكن عند محاولة عمله كاجراء منفصل ليستخدم مع اى شكل
اخر و بسرعة مختلفة , ظهرت المشكلة .
مرفق سورس كود للحالتين


تحويل كود الى اجراء منفصل - محمد عبد العزيز - 15-11-2011

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

المتغيرين PosX و PosX يجب ان يكونا Global يتم تعريفهما خارج الاجاراء
وبما انه لديك شكلين TShape تحتاج متغيرين لكل شكل اي اربعة

بالتوفيق



تحويل كود الى اجراء منفصل - kachwahed - 15-11-2011

جرب بشكل غرضي موجه:
PHP كود :
unit Unit1;

interface

uses
  Classes
, Graphics, Controls, Forms, ExtCtrls;

type
  TAnimatedShape 
= class(TShape)
  private
    
FSpeedX, FSpeedY: Integer;
  public
    
constructor Create(InitSpeedX, InitSpeedY: Integer; Owner: TComponent); reintroduce;
    
procedure Animate;
    
property SpeedX: Integer read FSpeedX;
    
property SpeedY: Integer read FSpeedY;
  
end;
  
TForm1 = class(TForm)
    
Timer1: TTimer;
    
procedure Timer1Timer(Sender: TObject);
    
procedure FormCreate(Sender: TObject);
  private
    
Shape1, Shape2: TAnimatedShape;
  
end;

var
  
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Shape1
.Animate;
  
Shape2.Animate;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  DoubleBuffered 
:= True;//Prevent flicker
  
Shape1 := TAnimatedShape.Create(3, 5, Self);
  
Shape2 := TAnimatedShape.Create(5, 10, Self);
end;

{ 
TAnimatedShape }

procedure TAnimatedShape.Animate;
begin
    
If Left > Parent.ClientWidth - Width - 5 Then
      Begin
       Left 
:= Parent.ClientWidth - Width - 5 ;
       
FSpeedX := - FSpeedX;
       
Brush.Color := ClRed;
      
End
    
Else If Left < 0 Then
    Begin
     Left 
:= 0;
     
FSpeedX := - FSpeedX;
     
Brush.Color := ClGreen;
    
End;
   If 
Top > Parent.Clientheight - height - 5 Then
      Begin
       Top 
:= Parent.ClientHeight - height - 5 ;
       
FSpeedY := - FSpeedY;
       
Brush.Color := ClBlue;
      
End
    
Else If Top < 0 Then
    Begin
     Top 
:= 0;
     
FSpeedY := - FSpeedY;
     
Brush.Color := ClSilver;
    
End;
    
Left := Left + FSpeedX;
    
Top := Top + FSpeedY;
end;

constructor TAnimatedShape.Create(InitSpeedX, InitSpeedY: Integer; Owner: TComponent);
begin
  inherited Create
(Owner);
  
Parent := TWinControl(Owner);
  
Shape := stCircle;
  
FSpeedX := InitSpeedX;
  
FSpeedY := InitSpeedY;
end;

end. 
حذف المكونات TShape من على سطح النموذج
بالتوفيق.



تحويل كود الى اجراء منفصل - saiedcracker - 16-11-2011

شكرا اخى . بارك الله فيك و فى علمك
جارى التجربة ........