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

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

ضع حدث مناداة الفورم في حدث تحميل المكتبة
PHP كود :
//Dll
Begin
ShowMyForm
; 
end; 
وسيتم اظهار الفورم بمجرد أن تتم عملية حقن المكتبة ..
الرد
#12
فعلاً ظهرة النافذة بدون كتابة سطر إنشاء الثريد ... رغم انه يتم إنشاء ثريد بدايته في LoadLibraryW لكن لا يهم

لكن المشكلة لازالت تظهر
هذا الكود :
PHP كود :
procedure ShowMyMain();
begin
  TStyleManager
.SetStyle(TStyleManager.LoadFromFile(ExtractFileDir(GetModuleName(HInstance)) + '\TurquoiseGray.vsf'));
  
Form2 := TForm2.Create(nil);
  
Form2.ShowModal;
end;

begin
  ShowMyMain
;
end. 
الرد
#13
almuhhnad كتب :لكن المشكلة لازالت تظهر
أية مشكلة .. لقد قمت بتجريب ولم تظهر لي أي مشكلة !!!
الرد
#14
وعليكم السلام ورحمة الله

هذا عرض فلاشي سريع يعرض المشكلة , وأين تحصل ... بنفس الكود الذي لا يظهر المشكلة لديك ... :
كود :
http://im35.gulfup.com/IloJA.swf


وهذا السروس كود المستعمل :
PHP كود :
library Project2;

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

{
$R *.res}

procedure showmymain();
begin
  tstylemanager
.setstyle(tstylemanager.loadfromfile(extractfiledir(getmodulename(hinstance)) + '\turquoisegray.vsf'));
  
form2 := tform2.create(nil);
  
form2.showmodal;
end;

begin
  showmymain
;
end. 

إذا كان فعلا لا تظهر لديك المشكلة ... ربما لإختلاف النظام ... !؟ .. رغم اني اضنك تملك نفس نظامي Smile
الرد
#15
ALmuhhnad كتب :هذا عرض فلاشي سريع يعرض المشكلة
هكذا أفضل .. لقد اتضحت لي الفكرة Smile

أولا سأتطرق الى السبب :
سبب حدوث المشكلة هو مقبض غير صحيح عند تنفيذ تصغير للنافذة أي الخطأ بالدالة HandleNeeded
في الحالة العادية .. أقصد بدون استخدام ال Vcl Style لن تواجه هذه المشكلة لأن النظام هو من يتحكم بالنافذة .. أما اذا استخدمت ال Vcl Style فستحدث المشكلة بسبب عدم وجود Parent ان صح التعبير

في الحقيقة حل المشكلة أتعبني قليلا .. :
الحل هو استخدام Application وهمية لتنفيذ ظهور الفورم .. أوكي

مثال :
PHP كود :
library dsdll;


uses
  ShareMem
,
  
Winapi.Windows, Winapi.Messages,
  
System.SysUtils, System.Variants,
   
System.Classes, Vcl.Graphics,
  
Vcl.Controls, Vcl.Forms,Vcl.Dialogs,
  
Vcl.Themes,Vcl.Styles,
  
Unit1 in 'Unit1.pas' {Form1};

{
$R *.res}
{
$R Auric.res}//Include Your Style

var
dwTemp : DWORD;
hThread :THandle;
procedure CreateDlg();
begin

  Application
.Initialize;
  
Application.MainFormOnTaskbar := True;
  
TStyleManager.TrySetStyle('Auric');//Set Style
  
Application.CreateForm(TForm1, form1);//Create Form1
  
Application.Run;//Run
  
FreeAndNil(Form1);//Destroy

end;
  
procedure DllMain(reason: Integer);
begin
if reason =DLL_PROCESS_ATTACH then

 hThread
:= CreateThread(nil,0,@CreateDlg,nil,0,dwTemp)
else if 
reason =DLL_PROCESS_DETACH then
begin
   TerminateThread
(hThread,0);// Kill Thread
   
ExitProcess(0);//Exit
end;
end;
begin

DllProc 
:= DllMain;
DllMain(DLL_PROCESS_ATTACH);

end. 

إقتباس :إذا كان فعلا لا تظهر لديك المشكلة ... ربما لإختلاف النظام ... !؟ .. رغم اني اضنك تملك نفس نظامي Smile
أستعمل Win7 Smile
الرد
#16
السلام عليكم ورحمة الله وبركاتة

ما شاء الله تبارك الله ... انت مبرمج بما تعنيه الكلمة بدون مجاملات

لدي سؤال عن كيفية إجادك لمكان الخطاء ... ؟ ببرنامج التنقيح Olly ؟ ام شيء آخر ؟

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

شكراً لك اخي واستاذي SMP3 من جديد .. لا استطيع إلا ان اقول
جزاك الله خير وزادك علماً فوق علمك ووفقك لما يحبه ويرضاه
الرد
#17
امكانية تنقيج برامج الدلفي سهلة جدا بالطبع باستعمال Olly او أي منقح آخر و في و جود Map File :p
الرد
#18
Map File ؟
ما هذا الملف وما دخله بتنقيح البرنامج ؟
الرد
#19
إقتباس :ما شاء الله تبارك الله ... انت مبرمج بما تعنيه الكلمة بدون مجاملات
لا تبالغ أخي .. فمازال المشوار طويل بالنسبة لي Big Grin

إقتباس :لدي سؤال عن كيفية إجادك لمكان الخطاء ... ؟ ببرنامج التنقيح Olly ؟ ام شيء آخر ؟

من خلال التنقيح بدلفي

إقتباس :اعجبتني فكرة عمل برنامج وهمي ... ولا يخفا عليك اني فكرت بهذه الفكرة دون علمي بسبب الخطاء
لكن كان ينقصني الاكواد التي ساكتبها لتنفيذ ذلك ...
ليس وهمي ... ليس هناك برنامج .. هناك Application تقوم بانشاء الفورم فقط
مثل تطبيق exe
PHP كود :
begin
  Application
.Initialize;
  
Application.CreateForm(TForm1, Form1);
  
Application.Run;
end. 

إقتباس :شكراً لك اخي واستاذي SMP3 من جديد .. لا استطيع إلا ان اقول
جزاك الله خير وزادك علماً فوق علمك ووفقك لما يحبه ويرضاه

العفو أخي Big Grin
الرد
#20
ALmuhhnad كتب :Map File ؟
Map File هو ملف يحتاجه المنقح حيثما كان لعنونة و اعطاء أسماء لما يسمى Calls فالبتالي هو يساعدك في عملية التنقيح يمكنك عمل ملف Map عن طريق الدلفي بحد ذاته فقط اصغط على projects ثم Options ومن ثم اختر Linker و اختر واجهة mapFile و اختر Detailed و سيتم عنونة جميع متغيرات و ثوابت و دوال برنامجك في المنقح جربها مع Olly Big Grin
تحياتي
الرد


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


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