AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Möchte StringGrid für verschiedene Typen (Variablenformate)
Thema durchsuchen
Ansicht
Themen-Optionen

Möchte StringGrid für verschiedene Typen (Variablenformate)

Ein Thema von EccoBravo · begonnen am 28. Jun 2006 · letzter Beitrag vom 28. Jun 2006
Antwort Antwort
Benutzerbild von EccoBravo
EccoBravo

Registriert seit: 19. Okt 2004
Ort: Neuruppin
524 Beiträge
 
Delphi 2007 Architect
 
#1

Möchte StringGrid für verschiedene Typen (Variablenformate)

  Alt 28. Jun 2006, 17:47
Hallo,

habe irgend wie eine Blockade,
ich will eine eigene Komponente abgeleitet von TStringGrid erzeugen, in die ich gleich alle Zahlenformate hineinschreiben kann (ohne immer vorher FloatToStr oder IntToStr machen zu müssen).
Für TEdit habe ich das schon gemacht, das ging ganz leicht.
Aber bei TStringGrid habe ich irgendwie das Problem mit den ZellIndices.
Jedenfalls meckert der Kompiler immer über inkompatible Typen.

Hier schnell mal der Komponenten-Code:
Delphi-Quellcode:
unit EBStringGrid2;

interface

uses
  SysUtils, Classes, Controls, Grids;

type
  TEBStringGrid2 = class(TStringGrid)
  private
    FCellInte: Integer;
    FCellPCentX: single;
    FCellFloat2: single;
    FCellPCent2: single;
    FCellPCent1: single;
    FCellFloatX: single;
    FCellPCent3: single;
    FCellFloat4: single;
    FCellFloat3: single;
    FCellFloat1: single;
    procedure SetCellFloat1(const Value: single;i,j:integer);
    procedure SetCellFloat2(const Value: single;i,j:integer);
    procedure SetCellFloat3(const Value: single;i,j:integer);
    procedure SetCellFloat4(const Value: single;i,j:integer);
    procedure SetCellFloatX(const Value: single;i,j:integer);
    procedure SetCellInte(const Value: Integer;i,j:integer);
    procedure SetCellPCent1(const Value: single;i,j:integer);
    procedure SetCellPCent2(const Value: single;i,j:integer);
    procedure SetCellPCent3(const Value: single;i,j:integer);
    procedure SetCellPCentX(const Value: single;i,j:integer);
    { Private-Deklarationen }
  protected
    { Protected-Deklarationen }
  public
    { Public-Deklarationen }
  published
    { Published-Deklarationen }
    property CellFloatX:single read FCellFloatX write SetCellFloatX(i,j:integer); //*in dieser Zeile
    property CellFloat1:single read FCellFloat1 write SetCellFloat1(i,j:integer); // kommt die
    property CellFloat2:single read FCellFloat2 write SetCellFloat2(i,j:integer); // Fehlermeldung
    property CellFloat3:single read FCellFloat3 write SetCellFloat3(i,j:integer);
    property CellFloat4:single read FCellFloat4 write SetCellFloat4(i,j:integer);
    property CellPCentX:single read FCellPCentX write SetCellPCentX(i,j:integer);
    property CellPCent1:single read FCellPCent1 write SetCellPCent1(i,j:integer);
    property CellPCent2:single read FCellPCent2 write SetCellPCent2(i,j:integer);
    property CellPCent3:single read FCellPCent3 write SetCellPCent3(i,j:integer);
    property CellInte:Integer read FCellInte write SetCellInte(i,j:integer);

  end;

procedure Register;

implementation

{ TEBStringGrid2 }

procedure TEBStringGrid2.SetCellFloat1(const Value: single;i,j:integer);
begin
  FCellFloat1 := roundTo(Value,-1);
  Cells[i,j]:=FloatToStr(FCellFloat1);
end;

procedure TEBStringGrid2.SetCellFloat2(const Value: single;i,j:integer);
begin
  FCellFloat2 := roundTo(Value,-2);
  Cells[i,j]:=FloatToStr(FCellFloat2);
end;

procedure TEBStringGrid2.SetCellFloat3(const Value: single;i,j:integer);
begin
  FCellFloat3 := roundTo(Value,-3);
  Cells[i,j]:=FloatToStr(FCellFloat3);
end;

procedure TEBStringGrid2.SetCellFloat4(const Value: single;i,j:integer);
begin
  FCellFloat4 := roundTo(Value,-4);
  Cells[i,j]:=FloatToStr(FCellFloat4);
end;

procedure TEBStringGrid2.SetCellFloatX(const Value: single;i,j:integer);
begin
  FCellFloatX := Value;
  Cells[i,j]:=FloatToStr(FCellFloatX);
end;

procedure TEBStringGrid2.SetCellInte(const Value: Integer;i,j:integer);
begin
  FCellInte := Value;
  Cells[i,j]:=IntToStr(FCellInte);
end;

procedure TEBStringGrid2.SetCellPCent1(const Value: single;i,j:integer);
begin
  FCellPCent1 := roundTo(100*Value,-1);
  Cells[i,j]:=FloatToStr(FCellPCent1);
end;

procedure TEBStringGrid2.SetCellPCent2(const Value: single;i,j:integer);
begin
  FCellPCent2 := roundTo(100*Value,-2);
  Cells[i,j]:=FloatToStr(FCellPCent2);
end;

procedure TEBStringGrid2.SetCellPCent3(const Value: single;i,j:integer);
begin
  FCellPCent3 := roundTo(100*Value,-3);
  Cells[i,j]:=FloatToStr(FCellPCent3);
end;

