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 rechtsbündige Eingabe im Stringgrid (https://www.delphipraxis.net/39524-rechtsbuendige-eingabe-im-stringgrid.html)

Hansa 3. Feb 2005 20:57


rechtsbündige Eingabe im Stringgrid
 
Hi,

ich habe ein Stringgrid und die Zahlenzellen sollen da rechtsbündig mit abschließenden Nullen usw. angezeigt werden. Das geht auch. Aber folgendes ist mir noch nicht gelungen : direkt bei der Eingabe eine rechtsbündige Darstellung zu erreichen.

Geht das relativ einfach, oder wird es kompliziert ? Dann bleibt nämlich alles wie gehabt.

Momentan steht im OnDrawCell folgendes :

Delphi-Quellcode:
DrawText(sg.Canvas.Handle, PChar(st), StrLen(PChar(st)),Rect,DT_RIGHT);
Im Endeffekt steht alles wie gewollt in den Zellen, aber eben noch nicht bei der Eingabe.

shmia 4. Feb 2005 16:27

Re: rechtsbündige Eingabe im Stringgrid
 
Zitat:

Zitat von Hansa
Hi,

ich habe ein Stringgrid und die Zahlenzellen sollen da rechtsbündig mit abschließenden Nullen usw. angezeigt werden. Das geht auch. Aber folgendes ist mir noch nicht gelungen : direkt bei der Eingabe eine rechtsbündige Darstellung zu erreichen.

Geht das relativ einfach, oder wird es kompliziert ? Dann bleibt nämlich alles wie gehabt.

Könnte kompliziert werden.
Du brauchst zunächst mal Zugriff auf TStringGrid.InplaceEditor.
Da dieses Property protected ist muss man tricksen:
Delphi-Quellcode:
type
   TSG = class(TStringGrid)
   end;

// ein Beispiel, wie man mit einem Timer den Inhalt des Editors verändern kann
procedure TForm1.Timer1Timer(Sender: TObject);
var
   sg : TSG;
begin
   sg := TSG(StringGrid1);
   if Assigned(sg.InplaceEditor) then
      sg.InplaceEditor.Text := 'Dummerle';
end;
Wenn du nun dem Editor eine WindowsMessage schickst,
dass er sich rechtsbündig anzeigen soll...

Hansa 4. Feb 2005 18:57

Re: rechtsbündige Eingabe im Stringgrid
 
Ich habe mal kurzerhand eine Komponente draus gemacht :

Delphi-Quellcode:
unit sgExt;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids;

procedure Register;

type
  TsgExt = class(TStringGrid)
  private
    { Private-Deklarationen }
    FAlignment: TAlignment;
    procedure SetAlignment(Value: TAlignment);
  published
    { Public-Deklarationen }
    property Alignment: TAlignment read FAlignment write SetAlignment;
  end;

implementation

// {$R *.dfm}

procedure TsgExt.SetAlignment (Value: TAlignment);
begin
  FAlignment := Value;
  RecreateWnd;
end;

procedure Register;
begin
  RegisterComponents('Eigene', [TsgExt]);
end;

end.
Zum testen dient vorerst das hier :

Delphi-Quellcode:
procedure TForm1.sgExt1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  if sgExt1.Alignment = taRightJustify then
  showmessage ('12345');
end;
Ich habe das Alignment umgestellt und lande auch an dieser Stelle. Die Frage ist nun, wie es weiter geht. Die ShowMessage kommt schon mal und die Frage ist, wie es auszuwerten ist.


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