![]() |
Property "Objects" im Stringgrid
Hi,
in diesem Thread hier : ![]() 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. |
Re: Property "Objects" im Stringgrid
Du kannst einfach ganze Objecte in einer Zelle speichern.
Delphi-Quellcode:
Nur mal so als Beispiel.....
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; PS : Nicht vergesen die Objekte wieder Freizugeben ! |
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. |
Re: Property "Objects" im Stringgrid
Zitat:
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. |
Re: Property "Objects" im Stringgrid
Moin Jens,
Zitat:
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:
Die Verwendung von Stringlist-Objekten für verschiedene Zwecke kam hier durchaus schon öfter mal zur Sprache. Sozusagen als Tag Eigenschaft der Stringlisten ;-) |
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. |
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 |
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 ?
|
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.
|
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 06:30 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