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


الملفات المرفقة
.rar   Delphi.rar (الحجم : 3.72 ك ب / التحميلات : 33)
قطرة الماء تثقب الحجر ...لا بالعنف و لكن بتكرار المحاولة
الرد
#2
وعليكم السلام و رحمة الله

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

بالتوفيق
الرد
#3
جرب بشكل غرضي موجه:
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 من على سطح النموذج
بالتوفيق.
الرد
#4
شكرا اخى . بارك الله فيك و فى علمك
جارى التجربة ........
قطرة الماء تثقب الحجر ...لا بالعنف و لكن بتكرار المحاولة
الرد


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


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