Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi externes Fenster um einen Pixelwert scrollen? (https://www.delphipraxis.net/174840-externes-fenster-um-einen-pixelwert-scrollen.html)

Helmi 13. Mai 2013 18:02

externes Fenster um einen Pixelwert scrollen?
 
Hallo,

mittels
Delphi-Quellcode:
  h := GetForeGroundWindow;

  If h <> 0 then
    begin
      SendMessage(h, WM_VSCROLL, SB_PAGEUP, 0);
    end;
kann ich ein externes Fenster scrollen.
Nur gibt es eine Möglichkeit ein Fenster um einen bestimmten Pixelwert zu scrollen?

Bummi 13. Mai 2013 18:21

AW: externes Fenster um einen Pixelwert scrollen?
 
Delphi-Quellcode:
var
 h:THandle;
begin
 h := GetForeGroundWindow;
  If h <> 0 then
    begin
      SetScrollPos(h, SB_VERT, GetScrollPos(h,SB_VERT) - 1, true);
    end;
end;

Helmi 13. Mai 2013 18:39

AW: externes Fenster um einen Pixelwert scrollen?
 
Danke! - genau das was ich brauche

Aber irgendwie scheinen sich die Scrollbalken nicht dabei zu bewegen

Wenn ich mir den Wert von GetScrollPos anschaue, dann seh ich, dass er sich reduziert,
aber die Scrollbalken bewegen sich nicht

Helmi 15. Mai 2013 16:50

AW: externes Fenster um einen Pixelwert scrollen?
 
*oben aufhäng*

Medium 16. Mai 2013 00:53

AW: externes Fenster um einen Pixelwert scrollen?
 
Auch nicht, wenn du das Fenster mal anweist, sich komplett neu zu zeichnen?

Helmi 16. Mai 2013 17:27

AW: externes Fenster um einen Pixelwert scrollen?
 
Zitat:

Zitat von Medium (Beitrag 1215466)
Auch nicht, wenn du das Fenster mal anweist, sich komplett neu zu zeichnen?

bringt leider nichts

Hab es so gemacht:

Delphi-Quellcode:
  If h <> 0 then
    begin
      SetScrollPos(h, SB_VERT, GetScrollPos(h,SB_VERT) - 111, true);
      SendMessage(h, WM_PAINT, 0, 0);
    end;
Wobei SetScrollPos durch den 3. Parameter das Fenster schon zum Neuzeichnen anweist (laut Doku)

Helmi 25. Mai 2013 19:35

AW: externes Fenster um einen Pixelwert scrollen?
 
*nochmal nach oben häng*

Volker Z. 26. Mai 2013 02:07

AW: externes Fenster um einen Pixelwert scrollen?
 
Hallo,

hilft Dir vielleicht folgendes weiter (nur am Beispiel Inhalt nach unten scrollen)?:
Delphi-Quellcode:
procedure TForm1.ScrollDown (const Delta : Integer);
var
  h : HWND;
  i : TScrollInfo;
begin
  h := GetForegroundWindow;
  if h <> 0 then
    begin
      FillChar (i, SizeOf (TScrollInfo), 0);
      i.cbSize := SizeOf (TScrollInfo);
      i.fMask := SIF_ALL;
      if not GetScrollInfo (h, SB_VERT, i) then
        raise Exception.Create ('Fürchterlich martialische Fehlermeldung');

      if i.nPage + i.nPos = i.nMax then
        begin
          // TODO: Wir sind am Ende des Inhalts und jetzt?
          // Nachfolgender Code sollte eventuell noch ausgeführt werden
        end;

      i.fMask := SIF_POS;
      i.nPos := i.nPos + Delta;
      ScrollWindow (h, 0, -Delta, nil, nil);
      SetScrollInfo (h, SB_VERT, i, True)
    end
end
Gruß

Helmi 26. Mai 2013 09:38

AW: externes Fenster um einen Pixelwert scrollen?
 
Zitat:

Zitat von Volker Z. (Beitrag 1216396)
hilft Dir vielleicht folgendes weiter (nur am Beispiel Inhalt nach unten scrollen)?:

Danke!
Das hilft mir auf alle Fälle weiter!

Aber eines noch:
müsste es nicht eher
Delphi-Quellcode:
if i.nPage + i.nPos >= i.nMax then
anstatt
Delphi-Quellcode:
if i.nPage + i.nPos = i.nMax then
lauten?
Bei meinen Tests kam bei der Addition immer 1 mehr raus als nMax ergibt


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:54 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