هل يوجد مكون يقوم بإضافة ستايل لبرنامج ؟
#1
السلام عليكم ورحمة الله وبركاتة

اعمل على DLL وعندما اقوم بتنفيذ السطر :
PHP كود :
TStyleManager.SetStyle(TStyleManager.LoadFromFile(sPathDll + '\TurquoiseGray.vsf')); 

لاحظت عدة آخطاء مع المكون TStyle ... وهذه واحده من التي واجهتني :
عندما اقوم بتغير النافذة ( داخل DLL ) تظهر هذه الرسالة :
كود :
http://im31.gulfup.com/Lz1SI.jpg
وآخرى :
كود :
http://im31.gulfup.com/db6Ai.jpg
لذلك إلى ان يتم تطوير هذا المكون بشكل جيد ... سأستعمل مكون آخر

سؤالي الآن هل يعرف احدك مكون جيد يعمل على إعطاء الـ Form ستايل .... كما هو الحال في TStyle ؟
والسلام عليكم ورحمة الله وبركاتة
الرد
#2
وعليكم السلام ورحمة الله
الثيمات والدلفي
http://www.delphi4arab.net/forum/showthread.php?tid=21
بما ان الموضوع قديم بعض الروابط قد لا تعمل مع ذلك يمكن ايجاد نسخة من المكون بالأنترنت
ولا تنسى استعمال المكونات كان جيد ايام انظمة Win98 و XP اما Vista وما فوق فبها ثيمات كثيرة ومن الاحسن عدم استخدام ثيم وترك البرنامج ياخذ شكل ثيم النظام
الرد
#3
المشكل من عندك أخي ALmuhhnad
------------
المشكلة الأولى :
لقد قمت بمناداة الفورم مباشرة .. وهذا ما سبب رسالة الخطأ الأولى
لحلها قم بانشاء كائن للفورم قبل فتحه
PHP كود :
var f2:TForm2;
begin
   f2
:=TForm2.Create(Self);
   
f2.Show;
end; 
على ما يبدو لي أنك استخدمت الكود التالي
PHP كود :
Form2.Show ; 
---------------------
بالنسبة للمشكل الثاني .. فقد جربت ولم ألاحظ أي مشكل
ممكن يكون من نسخة الدلفي التي تستخدمها (أنا أستخدم XE3 UPdate 2 ) ماذا عنك ؟
أرفق لي واجهة للمشكلة ... وسأقوم باعادة عمل كومبايلر لها .. ان لم تظهر معي المشكلة فيعني أن اصدار دلفي هو المشكلة Smile
الرد
#4
اهلاً بك اخي وستاذي .. B.M.AbdelAziZ
واهلاً بك استاذ الـ TStyle Tongue ...
مربحباً بكم .. يسعدني ان اراكم

بالنسبة لردك اخي SMP3 ... في الحقيقة شككت ان المشكلة من عندي ... لاني رائت برنامج سابقاً بنفس الستايلات
الموجوودة في TStyle .. ولا تحدث مع اي مشااكل ... لذلك شككت في بداية الامر ان المشكلة من عندي ...

ندخل في الحوار P: ...
إقتباس : لقد قمت بمناداة الفورم مباشرة .. وهذا ما سبب رسالة الخطأ الأولى
لحلها قم بانشاء كائن للفورم قبل فتحه
لا اضن ذلك ... لاني هذا الاوامر التي استعملها Smile
إنشاء ..
عرض ..
تحرير ..
PHP كود :
var
  
FMain : TForm2;
procedure FuncStart;
begin
  FMain 
:= TForm2.Create(nil);
  
FMain.ShowModal;
  
FMain.free;
end; 
<< جربت إستبدال الامر ShowModal بـ الامر Show ... فتظر النافذة وبعد ذلك تختفي ... !

وإلى الآن رسالة الخطا تظهر ...
بالنسبة للخطاء الثاني ... اضنه يظهر بعد ظهور رسالة الخطاء الاول ...

إذا احببت ان ارفق لك المثال الذي اواجه مشكلة معه ... وترى السرورس كامل
ملاحظة ... اعمل على Delphi XE3

وشكراً لحسن القراءة
والسلام عليكم
الرد
#5
إقتباس :<< جربت إستبدال الامر ShowModal بـ الامر Show ... فتظر النافذة وبعد ذلك تختفي ... !
السبب هو أنك قمت بتحرير الفورم .. ان استخدمت Show فلا تقم بتحرير الفورم الى في الحدث Destroy
إقتباس :وترى السرورس كامل
نعم من الأفضل أن ترفق لي السورس .. ارفق مثال فقط و لا ترفق السورس كامل
الرد
#6
فعلت كما اشرت ... ونفس النتيجة ... ؟؟

