Delphi-PRAXiS
Seite 1 von 6  1 23     Letzte »    

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 Property "Objects" im Stringgrid (https://www.delphipraxis.net/37738-property-objects-im-stringgrid.html)

Hansa 9. Jan 2005 16:54


Property "Objects" im Stringgrid
 
Hi,

in diesem Thread hier :

http://www.delphipraxis.net/internal...a75c5f6fdb8c12

kam das Thema Ojects zur Sprache. Leider gibt das Thema in der Hilfe kaum was her. Was genau kann man damit jetzt machen ? Wenn ich das richtig sehe, dann kann man jeder einzelnen Zelle irgendwas zuordnen als TObject. Das ist mir aber etwas suspekt, weil zu abstrakt. 8) Ich bräuchte ein Fallbeispiel, möglichst einfach. :mrgreen:

Angenommen ich will gezielt einzelne Zellen nicht editierbar machen, in Abhängigkeit von einer Bedingung. Ginge das ? In diesem Falle bräuchte ich nur von jeder Zelle true oder false und müßte das irgendwie auswerten, aber wie ? Wer weiß mehr ? Mein Gespür sagt mir, daß damit wohl schon einiges möglich ist, wo man zuerst gar nicht dran denkt. Oder ich täusche mich, da in der Hilfe darüber tatsächlich nur ein Satz steht.

Nightshade 9. Jan 2005 17:17

Re: Property "Objects" im Stringgrid
 
Du kannst einfach ganze Objecte in einer Zelle speichern.

Delphi-Quellcode:
Type TMyObject = class(TObject)
  private
    Editable : boolean;
end;


procedure AddObjectToGrid(ACol, ARow : integer; Editable : boolean);
var
  MyObject : TMyObject;
begin
  MyObject := TMyObject.Create;
  MyObject.EditAble := EditAble;
  Stringgrid1.Objects[ACol, ARow] := MyObject;
end;

function TestForEdit(ACol, ARow):boolean;
var
  MyObject : TMyObject;
begin
  MyObject := TMyObject(Stringgrid1.Objects[ACol, ARow]);
  result := MyObject.EditAble;
end;
Nur mal so als Beispiel.....

PS : Nicht vergesen die Objekte wieder Freizugeben !

Jens Schumann 9. Jan 2005 17:49

Re: Property "Objects" im Stringgrid
 
Hallo Hansa,
das was ich jetzt sage gilt für TStringGrid und alle TStrings-Nachfahren.
Die Objects Eigenschaft eigent sich hervorragend, um dem Text noch Zusatzinfo's
in Form eines Objektes mitzugeben. Es könnte ja sein, dass der Text im Grid
eine Eigenschaft eines Objektes ist. Wenn Du die Zelle anwählst hast Du sofort
das ganze Objekt zur Hand. Das kann manchmal ziemlich praktisch sein.

Hansa 9. Jan 2005 19:41

Re: Property "Objects" im Stringgrid
 
Zitat:

Zitat von Jens Schumann
...Das kann manchmal ziemlich praktisch sein.

Kann man das so sehen, wie ein zu den einzelnen Zellen mitgeschlepptes 2. Array, in dem irgendwas drin ist, also auch nur ein boolean, wie in meinem Beispiel ? Oder eine Farbe oder was weiß denn ich ? :mrgreen:

Wenn das tatsächlich so ist, dann frage ich mich, warum nirgendwo, zumindest hier nicht, was darüber zu lesen steht. Das wäre dann wirklich eine praktische Sache, die man unbedingt nutzen sollte.

P.S.: ich meine damit ein Array wie Cells [x,y], nur eben kein Text.

Christian Seehase 9. Jan 2005 19:50

Re: Property "Objects" im Stringgrid
 
Moin Jens,

Zitat:

...und alle TStrings-Nachfahren.
leider nicht für alle :?

