AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Komisches Verhalten: RichEdit+ SetViewPortOrgEx+Scrollen
Thema durchsuchen
Ansicht
Themen-Optionen

Komisches Verhalten: RichEdit+ SetViewPortOrgEx+Scrollen

Ein Thema von Memnarch · begonnen am 29. Nov 2010
Antwort Antwort
Benutzerbild von Memnarch
Memnarch

Registriert seit: 24. Sep 2010
737 Beiträge
 
#1

Komisches Verhalten: RichEdit+ SetViewPortOrgEx+Scrollen

  Alt 29. Nov 2010, 11:35
Tag allerseits.
Ich komme almällich meinem Ziel näher, ein Richedit über einen Backbuffer darzustellen .
Leider gibt sich folgendes problem:

Meine Funktion zum Zeichnen des Textes auf die Bitmap, tut sich mit dem scrollen schwer.
Hier mal der Code:

Code:
procedure TExtendedRichEdit.RichEditToCanvas(RichEdit: TExtendedRichEdit; ImageCanvas: TCanvas; PixelsPerInch: Integer);
var
  fmt: TFormatRange;
  TwipsPerPixel: Integer;
  VertScroll: Integer;
  HorizontalScroll: Integer;
begin
  VertScroll := GetScrollPos(RichEdit.Handle, sb_Vert);
  HorizontalScroll := GetScrollPos(RichEdit.Handle, sb_Horz);
  SetViewPortOrgEx(ImageCanvas.Handle, 50-HorizontalScroll, -VertScroll, nil);
  TwipsPerPixel := 1440 div PixelsPerInch;  //1440 div PixelsPerInch
  with fmt do
  begin
    hdc:= ImageCanvas.Handle;
    hdcTarget:= hdc;
    // rect needs to be specified in twips (1/1440 inch) as unit
    rc := Rect(0, 0,
                ImageCanvas.ClipRect.right * TwipsPerPixel,
                ImageCanvas.ClipRect.Bottom * TwipsPerPixel
              );
    rcPage:= rc;
    chrg.cpMin := 0;
    chrg.cpMax := RichEdit.GetTextLen;
  end;
  SetBkMode(ImageCanvas.Handle, TRANSPARENT);
  RichEdit.Perform(EM_FORMATRANGE, 1, Integer(@fmt));
  // next call frees some cached data
  RichEdit.Perform(EM_FORMATRANGE, 0, 0);
end;
Ohne SetViewPortOrgEx würde das Scrollen des RichEdits nicht berücksichtigt. Also benutze ich es + GetScrollpos um das Scrollen zu berücksichtigen.
Das merkwürdige:
Das scrollen klappt nur dann korrekt, wenn ich auf die pfeile der Scrollbar clicke(oder an eine stelle), aber NICHT wenn ich den "Schlitten" der scrollbar versuche zu ziehen. Dann nämlich verändert sich zwar die position, springt aber sofort wieder zurück, was zu einem Zittern führt, ohne dass sich wirklich was tut.(der schlitten bleibt aber an der losgelassenen position)

Zweitens: Wenn ich einfach per Cursor runterscrolle, klappt es zwar ganz gut ABER es scheint als ob er bei manchen zeilen zuerst nach rechtsscrolld bevor er eine zeile nach unten geht, was zu unerwünschten nebeneffekten führt(zucken/flackern, da nur für einen Frame sichtbar).

Drittens wäre esunglaublich Praktisch, wen EM_Formatrange nicht immer versuchen würde den Text in den sichtbaren Bereich zu quetchen(Horizontal). Eigentlich ist es ja zum drucken geeignet weswegen das eigentlich sinn macht, Brauichen tu ich es trotzdem nicht, da ich WordWrap abgeschaltet habe.

Hoffe jemand kann mir helfen.
Wenn ihr noch Informationen braucht die ich vergessen habe zu erwähnen, sagt bescheid, dann füge ich diese Hinzu.

PS: TExtendedRichedit ist imo nichts weiter als ein Richedit mit ein paar eigen Erweiterungen.
PSS: Ah okay, dass der schlitten nciht geht wie er soll, scheint wohl daran zu liegen dass er nicht direkt die position sondern eher die bewegungsgeschwindigkeit zurückliefert...dan muss ich wohl getscrollinfo noch verwenden um dazwischen zu unterscheiden?
Wenn das klappt fehlt nur noch dieser komische nach rechtscrolleffect wenn ich mit dem cursor runterscrolle v.v


MFG
Memnarch

Geändert von Memnarch (29. Nov 2010 um 12:04 Uhr)
  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 18:53 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