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 RichEdit und Textausrichtung - Code hat keine Auswirkung (https://www.delphipraxis.net/156160-richedit-und-textausrichtung-code-hat-keine-auswirkung.html)

TheMiller 22. Nov 2010 12:56

RichEdit und Textausrichtung - Code hat keine Auswirkung
 
Hallo Leute,

habe ein Projekt, bei dem ich ziemlich viel mit der Paraformat2-Struktur arbeite (Einrücken, Aufzählung etc..)

Nun wollte ich das Projekt um eine Textausrichtung erweitern. Dazu habe ich meinem Muster wieder eine Paraformat-Struktur angelegt, die Ausrichtung gesetzt und diese Struktur dem Editor übergeben. Es gibt keine Fehlermeldung, der Code hat halt einfach nur keine Auswirkung.

Ich finde den Fehler nicht. Die Vorgehensweise habe ich im ganzen Projekt - und da klappts dann auch immer

Delphi-Quellcode:
var
  fmt: TParaformat2;
begin
  ZeroMemory(@fmt, SizeOf(TParaFormat2));
  fmt.cbSize := SizeOf(TParaFormat2);

  fmt.dwMask:=PFM_ALIGNMENT;
  Editor.Perform(EM_GETPARAFORMAT, 0, lParam(@fmt));
  if (Align = 'left') then
  begin
    fmt.wAlignment:=PFA_LEFT;
  end else if (Align = 'center') then
  begin
    fmt.wAlignment:=PFA_CENTER;
  end else if (Align = 'right') then
  begin
    fmt.wAlignment:=PFA_RIGHT;
  end else if (Align = 'justify') then
  begin
    fmt.wAlignment:=PFA_JUSTIFY;
  end;

  Editor.Perform(EM_SETPARAFORMAT, 0, lParam(@fmt));
Ich hoffe, ihr könnt mir helfen. Achso: Ja, ich weiß, dass es einen Aligment-Typ gibt. Ich habe bei dem Erstellen dieses Codes nicht darauf geachtet. Ginge einfacher.

Danke im Voraus

turboPASCAL 22. Nov 2010 13:55

AW: RichEdit und Textausrichtung - Code hat keine Auswirkung
 
Hi,

Ich kann dir du deiner Frage keine genaue Antwort geben.

Aber warum nutzt du nicht die "Paragraph"-Eigenschaft deines RE.
zB.:

Delphi-Quellcode:
RichEdXYZ.Paragraph.Alignment := taCenter;

TheMiller 22. Nov 2010 14:00

AW: RichEdit und Textausrichtung - Code hat keine Auswirkung
 
Halte mich für einen Idioten...: Aber auf die oben dargestellte Weise ist es i-wie cooler ;)
Zumal das ganze Projekt so aufgebaut ist. Evtl. hilft es auch, da es nonvlc ist, denn ich die Editor-Komponente wechsel und diese vllt. nicht mehr diese Eigenschaft hat.

;)

himitsu 22. Nov 2010 14:17

AW: RichEdit und Textausrichtung - Code hat keine Auswirkung
 
Hat Perform nicht auch einen Rückgabewert (Result), welches man auswerten kann?

TheMiller 22. Nov 2010 14:21

AW: RichEdit und Textausrichtung - Code hat keine Auswirkung
 
Danke für die Antwort. Daran habe ich garnicht gedacht.

Delphi-Quellcode:
...
end else if (Align = 'justify') then
  begin
    fmt.wAlignment:=PFA_JUSTIFY;
  end;

  ShowMessage(IntToStr(Editor.Perform(EM_SETPARAFORMAT, 0, lParam(@fmt))));
  ShowMessage(SysErrorMessage(GetLastError()));
ShowMessage1: 0
ShowMessage2: Der Vorgang wurde erfolgreich ausgeführt.

himitsu 22. Nov 2010 14:25

AW: RichEdit und Textausrichtung - Code hat keine Auswirkung
 
hmmmmmm :?

du hast aber auch was markiert (SelStart und Co.), worauf diese Änderung ihre Auswirkung zeigen kann.

TheMiller 22. Nov 2010 14:32

AW: RichEdit und Textausrichtung - Code hat keine Auswirkung
 
Ja klar. Ich haue zum Testen wie wild in die Tasten ("sadasdah had ad"), markiere den sinnreichen Text und klicke dann auf den Button mit dem o.g. Code. Nix tut sich.

Aber wie gesagt: Die Vorgehensweise ist mir bekannt und immer die gleiche. Der Editor ist auch der richtige ...

Satty67 22. Nov 2010 14:46

AW: RichEdit und Textausrichtung - Code hat keine Auswirkung
 
Du holst Dir zuvor ParaFormat mit
Delphi-Quellcode:
Editor.Perform(EM_GETPARAFORMAT, 0, lParam(@fmt));
.
Ist danach etwas falsch gesetzt, evtl dwMask nicht mehr auf PFM_ALIGNMENT

TheMiller 22. Nov 2010 14:53

AW: RichEdit und Textausrichtung - Code hat keine Auswirkung
 
Bingo! Das war's!

Das setzen der Mask muss nach dem Holen passieren! Vielen Dank für die Hilfe. Ich hätte noch Ewigkeiten gesucht.

Also so:

Delphi-Quellcode:
  Editor.Perform(EM_GETPARAFORMAT, 0, lParam(@fmt));
  fmt.dwMask:=PFM_ALIGNMENT;
Nicht so:


Delphi-Quellcode:
  fmt.dwMask:=PFM_ALIGNMENT;
  Editor.Perform(EM_GETPARAFORMAT, 0, lParam(@fmt));
Vielen Dank!

TheMiller 22. Nov 2010 14:59

AW: RichEdit und Textausrichtung - Code hat keine Auswirkung
 
Hm, eine Frage bleibt dennoch offen.

Warum ist PFA_JUSTIFY vom Effekt her das gleiche wie PFA_LEFT? Wird der Blocksatz vom jvRichEdit nicht unterstützt?

Danke


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