delphi4arab منتديات دلفي للعرب
مشكلة في إظهار ScrollBar مع إستعمال TStyle ؟ - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15)
+--- الموضوع : مشكلة في إظهار ScrollBar مع إستعمال TStyle ؟ (/showthread.php?tid=4933)



مشكلة في إظهار ScrollBar مع إستعمال TStyle ؟ - ALmuhhnad - 20-02-2013

السلام عليكم ورحمة الله وبركاتة

مبروك اخوني مشرفين هذا المنتدى الكريم , في الحقيقة حزنت عندما وجدت ان المنتدى متوقف


لدي مشكلة عند استعمال احد الستايلات المتاحه في [ Appearance ]
على Form يوجد به خاصية الـ AutoScroll = True ... فإن الـ Scroll لا يظهر !!
صوره توضيحيه Smile
كود :
http://im32.gulfup.com/hRD0W.jpg

اضن ان المشكلة انه عند إستعمال TStyle يتم اخذ جزء قليل من الجهه اليمنا والجهه السفليه من النافذة ... لذلك لا تظهر اشرطة الـ Scrolls
لكنلي لا اعرف الحل Smile ...

وشكراً لحسن القراءة


مشكلة في إظهار ScrollBar مع إستعمال TStyle ؟ - ALmuhhnad - 21-02-2013

السلام عليكم ورحمة الله وبركاتة
وجدت حل مؤقت ... ومن رائيي انه غير سليم Smile
قمت بوضع مكون [ TScrollBox ] واعطيته خاصية
Align = alClient
ساستعمله إلى ان اجد الاجابة ...


مشكلة في إظهار ScrollBar مع إستعمال TStyle ؟ - S.FATEH - 21-02-2013

قلت كل شيئ و لم تحدد المكون الذي استعملته


مشكلة في إظهار ScrollBar مع إستعمال TStyle ؟ - ALmuhhnad - 21-02-2013

قمت بإضافة الستاايل من خلال
Project -> Options -> Application -> Appearance : Turquoise Gray

وهذه المكتبات المستعملة [ Vcl.Themes, Vcl.Styles ]

ولا اضن اني استعملت مكون إلى الآن P:


مشكلة في إظهار ScrollBar مع إستعمال TStyle ؟ - SMP3 - 22-02-2013

السلام عليكم ورحمة الله وبركاته
أخي ALmuhhnad هذه عبارة عن Bug .. قم بالتبليغ عنها في QualityCentral
----------------------
حاليا أمامك خيارين اما أن لا تستخدم ال Vcl Style على ال Non Client Area
PHP كود :
unit Unit1;

interface

uses
  Winapi
.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  
Vcl.Controls, Vcl.Forms, Vcl.Dialogs,Vcl.Themes,Vcl.Styles, Vcl.StdCtrls;

  
type TFormStyleHookNC= class(TMouseTrackControlStyleHook)
  protected
    
procedure PaintBackground(Canvas: TCanvas); override;
    
constructor Create(AControl: TWinControl); override;
  
end;

type
  TForm1 
= class(TForm)
    
Memo1: TMemo;
    
procedure FormCreate(Sender: TObject);
  private
    { Private 
declarations }
  public
    { Public 
declarations }
  
end;

var
  
Form1: TForm1;

implementation

{$R *.dfm}
 
constructor TFormStyleHookNC.Create(AControl: TWinControl);
begin
  inherited
;
  
OverrideEraseBkgnd := True;
end;

procedure TFormStyleHookNC.PaintBackground(Canvas: TCanvas);
var
  
Details: TThemedElementDetails;
  
R: TRect;
begin
  
if StyleServices.Available then
  begin
    Details
.Element := teWindow;
    
Details.Part := 0;
    
R := Rect(0, 0, Control.ClientWidth, Control.ClientHeight);
    
StyleServices.DrawElement(Canvas.Handle, Details, R);

  
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Self
.AutoScroll:=True;
end;

initialization
TStyleManager
.Engine.RegisterStyleHook(TForm1, TFormStyleHookNC);

end. 
كود :
http://im31.gulfup.com/JSBaU.png
الطريقة الثانية هي استخدام ال TScrollBar كما ذكرت أنت سابقا , لكن هناك مشكلة :
لون خلفية ال ScrollBar ليس مثل لون خلفية الفورم ...
كود :
http://im32.gulfup.com/sTMJA.png
أضف لذلك أن ScrollBar لديها بوردر سيؤثر على الفورم
كما أني وجدت Bug في ال ScrollBox عند تفعيل ال vcl Styles واسناد bsSingle لل BorderStyle
كود :
http://im31.gulfup.com/detWU.png
كود :
http://im34.gulfup.com/u4EqE.png
لكني استطعت التغلب على هذه المشاكل Big Grin باستخدام بعض الحيل !!

PHP كود :
unit Unit1;

interface

uses
  Winapi
.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  
Vcl.Controls, Vcl.Forms, Vcl.Dialogs,Vcl.Themes,Vcl.Styles, Vcl.StdCtrls,
  
Vcl.CheckLst;

type TStyledScrollBox=class(TScrollBoxStyleHook)
private
FCanvas:TCanvas;
public
   
constructor Create(AControl: TWinControl); override;
   
destructor Destroy; override;
   
procedure DrawBorder; override;
   
procedure PaintBackground(Canvas: TCanvas); override;
   
procedure Paint(Canvas: TCanvas); override;

end;
type
  TForm1 
= class(TForm)
    
ScrollBox1: TScrollBox;
    
ListBox1: TListBox;
    
procedure FormCreate(Sender: TObject);
  private
    { Private 
declarations }
  public
    { Public 
declarations }
  
end;

var
  
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin

end
;

{ 
TStyledScrollBox }

