Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Paraformat setzen geht mal, und mal nicht... (https://www.delphipraxis.net/136367-paraformat-setzen-geht-mal-und-mal-nicht.html)

TheMiller 29. Jun 2009 11:44


Paraformat setzen geht mal, und mal nicht...
 
Hallo,

ich kenne mich mittlerweile recht gut mit dem Paraformat aus. Nun habe ich im Forum eine Funktion zum Setzen von Tabstop-Positionen via Paraformat gesehen. Die Inbuild-RichEdit-Variante sei wohl verbuggt.

Nun habe ich 17 Richedits in meiner Anwendung (ja, das muss und soll so sein), bei denen ich gerne die Tabstop-Positionen festlegen will (im OnCreate v. Form1).

Nun gehe ich alle 17 durch und es funktioniert wunderbar - außer bei den letzten beiden RichEdits.

Nun habe ich mir mal die Fehlermeldung (SysErrorMessage) ausgeben lassen und da sagt er mir, das Handle sei ungültig.

Hier mal der Quelltext dazu:

Delphi-Quellcode:
procedure SetTabstops( re: TRichedit; TabPositions: array of single );
var
  pf: TParaFormat;
  i : Integer;
begin
  Assert( Assigned( re ), 'SetTabstops: re cannot be nil' );
  FillChar( pf, sizeof(pf), 0);
  pf.cbSize := Sizeof( pf );
  pf.dwmask := PFM_TABSTOPS;
  if High(TabPositions) >= MAX_TAB_STOPS then
    pf.cTabCount := MAX_TAB_STOPS
  else
    pf.cTabCount := High(TabPositions)+1;
  For i:= 0 To pf.cTabCount-1 Do
    pf.rgxTabs[i] := Trunc(TabPositions[i] * 1440);

  re.perform( EM_SETPARAFORMAT, 0, lParam( @pf ));
end; { SetTabstops } //Diese Fkt. habe ich gefunden - sie funktioniert auch soweit

procedure TForm1.FormCreate(Sender: TObject);
begin
  // Einer von 17 Aufrufen. Alle mit den gleichen Daten, nur reX unterscheidet sich
  SetTabstops(reKommentar, [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]);
end;
Ich hoffe, ihr könnt mit helfen.

Danke!

Lannes 29. Jun 2009 12:32

Re: Paraformat setzen geht mal, und mal nicht...
 
Hallo,

hast Du es schon mal in OnShow getestet?

TheMiller 29. Jun 2009 12:35

Re: Paraformat setzen geht mal, und mal nicht...
 
Hab ich grad gemacht - gleicher Fehler...

toms 29. Jun 2009 12:59

Re: Paraformat setzen geht mal, und mal nicht...
 
Hallo

Selbst mit 30 TRichEdits erhalte ich unter D5 keine Fehlermeldung.
Erhältst du die Fehlermeldung auch dann, wenn auf der Form nur die RichEdits sind?

TheMiller 29. Jun 2009 13:27

Re: Paraformat setzen geht mal, und mal nicht...
 
Das mit der Fehlermeldung schaut so aus. Ich habe in die o.g Funktion noch ein "ShowMessage" eingebaut:

Delphi-Quellcode:
procedure SetTabstops( re: TRichedit; TabPositions: array of single );
var
  pf: TParaFormat;
  i : Integer;
begin
  //Assert( Assigned( re ), 'SetTabstops: re cannot be nil' );
  FillChar( pf, sizeof(pf), 0);
  pf.cbSize := Sizeof( pf );
  pf.dwmask := PFM_TABSTOPS;
  if High(TabPositions) >= MAX_TAB_STOPS then
    pf.cTabCount := MAX_TAB_STOPS
  else
    pf.cTabCount := High(TabPositions)+1;
  For i:= 0 To pf.cTabCount-1 Do
    pf.rgxTabs[i] := Trunc(TabPositions[i] * 1440);

  re.perform( EM_SETPARAFORMAT, 0, lParam( @pf ));
  ShowMessage(SysErrorMessage(GetLastError)); // <---------- Hier
end; { SetTabstops }
Doch ich habe rausgefunden, dass das Verhalten u.a auch mit der Eigenschaft ScrollBars (ssVertical) der RichEdits zusammenhängt. Wenn ich diese Eigenschaft auf ssNone stelle, geht es manchmal. Was ist da los?


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