Bei TMemo.Lines und TRichEdit.Lines wird zwar kein Fehler produziert, wenn man AddObject verwendet, aber hier enthält das Objekt nichts. Der Wert bleibt immer 0.

@Hansa:
Zitat:

Zitat von Hansa
Wenn das tatsächlich so ist, dann frage ich mich, warum nirgendwo, zumindest hier nicht, was darüber zu lesen steht.

Was meinst Du mit "hier"?

Die Verwendung von Stringlist-Objekten für verschiedene Zwecke kam hier durchaus schon öfter mal zur Sprache.
Sozusagen als Tag Eigenschaft der Stringlisten ;-)

Hansa 10. Jan 2005 00:10

Re: Property "Objects" im Stringgrid
 
In dem Beispiel gehts nicht recht weiter. 8) Es waren einige Schreibfehler drin und hiermit gehts auch nicht. Wo muß ich "editable" besetzen ? AddObjectToGrid, wo muß das hin ? Im Moment erhalte ich nur Zugriffsverletzungen.

Delphi-Quellcode:
unit Unit1;

interface

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

type TMyObject = class(TObject)
  private
    Editable : boolean;
end;

  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    procedure StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
      var CanSelect: Boolean);
  private
    { Private-Deklarationen }
    Editable : boolean;
    MyObject : TMyObject;
  public
    { Public-Deklarationen }
    procedure AddObjectToGrid(ACol, ARow : integer; Editable : boolean);
    function TestForEdit(ACol, ARow : integer):boolean;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.AddObjectToGrid(ACol, ARow : integer; Editable : boolean);
var
  MyObject : TMyObject;
begin
  MyObject := TMyObject.Create;
  MyObject.EditAble := EditAble;
  Form1.StringGrid1.Objects[ACol, ARow] := MyObject;
end;

function TForm1.TestForEdit(ACol, ARow : integer):boolean;
begin
  MyObject := TMyObject(Stringgrid1.Objects[ACol, ARow]);
  result := MyObject.EditAble;
end;

procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
begin
  if TestForEdit (ACol,ARow) = true then
    showmessage ('zulässig')
  else
    showmessage ('nicht zulässig');
end;

end.

Muetze1 10. Jan 2005 00:49

Re: Property "Objects" im Stringgrid
 
Moin!

Finde ich auch verständlich, weil wenn du nirgendwo mal AddObjectToGrid() aufrufst, dann steht nirgendwo ein Objekt drinne und daher stürzt TestForEdit() ab, weil er auf ein Objekt zugreift was nicht vorhanden ist. TestForEdit() ist leider nicht so geschrieben das er vorher prüft, ob ein Objekt vorhanden ist. Grundlegend ist der Code so funktionsfähig, wenn du denn auch überall mit AddObjectToGrid() mal das Flag setzen würdest...

MfG
Muetze1

Hansa 10. Jan 2005 17:13

Re: Property "Objects" im Stringgrid
 
Ja, wenn man das so sieht. :mrgreen: Wo soll ich die Objekte denn erzeugen ? Zu Anfang hat das Grid nur eine leere Zeile. Wo setze ich da die Objects ?

Hansa 11. Jan 2005 20:20

Re: Property "Objects" im Stringgrid
 
Benutzt diese Dinger also auch kaum einer ? Es sieht doch so aus, daß man jeder Zelle noch einiges an weiteren Infos mitgeben kann, egal was. Deshalb einmal die Zwischenfrage, wer das ganze bei sich einsetzt und wofür.

kiar 11. Jan 2005 20:26

Re: Property "Objects" im Stringgrid
 
hallo hansa,

ich stze die Objekte in einem Stringgrid ein, um mehrere Farben in einer Zelle darzustellen.
aber das ist dir ja bekannt. :mrgreen:

wollte nur den anfang machen.

feine Sache----- die Objecte im Stringgrid------


raik


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:00 Uhr.
Seite 1 von 6  1 23     Letzte »    

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