constructor TStyledScrollBox.Create(AControl: TWinControl);
begin
  inherited
;
   
Brush.Color := StyleServices.GetStyleColor(scWindow);
   
FCanvas:=TCanvas.Create;

end;

destructor TStyledScrollBox.Destroy;
begin
 FreeAndNil
(FCanvas);

  
inherited;
end;

procedure TStyledScrollBox.DrawBorder;
begin
 inherited
;
 
FCanvas.Handle:=GetWindowDc(Handle);
 
FCanvas.Brush.Color:=StyleServices.GetStyleColor(scWindow);
 
FCanvas.FrameRect(Rect(0,0,Control.Width,Control.Height));
 
FCanvas.FrameRect(Rect(1,1,Control.Width-1,Control.Height-1));

end;

procedure TStyledScrollBox.Paint(Canvas: TCanvas);
begin
  inherited
;

end;

procedure TStyledScrollBox.PaintBackground(Canvas: TCanvas);
begin
  inherited
;

end;

initialization
TStyleManager
.Engine.RegisterStyleHook(TScrollBox,TStyledScrollBox);
end. 
النتيجة النهائية :
كود :
http://im31.gulfup.com/s5IQb.png

و السلام عليكم ..


مشكلة في إظهار ScrollBar مع إستعمال TStyle ؟ - ALmuhhnad - 22-02-2013

Great ... ما شاء الله عليك ...
وجدت مشكلة اخرى في TStyle .... هههههه
ولم اجد لها حل Smile

وهي تكمن في إستعمال TStyle مع الـ DLL ... ساضعها في موضوع مستقل ...

بالمناسبة اخي SMP3 ... هل يوجد منهجية معينه لحل المشاكل كما فعلت انت ... ام بتحليل وترقيع الاخطاء باي طريقة كانت ؟

ايضاً لا اعرف كيف ابلغ عن Bugs ... ؟
ايضاً سؤال خارجي ... كم سيستغرق إصلاح الـ Bug ؟

مشكور من جديد ... وجزاك الله خير على المسااعدات التي قدمتها لي وبقية الاخوان

[ إلى الآن لم اجرب الحل الذي طرحته فانا لست على جهازي الآن ]


مشكلة في إظهار ScrollBar مع إستعمال TStyle ؟ - SMP3 - 22-02-2013

ALmuhhnad كتب :Great ... ما شاء الله عليك ...
وجدت مشكلة اخرى في TStyle .... هههههه
ولم اجد لها حل Smile

وهي تكمن في إستعمال TStyle مع الـ DLL ... ساضعها في موضوع مستقل ...
سأطلع على الموضوع يوم الثلاثاء (يوم انتهاء امتحاناتي) Big Grin

إقتباس :بالمناسبة اخي SMP3 ... هل يوجد منهجية معينه لحل المشاكل كما فعلت انت ... ام بتحليل وترقيع الاخطاء باي طريقة كانت ؟
[COLOR="red"]نعم هناك منهجية :
أولا يجب أن تطلع على السورس الخاص بالمكون أو الاداة .. وتدقق معه ..
ثانيا يجب أن تقوم بوضع فرضيات عن أسباب المشكلة .. فالمشكلة لن تستطيع فهمها مالم تقم بوضع فرضيات منطقية !!
أخيرا حاول أن تعرف الفرضية الصحيحة ثم قم بماحولة لتصحيح المشكلة [/COLOR]

إقتباس :ايضاً لا اعرف كيف ابلغ عن Bugs ... ؟
[COLOR="red"]أولا لازم تكون مسجل في موقع http://edn.embarcadero.com/
ثانيا عندما تجد Bug ..قم بتشغيل ال Quality Central من دلفي : Tools->Quality Central
ضع ايميلك و الباسوورد الذي مسجل به في موقع embarcadero
اختر تصنيف للمشكلة Vcl ,FireMonkey,RTL... الخ
ثم قم بكتابة عن المشكلة أو ال Bug .. + ضع حل للمشكلة (ان قمت بالفعل بايجاد حل )
[/COLOR]
إقتباس :ايضاً سؤال خارجي ... كم سيستغرق إصلاح الـ Bug ؟
على حسب ال Bug .. في العادة يتم تصحيحها في ال Update التالي

إقتباس :مشكور من جديد ... وجزاك الله خير على المسااعدات التي قدمتها لي وبقية الاخوان

[COLOR="Gray"][ إلى الآن لم اجرب الحل الذي طرحته فانا لست على جهازي الآن
][/COLOR]
العفو أخي


مشكلة في إظهار ScrollBar مع إستعمال TStyle ؟ - ALmuhhnad - 22-02-2013

وعليكم السلام ورحمة الله وبركاتة
باارك الله فيك اخي واستاذي SMP3 .. الله يوفقك في إمتحاناتك

سؤال آخير واعتذر على الاطالة
عندما أبليغ عن Bug هل .. يتطلب ان تكون نسختي الـ XE3 شرعية ... !؟


مشكلة في إظهار ScrollBar مع إستعمال TStyle ؟ - لؤي - 22-02-2013

ALmuhhnad كتب :هل .. يتطلب ان تكون نسختي الـ XE3 شرعية ... !؟

لا أظن ذلك لأنها ليست هناك علاقة ب Bug وشرعية النسخة فأنت في الأخير تود تصليح الأخطاء


مشكلة في إظهار ScrollBar مع إستعمال TStyle ؟ - SMP3 - 23-02-2013

ALmuhhnad كتب :هل .. يتطلب ان تكون نسختي الـ XE3 شرعية ... !؟
لا ليس شرط .. لقد سبق وقمت بالتبليغ عن Bug باستخدام XE3 (نسخة مقرصنة Smile )