AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

32bit-ScrollPosWerte gibt's gerade irgendwie nicht?

Ein Thema von r29d43 · begonnen am 20. Jan 2018 · letzter Beitrag vom 20. Jan 2018
 
r29d43

Registriert seit: 18. Jan 2007
289 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: 32bit-ScrollPosWerte gibt's gerade irgendwie nicht?

  Alt 20. Jan 2018, 18:55
Zeig doch mal ein minimales Code-Beispiel. Dann müssen wir nicht raten.


Die Proc wird aus der WndProc des RichEdits heraus gecallt (noch vorm "inherited"), wenn dort gerade eine wm_VScroll-Message durchläuft. Dann möchte ich noch bevor dieser Scroll-Akt ausgeführt wird, an bestimmten Stellen des Textes der jetzt gleich zu sehen sein wird spezielle Formatierung vornehmen usw. usf...

Delphi-Quellcode:
procedure TTextViewForm.spcFormatter(AMessage : TMessage);
var I, I9 : integer;
    RE1SelStart, RE1SelLength : integer;
    RE1TextAttributes : TTextAttributes;
    RE1ScrollInfo : ScrollInfo;
begin
  // Speicherung gewisser RE1-Werte zwecks späterer Wiederherstellung
  RE1SelStart := RichEdit1.SelStart;
  RE1SelLength := RichEdit1.SelLength;
  RE1TextAttributes := RichEdit1.SelAttributes;

  firstVisibleRE1Line := RichEdit1.Perform(EM_GETFIRSTVISIBLELINE,0,0); // aktuelles firstVisibleRE1Line zum Zeitpunkt der Message in der RE1-WndProc - dh.: aus der muss jetzt erst das zukünftige neue firstVisibleRE1Line errechnet werden ..um diese eine Zeile dann vorab hier schnell zu formattieren

  // alternative firstVisibleRE1Line-Berechnung aufbauend auf dem ScrollPosWert
  DWordVar := GetScrollPos(RichEdit1.Handle,SB_VERT); <================== hier kommt dann leider der NUR 16bit-Wert
  firstVisibleRE1Line := DWordVar;
  firstVisibleRE1Line := firstVisibleRE1Line div realTextHeight;

  // zum Gegencheck im Debugger: kriege ich hiermit vielleicht 32bit-Werte?
  RE1ScrollInfo.cbSize := SizeOf(RE1ScrollInfo);
  RE1ScrollInfo.fMask := SIF_PAGE or SIF_POS or SIF_RANGE or SIF_TRACKPOS;
  getScrollInfo(RichEdit1.Handle,SB_VERT,RE1ScrollInfo); <============== im Debugger sehe ich dann in RE1ScrollInfo auch den leider NUR 16bit-Wert

  if (AMessage.WParamLo = SB_PAGEUP) then firstVisibleRE1Line := firstVisibleRE1Line - ceil(Richedit1.ClientHeight / realTextHeight)
  else
  .
  .
  .
  else
    exit;

  RichEdit1.HideSelection := true;

  if firstVisibleRE1Line < 0 then firstVisibleRE1Line := 0;
  for I := 1 to 2 do begin
    if firstVisibleRE1Line > RichEdit1.Lines.Count-1 then break;
    if FIDs[firstVisibleRE1Line] and b30 = 0 then begin

      spcPraeOnIdleFormatterFlag := true;
      ONsOFFsText_Formatter(RichEdit1,@FIDs,FUNIDs,Pointer(momClDim_OnOffs),@FColorDim,true, firstVisibleRE1Line);
      spcPraeOnIdleFormatterFlag := false;

    end;
    inc(firstVisibleRE1Line);
  end;

  RichEdit1.SelStart := RE1SelStart;
  RichEdit1.SelLength := RE1SelLength;
  RichEdit1.SelAttributes := RE1TextAttributes;

  RichEdit1.HideSelection := false;
end;
  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 16:46 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