AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Ereignis für Scrollbalken in Scrollbox

Ein Thema von ekatharina · begonnen am 19. Jan 2019 · letzter Beitrag vom 26. Jan 2019
Antwort Antwort
Seite 1 von 2  1 2   
ekatharina

Registriert seit: 16. Dez 2012
21 Beiträge
 
#1

Ereignis für Scrollbalken in Scrollbox

  Alt 19. Jan 2019, 10:11
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
  Mit Zitat antworten Zitat
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
(Gast)

n/a Beiträge
 
#3

AW: Ereignis für Scrollbalken in Scrollbox

  Alt 19. Jan 2019, 12:25
Zitat:
Und ein Ereignis scrollbox.scrollbalken gibt es wohl nicht.
WM_HSCROLL.. WM_VSCROLL ?
Analysiere Low(wP) und High(wP)

gruss

Geändert von EWeiss (19. Jan 2019 um 14:08 Uhr)
  Mit Zitat antworten Zitat
ekatharina

Registriert seit: 16. Dez 2012
21 Beiträge
 
#4

AW: Ereignis für Scrollbalken in Scrollbox

  Alt 19. Jan 2019, 14:20
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.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

AW: Ereignis für Scrollbalken in Scrollbox

  Alt 19. Jan 2019, 14:36
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.
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.

ControlID := Lp;
vorausgesetzt Lp ist in deiner Winproc als LPARAM definiert.
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

Geändert von EWeiss (19. Jan 2019 um 18:59 Uhr)
  Mit Zitat antworten Zitat
ekatharina

Registriert seit: 16. Dez 2012
21 Beiträge
 
#6

AW: Ereignis für Scrollbalken in Scrollbox

  Alt 19. Jan 2019, 15:55
Prima und herzlichen Dank.
Werde voraussichtlich morgen dran gehen.
Nochmals vielen Dank
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
672 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Ereignis für Scrollbalken in Scrollbox

  Alt 20. Jan 2019, 13:18
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.
Peter Below
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.804 Beiträge
 
Delphi 12 Athens
 
#8

AW: Ereignis für Scrollbalken in Scrollbox

  Alt 22. Jan 2019, 19:10
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
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#9

AW: Ereignis für Scrollbalken in Scrollbox

  Alt 22. Jan 2019, 21:01
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

Geändert von EWeiss (22. Jan 2019 um 22:15 Uhr)
  Mit Zitat antworten Zitat
ekatharina

Registriert seit: 16. Dez 2012
21 Beiträge
 
#10

AW: Ereignis für Scrollbalken in Scrollbox

  Alt 25. Jan 2019, 18:13
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
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 14:04 Uhr.
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