كيف الرسم و وضع تاثيرت على مكونات دلفي
#1
السلام عليكم ورحمة الله وبركاتة

هو كيف اضع تاثيرات جميله على مكونات دلفي سؤاً كان المكون Image , Shape , Button... إلخ

مثال : جعل المكوت Button شفاف ...
مثال : جعل المكون Image يقوم بدوران عندما اضغط عليه ...
مثال : جعل المكون Image يضيء او يشع نور عندما يكون مؤشر الفأرة عليه ...
مثال : رسم شكل نجمة او سيارة او اي شيكل كان على Button او Image او Shape او غيرة من المكونات

وشكراً لحسن القراءة
الرد
#2
جعل المكوت Button شفااف ...

لن تستطيع عمل ذلك .. بسبب أن ال Button يقوم برسمه الوينداوز
يمكنك المحاولة باعادة رسم Button جديد .. اطلع على الكلاس TSpeedButton فقد تم رسمه من البداية بدون استخدام الوينداوز لرسمه .

جعل المكون Image يقوم بدوران عندما اضغط عليه ...

صعبة قليلا بسبب قصور دوال ال gdi على التعامل مع ال Float Number
يمكنك استخدام GDI+ ..ستبهرك !!!

جعل المكون Image يضيء او يشع نور عندما يكون مؤشر الفأرة عليه

هذه بسيطة كل ما عليك أن تفعله اقتناص الأحداث الخاصة بالماوس ثم رسم مستطيل على المكون ..

رسم شكل نجمة او سيارة او اي شيكل كان على Button او Image او Shape او غيرة من المكونات

استخدم ال GDI+ , أو حتى يمكنك استخدام ال GDI باستخدام المسارات path : الدالة Polygon
الرد
#3
مثال بسيط لجعل Button شفاف :
PHP كود :
unit Unit2;

interface

uses
  Winapi
.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Buttons, Vcl.StdCtrls;
type  TButtonX =class(Vcl.StdCtrls.TButton)
  private
  var 
FParent : TWinControl ;
  
procedure SetParent(AParent: TWinControl);

protected
  
procedure CreateParams(var Params: TCreateParams); override;
  
procedure CreateWnd; override;
  
procedure CreateWindowHandle(const Params: TCreateParams);override;
public
  
constructor Create(AOwner: TComponent); override;
  
//published property Parent : TWinControl read FParent write SetParent;

end;
type
  TForm2 
= class(TForm)
    
SpeedButton1: TSpeedButton;
    
Button1: TButton;
    
procedure Button1Click(Sender: TObject);
    
procedure SpeedButton1Click(Sender: TObject);
  private
    { Private 
declarations }
  public
    { Public 
declarations }
  
end;

var
  
Form2: TForm2;

implementation
// BY SMP3 .
{$R *.dfm}

var 
s:TButtonX ;
procedure TForm2.Button1Click(Sender: TObject);

begin
s
:=TButtonX.Create(self);
s.Left:=0;
s.Top:=0;
s.Parent:=self;

end;

procedure TForm2.SpeedButton1Click(Sender: TObject);
begin

end
;

{ 
TButton }

constructor TButtonX.Create(AOwner: TComponent);
begin
  inherited
;
 
Caption:=Self.ToString;
 
Width:=100;
 
Height:=30;
end;

procedure TButtonX.CreateParams(var Params: TCreateParams);
begin

   inherited CreateParams
(Params);
    
Params.Style:=WS_POPUP ;
    
Params.ExStyle := Params.ExStyle or WS_EX_LAYERED;

end;

procedure TButtonX.CreateWindowHandle(const Params: TCreateParams);
begin
inherited CreateWindowHandle
(Params);
    
SetLayeredWindowAttributes(Handle,ColorToRGB($0000FF00), 200, LWA_COLORKEY or LWA_ALPHA);
end;

procedure TButtonX.CreateWnd;
begin
  inherited
;

end;

procedure TButtonX.SetParent(AParent: TWinControl);
begin
if AParent <> FParent  then   begin
   FParent
:=AParent;
 
//  Left := Left + AParent.Left ;
   //Top  := Top  + AParent.Top;
end;
end;

end. 
كما تلاحظ فان الكلاس TButtonX مشتق من TButton .. و باستخدام الستايل [COLOR="DarkOrange"]WS_POPUP ..
يعني لن تتمكن من اسناد خاصية أب لل TButtonX .. لكن ستحصل على زر شفاف في المقابل ..
لهذا السبب قلت أنه من المستحيل تطبيقه على ال TButton
بعد أن وصلت اليك الفكرة : حاول أن تقوم باعادة رسم Button جديد مشتق من TWinControl or TGraphicControl .. و ستحصل على نتائج مرضية ..
أما ان أردت الاستمرار في استخدام ال TButtonX المشتق ب TButton فعليك باقتناص WndProc للأب (الفورم) ثم تغيير موقع الزر عندما يتم تحريك الأب -وهكذا يتم ايهام المستخدم أن TButtonX ابن للفورم -
[/COLOR]
الرد
#4
طريقة أخرى تجنبك الغوص في كل هذه التعقيدات :
يمكنك استخدام ال FireMonkey في كلتا الحالات :

[COLOR="Indigo"]مثال : جعل المكوت Button شفااف ...
مثال : جعل المكون Image يقوم بدوران عندما اضغط عليه ...
مثال : جعل المكون Image يضيء او يشع نور عندما يكون مؤشر الفأرة عليه ...
مثال : رسم شكل نجمة او سيارة او اي شيكل كان على Button او Image او Shape او غيرة من المكونات
[/COLOR]
الرد
#5
السلام عليكم ورحمة الله

اهلاً اخي المبرمج SMP3 ... إجابااتك دسمة كالعادة ما شاء الله P:
الهدف من سؤالي اني ارسيد وصع تطبيقات تحاكي التقنيه العالية ... كما في Win8

يبدو اني ساعمل على FireMonkey ... هل لديك امثلة عليها او يوجد امثله بالمنتدى ... استخدامات بسيطة لها ...إلخ
فانا لم يسبق ان فتحت FireMonkey من قبل Smile ... وقبل قليل فقط القيت نظرة خاطفه عليها واعجبت بها P:
الرد
#6
يمكنك البدأ بهذه الدروس :
كود :
http://www.delphi4arab.net/forum/showthread.php?tid=8031&highlight=firemonkey http://www.delphi4arab.net/forum/showthread.php?tid=8112&highlight=firemonkey http://www.delphi4arab.net/forum/showthread.php?tid=8123&highlight=firemonkey
لضيق الوقت لم أتمكن من تكملة السلسلة ..
الرد
#7
هل يوجد مراجع لتطبيق FireMonkey 3D,HD على نوافذ الـ DLL ؟
لاني جربت ذلك و توجد بعض الاخطاء القاتلة ...
الرد
#8
ALmuhhnad كتب :هل يوجد مراجع لتطبيق FireMonkey 3D,HD على نوافذ الـ DLL ؟
لاني جربت ذلك و توجد بعض الاخطاء القاتلة ...

هل تقصد مناداة FireMonkey Form From VCL App !!
نعم هناك بعض الأخطاء لكون FM تعتمد على[color=Red] +GDI
لحلها يجب أن تقوم بارفاق مكتبة GDI+
ألق نظرة على هذه التدوينة :
كود :
[/COLOR] http://blogs.embarcadero.com/stephenball/2011/10/10/writing-a-firemonkey-dll-for-use-with-a-vcl-application/
الرد


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


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