procedure TEBStringGrid2.SetCellPCentX(const Value: single;i,j:integer);
begin
  FCellPCentX := 100*Value;
  Cells[i,j]:=FloatToStr(FCellPCentX);
end;


procedure Register;
begin
  RegisterComponents('EB_Tools', [TEBStringGrid2]);
end;

end.
Ob ich in den markierten Zeilen die Parameterliste weglasse oder nicht immer kommt die Fehlermeldung Inkompatible Typen

Mir fehlt hier irgendwie die Phantasie, wie ich das mit den Cell-Indices i, j hinbekommen kann.

Danke für Hilfe E. B.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Möchte StringGrid für verschiedene Typen (Variablenforma

  Alt 28. Jun 2006, 18:12
Moin EccoBravo,

lass bei den Properties einfach die Parameterliste weg. Die Parameter stehen ja weiter oben in der Deklaration.

[EDIT]
Vergiss mein dummes Geschwätz von Eben.

Wie hast Du denn die Deklarationen unter Private gemacht?

Schreib Dir die Property-Deklaration hin:

property CellFloatX[ACol, ARow : integer] : single read GetCellFloatX write SetCellFloatX; Drücke STRG-SHIFT-C.
Die restlichen Deklarationen werden automatisch erstellt, inklusive der Methodenrümpfe.

Du kannst natürlich auch zuerst alle Properties nach obigem Muster erstellen, und dann alle restlichen Deklarationen automatisch erstellen lassen.
[/EDIT]
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von EccoBravo
EccoBravo

Registriert seit: 19. Okt 2004
Ort: Neuruppin
524 Beiträge
 
Delphi 2007 Architect
 
#3

Re: Möchte StringGrid für verschiedene Typen (Variablenforma

  Alt 28. Jun 2006, 18:16
Hallo Chris,

danke, aber dann kommt der Fehler auch.

Grüße

E. B.
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#4

Re: Möchte StringGrid für verschiedene Typen (Variablenforma

  Alt 28. Jun 2006, 18:25
Wenn man versucht, einen Integer mit FloatToStr in einen String umzuwandeln, dann darf man sich nicht wundern.

Edit : Zeile 87
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von EccoBravo
EccoBravo

Registriert seit: 19. Okt 2004
Ort: Neuruppin
524 Beiträge
 
Delphi 2007 Architect
 
#5

Re: Möchte StringGrid für verschiedene Typen (Variablenforma

  Alt 28. Jun 2006, 19:00
Hallo Cris,

Das war eine gute Idee es so zu machen, aber trotzdem noch Fehlermeldung

[Fehler]EBStringGrid2.pas..Published-Eigenschaft'CellFloatX' kann nicht vom Type ARRAY sein
...

trotzdem vielen Dank

E.B.
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#6

Re: Möchte StringGrid für verschiedene Typen (Variablenforma

  Alt 28. Jun 2006, 19:37
Warum PUBLISHED? Du möchtest die Zellen des Grids doch nicht im Objektinspektor bearbeiten, oder? Verschiebe die Deklarationen einmal in den PUBLIC-Teil des Objekts.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#7

Re: Möchte StringGrid für verschiedene Typen (Variablenforma

  Alt 28. Jun 2006, 19:45
Was ist mit meinem Einwand ? Wird einfach ignoriert. Dann erzähle wenigstens vorher, daß zwar der geschilderte Fehler an der gesagten Stelle auftaucht, aber noch ca. 30 weitere danach kommen. Habe schnell mal den Code reduziert.

Hiermit kommen die besagten Fehler nun nicht mehr :

Delphi-Quellcode:
unit TestUnit2;

interface

uses
  SysUtils, Classes, Controls, Grids;

type
  TEBStringGrid2 = class(TStringGrid)
    procedure SetCellFloatX(const Value: real);
  private
    FCellFloatX: real;
  protected
    { Protected-Deklarationen }
  public
    { Public-Deklarationen }
  published
    { Published-Deklarationen }
    property CellFloatX:real read FCellFloatX write SetCellFloatX; //*in dieser Zeile
  end;

procedure Register;

implementation

{ TEBStringGrid2 }

procedure TEBStringGrid2.SetCellFloatX(const Value: real);
begin
  FCellFloatX := Value;
  Cells[1,1]:=FloatToStr(FCellFloatX);
end;

procedure Register;
begin
  RegisterComponents('EB_Tools', [TEBStringGrid2]);
end;

end.
Alleine in der reduzierten Fassung waren vorher 5 Fehler auszubessern. Der Code hier wird sich compilieren lassen. Er nützt aber nichts, wegen des Cells [1,1] Steht da i,j wie vorher, dann wird der Compiler da hängenbleiben. Also muß man ihm sagen was das soll. Mir ist zwar ziemlich klar, wie das gehen soll, aber muß wirklich jede einzelne Zelle einzeln behandelt werden ? Kann man das nicht auf die Cols beschränken ?

wg. roter Kasten : Ja, ähnliche Überlegung. Aber nützt das was im public ?
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von EccoBravo
EccoBravo

Registriert seit: 19. Okt 2004
Ort: Neuruppin
524 Beiträge
 
Delphi 2007 Architect
 
#8

Re: Möchte StringGrid für verschiedene Typen (Variablenforma

  Alt 28. Jun 2006, 19:59
Danke allerseits, es funktioniert, einen schönen Sommerabend E. B.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Möchte StringGrid für verschiedene Typen (Variablenforma

  Alt 28. Jun 2006, 23:19
Moin Hansa,

Zitat von Hansa:
Ja, ähnliche Überlegung. Aber nützt das was im public ?
kombiniere mal Hawkeyes Änderungsvorschlag mit meinem => Funktioniert mit Array.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:50 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