كيف أطبق هذا الكود على جميع النوافذ ؟
#1
السلام عليكم ورحمة الله وبركاته

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

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

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

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 وأين أضع الكود بالتحديد ؟

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

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

وضح أكثر من فضلك
الرد
#3
أهلا وسهلا بك أخي مروآن

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

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

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

داخله الكود اللي يظهره بشكل جميل ؟
الرد
#4
ممكن تستخدم الكود
كود :
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;
الرد
#5
شكرا لك أخي سنايبر

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

ولك ألف شكر
الرد
#6
يمكنك استبدال الـ(Trackbar1.Position) باي رقم بالميلي ثانية

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

تعمل مثل sleep
الرد
#7
صراحة لم أفهم بالضبط ما تريد

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

توجد طريقة (الطرق تختلف من مبرمج إلى أخر) هي باستغلال غرضية التوجه في الدلفي و العمل مع 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, [color=Blue]unit2[/color];

type
  TForm3 = class([color=Blue]TForm2[/color])

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

[صورة: f9b1997.gif]

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

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

5. الآن في Form1 فقط ننادي الفورم التي نريدها بدون كتابة شفرة الظهور الخاصة
كود :
procedure TForm1.Button1Click(Sender: TObject);
begin
Form3.Show;
end;

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

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

بالتوفيق Smile


الملفات المرفقة
.jpg   exemple1.jpg (الحجم : 15.46 ك ب / التحميلات : 41)
الرد
#8
طريقة جميلة merouane

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


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


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