Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#4

AW: Interface .. onchange onscroll

  Alt 23. Jun 2011, 22:44
Beispiel

Implements ISkinScrollBar
ISkinScrollBar enthält ein Winproc
Durch die implementierung kann ich in meiner Hauptanwendung direkt auf
ISkinScrollBar_WindowProc(...
zugreifen.

Ich möchte also quasi ein Event aus der DLL übergeben und zwar dann wenn ich onscroll oder onchange aufrufe.

Mein Interface!
Delphi-Quellcode:
type
  ISkinScrollBar = interface
    ['{FEAD54BF-FFDD-43E9-9388-5F96A8643948}']
    function GetHandle: hWnd;
    property Handle: hWnd read GetHandle;
    procedure SetSmallChange(Value: Single);
    function GetSmallChange: Single;
    procedure SetLargeChange(Value: Single);
    function GetLargeChange: Single;
    procedure SetMinVal(Value: Single);
    function GetMinVal: Single;
    procedure SetMaxVal(Value: Single);
    function GetMaxVal: Single;
    procedure SetVal(Value: Single);
    function GetVal: Single;
  end;

  TSkinScrollBar = class(TInterfacedPersistent, ISkinScrollBar)
  private
    FHScrollBar: HWND;
    ImgW, ImgH: Cardinal;
    Style: DWORD;
    FLargeChange: Single;
    FSmallChange: Single;
    FMinVal: Single;
    FMaxVal: Single;
    FVal: Single;
    FBackgroundHeight: Single;
    function GetHandle: hWnd;
    function GetLargeChange: Single;
    function GetSmallChange: Single;
    function GetMinVal: Single;
    function GetMaxVal: Single;
    function GetVal: Single;
    procedure SubClass(WinHandle: HWND);
    procedure UnSubClass(WinHandle: HWND);
    procedure SetLargeChange(Value: Single);
    procedure SetSmallChange(Value: Single);
    procedure SetMinVal(Value: Single);
    procedure SetMaxVal(Value: Single);
    procedure SetVal(Value: Single);
    procedure DrawThumbBarValue;
    procedure CalculateThumbBarTop;
    procedure SetThumbBarHeight;
    function ScrollBarProc(WinHandle: HWND; Msg: UINT; wP: WParam; lP: LParam): LRESULT; stdcall;
    procedure ClientWndProc(var Message: TMessage);
  public
    property Handle: HWND Read FHScrollBar;
    constructor Create(hOwner: HWND; PageImg, DownImg, UpImg, ThumpImg: WideString;
      x, y, yH, CtrlID, StateMax:Integer; Enabled, Visible: Boolean);

    destructor Destroy; override;
  end;

Delphi-Quellcode:
procedure TSkinScrollBar.SetVal(Value: Single);
begin

    If (Value >= FMinVal) and (Value <= FMaxVal) then
        FVal := Value
    else if Value < FMinVal then
        FVal := FMinVal
    else If Value > FMaxVal then
        FVal := FMaxVal;

    DrawThumbBarValue;
    Hier...
    //onEventChange
end;
bei
Hier...
//onEventChange

soll die Anwendung eine Procedure bekommen wie in einer VCL Anwendung
wenn ich hier bsp.. onScroll einfügen würde.

Delphi-Quellcode:
procedure TForm1.ScrollBar1Scroll(Sender: TObject; ScrollCode: TScrollCode;
  var ScrollPos: Integer);
begin

end;
hoffe ist jetzt etwas besser erklärt.

@Peter1999
Sieht fast so aus als wenn es das ist was ich suche..
Werde es mal testen.

Danke!

EDIT:
Verstehe aber nicht warum ich noch Setter und getter definieren muss wenn ich diese schon habe.

Delphi-Quellcode:
procedure TSkinScrollBar.SetVal(Value: Single);
begin

Wird aus der Hauptanwendung übergeben
und soll dann aus dieser procedure an das OnEventChange in der HauptAnwendung weitergeleitet werden.



gruss

Geändert von EWeiss (23. Jun 2011 um 23:04 Uhr)
  Mit Zitat antworten Zitat