AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Interface .. onchange onscroll

Ein Thema von EWeiss · begonnen am 23. Jun 2011 · letzter Beitrag vom 25. Jul 2012
Antwort Antwort
EWeiss
(Gast)

n/a Beiträge
 
#1

AW: Interface .. onchange onscroll

  Alt 23. Jun 2011, 21: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 22:04 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#2

AW: Interface .. onchange onscroll

  Alt 24. Jun 2011, 03:31
Geht leider nicht.
Kann Create nicht nochmals aufrufen da TSkinScrollBar über das Interface erstellt wird.

Delphi-Quellcode:
function CTRL_ScollBarCreate(hOwner: HWND; PageImg, DownImg, UpImg, ThumpImg: WideString; x, y, yH, CtrlID,
  StateMax:Integer; Enabled, Visible: Boolean): ISkinScrollBar; stdcall;
begin

  result := TSkinScrollBar.Create(hOwner, PageImg, DownImg, UpImg, ThumpImg,
    x, y, yH, CtrlID, StateMax, Enabled, Visible);
end;
function CreateTMachWas: TMachwas;

TSkinScrollBar(CreateTMachWas) wäre demnach auch nicht exportierbar.

Und
LVScrollBar.OnChange := ReagiereAufMachwas;

führt unweigerlich zum crash da die LVScrollBar das Interface ist.
Delphi-Quellcode:
LVScrollBar: ISkinScrollBar;

    LVScrollBar := CTRL_ScollBarCreate(hMain,
      (SKAERO_FOLDER + 'VScroll\' + 'VSPage.png'), (SKAERO_FOLDER + 'VScroll\' + 'VSDown.png'),
      (SKAERO_FOLDER + 'VScroll\' + 'VSUp.png'), (SKAERO_FOLDER + 'VScroll\' + 'VSThump.png'),
      767, 70, 253, ID_VSCROLL, 0, True, True);
    LVScrollBar.SetLargeChange(10);
    LVScrollBar.SetSmallChange(1);
    LVScrollBar.SetMinVal(1);
    LVScrollBar.SetMaxVal(127);
    LVScrollBar.SetVal(1);
    SKAERO_SetAnchorMode(LVScrollBar.Handle, ANCHOR_BOTTOM_RIGHT);
    SKAERO_SetZorder(LVScrollBar.Handle, HWND_TOP);
Hmmm schon wieder ein großes problem!
Es muss doch möglich sein ein Event aus der DLL zu übergeben.

gruss

Geändert von EWeiss (24. Jun 2011 um 03:49 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von geskill
geskill

Registriert seit: 17. Feb 2007
Ort: NRW
420 Beiträge
 
Delphi 2010 Professional
 
#3

AW: Interface .. onchange onscroll

  Alt 24. Jun 2011, 10:31
http://www.delphipraxis.net/149369-p...nterfaces.html
Sebastian
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: Interface .. onchange onscroll

  Alt 24. Jun 2011, 17:17
Danke für den Link..
Muss aber feststellen das ich mit meinem Interface keine Events weiterleiten kann.
So das ich mich nun für eine Callback entschlossen habe.

gruss
  Mit Zitat antworten Zitat
Benutzerbild von geskill
geskill

Registriert seit: 17. Feb 2007
Ort: NRW
420 Beiträge
 
Delphi 2010 Professional
 
#5

AW: Interface .. onchange onscroll

  Alt 24. Jun 2011, 18:37
Du willst dein bestehendes Interface nicht verändern oder wie?
Sebastian

Geändert von geskill (24. Jun 2011 um 18:39 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: Interface .. onchange onscroll

  Alt 24. Jun 2011, 20:06
Du willst dein bestehendes Interface nicht verändern oder wie?
Wie meinst du das?
Hast du meine Post mal gelesen ?
Vielleicht verstehst du dann warum das nicht funktioniert.

Ich kann keine neue Instanz von TSkinScrollbar erstellen da diese eine ableitung von ISkinScrollbar ist.
Sie wird also schon erstellt beim Aufruf von

CTRL_ScollBarCreate.

Schau mal was als Result zurück geliefert wird.

gruss
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#7

AW: Interface .. onchange onscroll

  Alt 24. Jun 2011, 20:38
Na dann häng doch der Klasse noch ein weiteres Interface an und caste dahin.


Du kannst auch eine komplett eigene Klasse erstellen mit einem eigenen Interaface, dass gibst du dann an die DLL weiter und die Klasse kennt auch dein IScroll-dinsgbums.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz