Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Ereignis für Scrollbalken in Scrollbox (https://www.delphipraxis.net/199377-ereignis-fuer-scrollbalken-scrollbox.html)

ekatharina 19. Jan 2019 10:11

Ereignis für Scrollbalken in Scrollbox
 
Hi,
welches Ereignis ist zuständig für die Scrollbalken in einer Scrollbox.
Folgende Situation:
Scrollbox in dem ein Image liegt. Image ist größer als die Box. Scrollbalken werden angezeigt.

Wenn ich nun das image per scrollbalken verschiebe (was auch problemlos geht) soll z. B. eine Nachricht angezeigt werden.
Leider reagiert aber Scrollbox.Click nicht. Und ein Ereignis scrollbox.scrollbalken gibt es wohl nicht.

Was übersehe ich?

Danke

DP-Maintenance 19. Jan 2019 11:07

Dieses Thema wurde am "19. Jan 2019, 12:07 Uhr" von "Luckie" aus dem Forum "Fragen / Anregungen zur DP" in das Forum "GUI-Design mit VCL / FireMonkey / Common Controls" verschoben.

EWeiss 19. Jan 2019 12:25

AW: Ereignis für Scrollbalken in Scrollbox
 
Zitat:

Und ein Ereignis scrollbox.scrollbalken gibt es wohl nicht.
WM_HSCROLL.. WM_VSCROLL ?
Analysiere Low(wP) und High(wP)

gruss

ekatharina 19. Jan 2019 14:20

AW: Ereignis für Scrollbalken in Scrollbox
 
Sorry, aber so ausführlich ... ...

Habe inzwischen 2 Std. nach WM_HSCROLL etc. gegoogelt und auch in der Delphi-Hilfe nachgesehen aber mir geht einfach kein Licht auf.:oops:

EWeiss 19. Jan 2019 14:36

AW: Ereignis für Scrollbalken in Scrollbox
 
Zitat:

Zitat von ekatharina (Beitrag 1423611)
Sorry, aber so ausführlich ... ...

Habe inzwischen 2 Std. nach WM_HSCROLL etc. gegoogelt und auch in der Delphi-Hilfe nachgesehen aber mir geht einfach kein Licht auf.:oops:

Wenn ein Scroll Event in einem Programm oder (System) ausgelöst wird geht das Event an die Windows Message WM_HSCROLL wenn es sich um eine Horizontale Scroll bar handelt.
Unter WM_HSCROLL deiner WinProc kannst du dann prüfen ob dein Fenster bzw. die Scrollbox ein Event ausgelöst hat.
Ich hoffe du weist wie man die WinProc aus deiner Class heraus ableitet!

Delphi-Quellcode:
WM_HSCROLL:
  begin
    if (LoWord(wP) = SB_THUMBPOSITION) then // der Scrollbalken wurde bewegt\angeklickt
    begin
      if Handle = Scrollbox.Handle then
      begin
        MeineHScrollThumpPosition := HiWord(wP);
        // >> Mach was mit meiner Value !!
      end;
    end;    
  end;
Hier getippt.. Habe die TScrollbox noch nicht verwendet, habe meine eigene, von daher kein gewähr dass das mit dem Scrollbox.Handle so stimmt.
Über LParam kommst du an die ID des Thump was verwendet wird wenn du drauf klickst.

Delphi-Quellcode:
ControlID := Lp;

vorausgesetzt Lp ist in deiner Winproc als LPARAM definiert.
Delphi-Quellcode:
function WndProc(WinHandle: HWND; Msg: UINT; wP: WParam; lP: LParam): LRESULT; stdcall;


Eventuell reicht es auch aus nur die WM_HSCROLL Message abzuleiten siehe dazu

gruss

ekatharina 19. Jan 2019 15:55

AW: Ereignis für Scrollbalken in Scrollbox
 
Prima und herzlichen Dank.
Werde voraussichtlich morgen dran gehen.
Nochmals vielen Dank

peterbelow 20. Jan 2019 13:18

AW: Ereignis für Scrollbalken in Scrollbox
 
Wie Du herausgefunden hast hat die TScrollbox-Klasse keine entsprechenden Events, aber das läßt sich ziemlich einfach nachflicken. Ich habe in meiner alten Sammlung eine Control gefunden, das ich vor Urzeiten mal für eine ähnliche Frage auf den alten Borland-Foren geschrieben hatte. Keine Ahnung für welche Delphi-Version, aber es sollte auch für die neuen Versionen funktionieren. Weist Du, wie man eine eigenen Komponente per Designtime package in der IDE installiert?

Delphi-Quellcode:
unit EvScrollBox;

interface

uses
  Windows, Messages, SysUtils, Classes, Controls, Forms;

type
  TEvScrollBox = class(TScrollBox)
  private
    FVScrollEvent: TNotifyEvent;
    FHScrollEvent: TNotifyEvent;
    Procedure WMVScroll( Var msg: TWMVScroll ); Message WM_VSCROLL;
    Procedure WMHScroll( Var msg: TWMHScroll ); Message WM_HSCROLL;
  protected
    Procedure DoVScroll;
    Procedure DOHSCroll;
  public
  published
    property OnVScroll: TNotifyEvent
      read FVScrollEvent write FVScrollEvent;
    property OnHScroll: TNotifyEvent
      read FHScrollEvent write FHScrollEvent;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Samples', [TEvScrollBox]);
end;

{ TEvScrollBox }

procedure TEvScrollBox.DOHSCroll;
begin
  If Assigned( FHSCrollEvent ) The
    FHScrollEvent( self );
end;

procedure TEvScrollBox.DoVScroll;
begin
  If Assigned( FVSCrollEvent ) Then
    FVScrollEvent( self );
end;

procedure TEvScrollBox.WMHScroll(var msg: TWMHScroll);
begin
  inherited;
  If msg.ScrollCode <> SB_ENDSCROLL Then
    DoHScroll;
end;

procedure TEvScrollBox.WMVScroll(var msg: TWMVScroll);
begin
  inherited;
  If msg.ScrollCode <> SB_ENDSCROLL Then
    DoVScroll;
end;

end.

TurboMagic 22. Jan 2019 19:10

AW: Ereignis für Scrollbalken in Scrollbox
 
Ich bin mir sicher peter's Lösung funktioniert und die ist im Prinzip auch eine ausformulierte Variante der anderen Message
basierten Lösung.

Es wäre aber evtl. schön, wenn der Originale Poster einen QP feature request unter quality.embarcadero.com anlegen würde
(und uns dann die Nummer mitteilt, damit wir abstimmen können), damit solch' nützliche Events in Zukunft "out of the box"
vorhanden sind und nicht erst nachgerüstet werden müssen.

Grüße
TurboMagic

EWeiss 22. Jan 2019 21:01

AW: Ereignis für Scrollbalken in Scrollbox
 
Zitat:

Zitat von TurboMagic (Beitrag 1423910)
Ich bin mir sicher peter's Lösung funktioniert und die ist im Prinzip auch eine ausformulierte Variante der anderen Message
basierten Lösung.

Es wäre aber evtl. schön, wenn der Originale Poster einen QP feature request unter quality.embarcadero.com anlegen würde
(und uns dann die Nummer mitteilt, damit wir abstimmen können), damit solch' nützliche Events in Zukunft "out of the box"
vorhanden sind und nicht erst nachgerüstet werden müssen.

Grüße
TurboMagic

Es hat niemand das Gegenteil behauptet.
Letztendlich ist das eine für die VCL basierende Lösung und es kommt am ende das selbe heraus wenn ich es mit Win32API mitteln bewerkstellige.

Nur eine extra Komponente dafür zu erstellen scheint mir doch etwas zu übertrieben.

gruss

ekatharina 25. Jan 2019 18:13

AW: Ereignis für Scrollbalken in Scrollbox
 
Es wäre aber evtl. schön, wenn der Originale Poster einen QP feature request ... ...

Werde die Anregung gerne aufnehmen. Nur derzeit ist eine Anmeldung bei Embacadero scheinbar nicht möchlich.
Grüße, ekatharina


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:05 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz