Einzelnen Beitrag anzeigen

Hansa

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

Re: Property "Objects" im Stringgrid

  Alt 13. Jan 2005, 18:19
Hi,

ich habe das jetzt, zumindest ungefähr geschnallt, aber es tauchen Randeffekte auf :

1. Problem :
das editable Beispiel scheint zu gehen, aber nicht beim erzeugen neuer Grid-Zeilen. Ich konnte das nur realisieren durch Einführen einer neuen Form-globalen Variable. Und zwar so :

Delphi-Quellcode:
procedure TfrmArtNrEin.ErzeugeNeueZeile(Sender: TObject);
begin
  with Sender as TStringgrid do begin
    WertSpeichern;
    NeueZeile := true; // besetzen von Col und Row ruft SelectCell auf !!
    Col := 1; // das sgArtNr.Objects darf hier nicht verändert werden
    RowCount := RowCount + 1;
    Row := RowCount - 1;
    NeueZeile := false; // hier wieder SelectCell einschalten
  end;
end;
Kommentare im Source sind im Zusammenhang wichtig !!

Das SelectCell habe ich dann damit auch noch etwas vergewaltigt :

Delphi-Quellcode:
procedure TfrmArtNrEin.sgArtNrSelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
begin
  EditObject := TEditObject (sgArtNr.Objects [ACol,ARow]);

  CanSelect := EditObject.Editable or NeueZeile; // vorerst Form-global definiert

//showmessage (BoolToStr (CanSelect,true)+IntToStr (ACol)+' '+IntToStr (ARow));
(*
canselect := true;
*)

end;
Gut, das ganze geht schon so. Diese Variable "NeueZeile" gefällt mir allerdings nicht. Ich finde sie überflüssig. Die Editable Zellen im Grid werden solange richtig behandelt, bis RowCount erhöht werden muß, auch ohne "NeueZeile". Sieht da jemand vielleicht einen Denkfehler ?

2. Problem :

Es geht um das Create dieses Objects. Wenn ich einmal zuviel folgendes aufrufe :

Delphi-Quellcode:
procedure TfrmArtNrEin.AddEditObjectToGrid(ACol, ARow : integer; Editable : boolean);
var
  EditObject : TEditObject;
begin
  EditObject := TEditObject.Create;
  EditObject.EditAble := EditAble;
  sgArtNr.Objects[ACol, ARow] := EditObject;
end;
Was ist dann damit ? Es ist doch created und eventuell doppelt vorhanden. Also laufen in so einem Fall die Stringgrid-Zellen nicht mehr synchron zu den Edit Objects. 8) Also kann ich mich auch nicht darauf verlassen, eine for-Schleife zu verwenden, die Stringgrid-Zellen durchzugehen und zu löschen, hi Kiar .

Was auch noch den Speicher / das Laufzeitverhalten angeht : spricht etwas dagegen, pro Zelle ein Object mit 5 Bool-Werten anzulegen und wie wirkt sich so was aus ? Denn es ist ein doppelt 2-dimensionales Problem. Muß für jede Zelle im Fall der Fälle das Objects-Array auch wieder sozusagen Zelle um Zelle überprüft werden ?
Gruß
Hansa
  Mit Zitat antworten Zitat