ارفقت السروس كود ... لكي ترى أين المشكلة


الملفات المرفقة
.rar   TestTstyle.rar (الحجم : 67.02 ك ب / التحميلات : 34)
الرد
#7
ALmuhhnad كتب :ارفقت السروس كود ... لكي ترى أين المشكلة
السبب أخي ALmuhhnad يعود لا ستخدامك ل Thread ..
ان استخدمت ال Thread لعرض النافذة فلازم تستخدم ShowModel حتى لا يتم الخروج من ال thread
-----------------------------
+ لماذا استخدمت أسلوب السي ++ لكتابة dll ؟
الرد
#8
إقتباس : ان استخدمت ال Thread لعرض النافذة فلازم تستخدم ShowModel حتى لا يتم الخروج من ال thread
صحيح غاابت عن بالي هذه النقطة @@"

إقتباس : + لماذا استخدمت أسلوب السي ++ لكتابة dll ؟
ربما لانه اول مثال رئيته على الانترنت يشرح عملية عمل إنشاء dll وبادخلها Form ...

انتظر منك طريقة عمل ذلك في دلفي ... في الحقيقة لم اكن اعتقد ان هناك اختالف @@؟
( ضع بعين الاعتبار اني ساحقن ملف الـ DLL في عملية ... وتظهر لي النافذة و يظهر بها الستايل ... )
الرد
#9
ان أردت استخدام ال Show بدل ShowModel
PHP كود :
library Project2;

uses
  System
.SysUtils,
  
Winapi.Windows,
  
System.Classes,Themes,Styles,
  
Unit2 in 'Unit2.pas' {Form2};

{
$R *.res}

var
  
dwTemp : DWORD;
  
ThreadHanle:Thandle;

procedure FuncStart;
begin
 
// Do Something .. !!
end;
procedure ShowDlg ;stdcall  ;
begin
  Form2 
:= TForm2.Create(nil);
  
Form2.Show;
end;

procedure DllMain(reason:integer);
begin
  
Case reason of
    DLL_PROCESS_ATTACH
:
    
begin
    Form2
:=nil;
    
ThreadHanle :=CreateThread(nil,0,@FuncStart,nil,0,dwTemp);
    
end;

    
DLL_PROCESS_DETACH:
    
begin
    FreeAndNil
(Form2);
    
CloseHandle(ThreadHanle);
    
end;
  
End;
end;

exports ShowDlg ;

begin
TStyleManager
.SetStyle(TStyleManager.LoadFromFile(ExtractFileDir(GetModuleName(HInstance)) + '\TurquoiseGray.vsf'));

Dllproc := @DllMain;
DllMain(DLL_PROCESS_ATTACH);

end. 

..
PHP كود :
procedure ShowDlg ;stdcall  ;external 'Project2.dll' name 'ShowDlg';

procedure TForm1.ButtonLoadLibClick(Sender: TObject);
begin
LoadLibrary
('Project2.dll');

end;

procedure TForm1.ButtonShowDlgClick(Sender: TObject);
begin
  ShowDlg
;
end; 

-------------------------
بالنسبة لاستعمال ال Dll مع دلفي فأعتقد أنه يوجد موضوع في دورة دلفي للعرب
-----------------------
اطلع على الدرس و تجنب استخدام أسلوب مبرمجي ++C .. لأنك ستدخل في متاهات كثيرة
و بالنسبة لل Thread , فنصيحة اليك أخي .. حاول ألا تستخدمه الا في الأمور الجدية .. لانه يمكن يسبب مشاكل كثيرة
اطلع أولا على دروس ال Thread وحاول تطبيقها ثم استعمله عند الحاجة .
الرد
#10
السلام عليكم ... اعتذر على التأخر @@"
إقتباس : ان أردت استخدام ال Show بدل ShowModel
ليس المطلوب إستعمال الـ Show او ShowModel ... المهم ان تظهر النافذة بدون آخطاء Smile


إقتباس :( ضع بعين الاعتبار اني ساحقن ملف الـ DLL في عملية
إقتباس : بالنسبة لاستعمال ال Dll مع دلفي فأعتقد أنه يوجد موضوع في دورة دلفي للعرب
جميع المواضيع تتكلم عن إستدعاء الـ Dll من البرنامج وليس حقن الـ Dll في البرنامج

بالنسبة للكود الذي كتبته ... لا استطيع كتابه الامر الذي يقوم بإستدعاء الـ Dll الخاصة بي ... في البرنامج الهدف !
والسلام عليكم
الرد


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


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