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/)
-   -   Prism kleine D8 procedure StringGrid1DrawCell (https://www.delphipraxis.net/25413-kleine-d8-procedure-stringgrid1drawcell.html)

Hansa 6. Jul 2004 00:50


kleine D8 procedure StringGrid1DrawCell
 
Hi,

folgendes ist mir rätselhaft im Zusammenhang mit D8 :

Delphi-Quellcode:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol,
  ARow: Integer; Rect: TRect; State: TGridDrawState);

procedure WriteText(StringGrid: TStringGrid; ACanvas: TCanvas; const ARect: TRect;
    const Text: string);
  const
    DY = 2;
  var
    S: array[0..255] of Char;
  begin
    with Stringgrid, ACanvas, ARect do begin
      ExtTextOut(Handle, Right - TextWidth(Text) - 3, Top + DY,
            ETO_OPAQUE or ETO_CLIPPED, @ARect, StrPCopy(S, Text),
            Length( Text), nil);
    end;
  end;

  procedure Display(StringGrid: TStringGrid; const S: string);
  begin
    WriteText(StringGrid, StringGrid.Canvas, Rect, S);
  end;

begin
  inherited;
  if (ACol = 1) or (ACol >=4) then
    Display(StringGrid1, StringGrid1.Cells[ACol, ARow]);
end;
Der Zweck ist, in einem Stringgrid 2 Nachkommastellen darzustellen. Ich gebe also "1" ein und es steht da "1.00" in der Zelle. Wie mache ich das nun unter D8 ? Und zwar ohne diese komische WinApi benutzen zu müssen ?

[edit=sakura] Titel gekürzt Mfg, sakura[/edit]
[edit=fkerber]Neu gespeichert wg. Code-Highlighting. Mfg, fkerber[/edit

Dax 6. Jul 2004 06:29

Re: kleines D8 Programmprocedure TfrmRegis.StringGrid1DrawCe
 
Die WinAPI steht doch unter D8 noch zur Verfügung, nur über viele Umwege.

Hansa 6. Jul 2004 12:43

Re: kleines D8 Programmprocedure TfrmRegis.StringGrid1DrawCe
 
Zitat:

Zitat von Dax
...nur über viele Umwege.

Eben deshalb werde ich diese tunlichts vermeiden. Es geht eben nicht darum, die halbtote WinApi durch die Hintertür wiederzubeleben. 8)

Vielmehr will ich wissen, wie man so ein konkretes Beispiel sauber mit D8 eben ohne Winapi realisiert.

Vielleicht hat es sich noch nicht so rumgesprochen, aber ein WinApi Programm ist in .NET ungefähr das, was ein DOS-Programm heute unter Win32 ist. Dann gibt es nicht nur eine "Dos-Box" wie unter Win32, sondern auch eine "Win32"-Box in .NET.

Dies wiederum bedeutet, daß die Vorteile von .NET nicht genutzt werden können, die Programme wohl langsamer werden usw., sofern immer noch die alte WinApi eingesetzt wird.

Robert_G 6. Jul 2004 13:52

Re: kleine D8 procedure StringGrid1DrawCell
 
Zitat:

Vielleicht hat es sich noch nicht so rumgesprochen, aber ein WinApi Programm ist in .NET ungefähr das, was ein DOS-Programm heute unter Win32 ist
Das trifft genauso auf dein Programm zu. (Immer erst an die eigene Nase fassen :zwinker: )
Die VCL.Net verwendet massiv Win32 Calls, da es Big B nicht fertiggebracht hat, sie vollständig unter .Net laufen zu lassen.

Zu deinem Problem:
Binde den NameSpace System.Globalization ein.
Ein simples...
Delphi-Quellcode:
var
  fmtConv    :NumberFormatInfo ;
  ...
begin
  ...
  fmtConv := Application.CurrentCulture.NumberFormat.Clone as NumberFormatInfo;
  fmtConv.NumberDecimalDigits := 2;
  DaHastDuEs := System.Decimal.Parse('1').ToString('N', fmtConv);
end;
... gibt dir deine formatierte Zahl.

[edit=fkerber]Neu gespeichert wg. Code-Highlighting. Mfg, fkerber[/edit


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