المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : كيف أطبق هذا الكود على جميع النوافذ ؟


delphi4you
13-05-2008, 04:55 PM
السلام عليكم ورحمة الله وبركاته

لقد كنت أبحث في دلفي فذهبت الى منتدى الفريق العربي للبرمجه

ووجدت موضوعا عن كيفيه اخراج النافذه بشكل جميل

وهذا هو الكود إذا لم يخب ظني بأن الغالبيه يعرفونه من زوآر الفريق العربي قسم الدلفي

{

The AnimateWindow function enables you to produce

special effects when showing or hiding windows.

Mit der AnimateWindow Funktion kann man spezielle Effekte

erzeugen beim Zeigen, Unsichtbarmachen (hide) einer Form.

}



procedure TForm1.Button1Click(Sender: TObject);

begin

Form2.BringToFront;

AnimateWindow(Form2.Handle,Trackbar1.Position, AW_BLEND);

Form2.Show;

{

The 3. parameter can be one or more of the following values:

Der 3. parameter kan folgende Werte annehmen:

AW_BLEND : Uses a fade effect

AW_SLIDE : Uses slide animation.

AW_ACTIVATE : Activates the window

AW_HIDE : Hides the window.

AW_CENTER : Makes the window appear to collapse inward

AW_HOR_POSITIVE : Animates the window from left to right.

AW_HOR_NEGATIVE : Animates the window from right to left

AW_VER_POSITIVE : Animates the window from top to bottom

AW_VER_NEGATIVE : Animates the window from bottom to top

}



end;

حسنا لدي برنآمج يتكون من 13 فورم أرغب بتطبيق الكود AW_BLEND في الأعلى على جميع النوآفذ

دون أن أذهب يدويا وأطبقه على كل نافذه

هل يستوجب أن أضيف شيئا الى القائمه uses وأين أضع الكود بالتحديد ؟

وجزآكم الله خيرا أجمعين

merouane
13-05-2008, 09:14 PM
دون أن أذهب يدويا وأطبقه على كل نافذه

وضح أكثر من فضلك

delphi4you
14-05-2008, 12:12 PM
أهلا وسهلا بك أخي مروآن

لنفرض أن لدي 13 اطارا او فورما ً

لكي أجعل كل اطار يظهر بشكل جميل لابد أن أضع هذا الكود في [ كل ]اطار من الاطارات الـ 13

هل توجد طريقه لكي أطبق هذا الكود على كل النوافذ الـ 13 من مرة واحد دون أن اذهب لكل فورم او اطار واكتب

داخله الكود اللي يظهره بشكل جميل ؟

snyper
14-05-2008, 04:15 PM
ممكن تستخدم الكود
var i: integer;
begin
for i:=1 to Application.ComponentCount -1 do
begin
if (Application.Components[i] is TForm) then
begin
Tform(Application.Components[i]).BringToFront;

AnimateWindow(Tform(Application.Components[i]).Handle,Trackbar1.Position, AW_BLEND);

Tform(Application.Components[i]).Show;

end;
end;
end;

delphi4you
14-05-2008, 04:54 PM
شكرا لك أخي سنايبر

هل من الممكن أن تعطيني نفس الكود لاكن من دون أن يحتوي على Trackbar1

ولك ألف شكر

snyper
14-05-2008, 05:06 PM
يمكنك استبدال الـ(Trackbar1.Position) باي رقم بالميلي ثانية

اي 1000 تجعل ظهور الفورم اللاحقة يستغرق 1 ثانية

تعمل مثل sleep

merouane
14-05-2008, 05:07 PM
صراحة لم أفهم بالضبط ما تريد

لكن سأحاول الإجابة

توجد طريقة (الطرق تختلف من مبرمج إلى أخر) هي باستغلال غرضية التوجه في الدلفي و العمل مع OnShow

1. بعد إنشاء التطبيق

2. انشئ فورم جديد و اذهب إلى OnShow و اكتب ما تريد مثلا

procedure TForm2.FormShow(Sender: TObject);
begin
(Sender as TForm).BringToFront;
AnimateWindow((sender as TForm).Handle,1000, AW_BLEND);
end;

هذه الفورم لا تلمسها فقط الكود المضاف

3. أنشئ فورم اخرى ستكون Form3 (لا يهم يمكنك تغييره فقط عليك فهم المبدأ)

4. في السورس نغير ما يلي (لاحظ جيدا اللون الأزرق)

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

type
TForm3 = class(TForm2)


هناك طريقة اتوماتيكية

http://up104.arabsh.com/my/f9b1997.gif

أنظر الصورة المرفقة المصغرة في حال عدم ظهور الصورة

العمليتين 3 و 4 تتكرران عند الحاجة لإنشاء فورم جديد

5. الآن في Form1 فقط ننادي الفورم التي نريدها بدون كتابة شفرة الظهور الخاصة

procedure TForm1.Button1Click(Sender: TObject);
begin
Form3.Show;
end;

بالطبع المكونات تضاف للفورم الخاص به ولا تضاف إلى الفورم Form2

آمل أنه المطلوب

بالتوفيق :)

snyper
14-05-2008, 05:15 PM
طريقة جميلة merouane

وتقوم بالعمل بالشكل المطلوب