Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi tabstop rechtsbündig (https://www.delphipraxis.net/142729-tabstop-rechtsbuendig.html)

champagner 2. Nov 2009 19:23


tabstop rechtsbündig
 
Hallo,

ich habe folgenden Code:

Delphi-Quellcode:
procedure TAb_rechtsbuendig();
var
  pf2: PARAFORMAT2;
begin
  FillChar(pf2, SizeOf(pf2), 0);
  pf2.cbSize := SizeOf(pf2);
  pf2.dwMask := PFM_Tabstops;
  pf2.cTabCount:=5;
   pf2.rgxTabs[0]:=1440;
   pf2.rgxTabs[1]:=2880;
   pf2.rgxTabs[2]:=4000;
   pf2.rgxTabs[3]:=5000;
   pf2.rgxTabs[4]:=6000;


  SendMessage(form1.Richedit1.Handle, EM_SETPARAFORMAT, 0, Longint(@pf2));
end;
Ich möchte, dass die Tabstops rechtsbündig sind (also nicht der Text). D.h., wenn man mit der Tab-Taste weitergeht und Text eingibt, verschiebt sich dieser nach links (s. OpenOffice Writer, auf Tabstop doppelt klicken).

name 1
name 12

und eben nicht:

name 1
name 12

Hat jemand eine Idee? Ich bin ein Newbie mit den API-Geschichten.

Danke!

[edit=Matze][delphi]-Tags eingefügt. MfG, Matze[/edit]

himitsu 2. Nov 2009 19:39

Re: tabstop rechtsbündig
 
bitte benutze mal diese [delphi]...[/delphi]-Tags
sowie [code]...[/code] für dein Beispiel (die Leerzeichen sind sonst sinnlos)
du kannst deinen Beitrag auch noch editieren und dieses ändern ... einfach auf [edit] klicken


und für WinAPI-Sachen
MSDN-Library durchsuchenEM_SETPARAFORMAT

dort klickst du dich zum passenden Eintrag durch
http://msdn.microsoft.com/en-us/library/bb774276.aspx
da geht es dann weiter mit den Records (sind da verlinkt)
http://msdn.microsoft.com/en-us/library/bb787942.aspx

und dort steht wiederum was man wie setzen muß, damit das gewünschte passiert.
siehe rgxTabs

champagner 2. Nov 2009 19:46

Re: tabstop rechtsbündig
 
Hallo,

sorry, werde mich zukünftig daran halten.

Wäre es möglich, ein bisschen Quellcode zu erhalten? Ich habe nämlich leider wirklich nicht so viel Ahnung; es wäre aber wichtig für mich, dieses Problem mit den Tabstops zu lösen...

VIELEN Dank!

himitsu 2. Nov 2009 19:58

Re: tabstop rechtsbündig
 
den Quellcode hast du schon
und was du genau ändern mußt, das steht im MSDN
Delphi-Quellcode:
pf2.rgxTabs[1] := 2880 or ...;
... = hier jetzt die Werte dazurechnen, welche da drüben erwähnt wurden


Aber vermutlich hast du eh pech und es geht bei dir nicht.
Du hast ja nicht erwähnt welche Delphi-Version und welches OS du nutzt.
Zitat:

These bits do not affect the rich edit control display for versions earlier than Rich Edit 3.0.

champagner 2. Nov 2009 20:10

Re: tabstop rechtsbündig
 
Hallo,

vielen Dank.

Ich habe TurboDelphi und Windows Vista.

Den Wert hinter dem "or", ist das der Wert "2" für "right aligned tab"? oder muss ich dort $2000000 eintragen?


Vielen Dank!

champagner 2. Nov 2009 20:12

Re: tabstop rechtsbündig
 
Ach ja, und wie genau funktioniert das mit dem 24-27 bit?

himitsu 2. Nov 2009 20:19

Re: tabstop rechtsbündig
 
Delphi-Quellcode:
pf2.rgxTabs[1] := 2880 or (2{rechts} shl 24);

pf2.rgxTabs[1] := 2880 or $02000000;
$0x000000 = Bits 24-27
$x0000000 = Bits 28-31

champagner 2. Nov 2009 20:34

Re: tabstop rechtsbündig
 
Vielen, vielen Dank!

champagner 3. Nov 2009 21:30

Re: tabstop rechtsbündig
 
Ich habe jetzt folgenden Quelltext entworfen:

Delphi-Quellcode:
unit Paraformat_Beispiel;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, richedit, StdCtrls, ComCtrls;

type
  TForm1 = class(TForm)
    RichEdit1: TRichEdit;

    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen } 
  public
    { Public-Deklarationen } 
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm} 


procedure TForm1.FormCreate(Sender: TObject);
var
  pf2 : PARAFORMAT2;
  i  : Integer;
begin
  SendMessage(Richedit1.Handle, EM_GETPARAFORMAT, 0, Longint(@pf2));// brauche ich das? 
  FillChar(pf2, SizeOf(pf2), 0); // brauche ich das? 
  pf2.cbSize  := SizeOf(pf2);
  pf2.dwMask := PFM_Tabstops;
  pf2.cTabCount :=5;
  pf2.rgxTabs[0]:=1440;
  pf2.rgxTabs[1]:=2880 or $02000000;
  pf2.rgxTabs[2]:=4000;
  pf2.rgxTabs[3]:=5000;
  pf2.rgxTabs[4]:=6000;

  SendMessage(Richedit1.Handle, EM_SETPARAFORMAT, 0, Longint(@pf2));
end;

end.
Das Setzen der Tabstops funktioniert offenbar bestens. Leider funktioniert nicht, dass das Tab [1] rechtsbündig ist.

Bitte: Was fehlt an meinem Quellcode? Mein System: Vista, Turbodelphi.

Vielen Dank!

champagner 5. Nov 2009 19:22

Re: tabstop rechtsbündig
 
Hallo,

kann mir irgendwer helfen? Danke!


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:24 Uhr.
Seite 1 von 2  1 2      

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