Delphi-PRAXiS
Seite 3 von 6     123 45     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)

Robert_G 15. Jan 2005 01:43

Re: Property "Objects" im Stringgrid
 
Zitat:

Zitat von kiar
@chris,

moin, das würde mich mal interessieren, wie du das mit den 32 bool werten meinst.

rak

Ein Objekt ist ja nur ein Pointer -> 4 Byte -> 32 Werte in einem set. (wie Christian bereits schrieb)
Wobei ich kein Profi für solches Low-Level-Gefriemel bin.
Ich würde das ganze als das abtun was es ist. Ein simpler oller 2-dimenionaler Array, der dir eigentlich nix bringt, was nicht schon eine Variable eines 2d-TObject-arrays bringen würde. -> TypCasting bis zum Umfallen :?
Es wäre vielleicht sinnvoller von dem Grid abzuleiten und die Items gleich von der Klasse zu nehmen, die deinen Daten entspricht.
Oder besser: Eine Collection dieser Klasse, die du an das Grid packen kannst,...
Was auch immer du machst, es wäre sicher lesbarer und flexibler wenn du nicht diesen komischen Array nutzt. (So wie es bis jetzt aussieht hast du ja dein Formular mit einer Menge Code zugestopft, der da nicht hingehört. ;) )

kiar 15. Jan 2005 02:33

Re: Property "Objects" im Stringgrid
 
hallo robert,

das ist mir schon klar. ich wäre nur nie auf die Idee gekommen, es so zu realisieren.


raik

Hansa 20. Jan 2005 00:41

Re: Property "Objects" im Stringgrid
 
Hi,

habe das ganze mal durchexerziert. 8) Das geht so weit schon und ist wohl auch für solche Fälle gedacht. Aber : Ich kann ein neues Object erzeugen, mit row = row + 300 !! Für diese Dinger dann wieder wegzukriegen genügt es also nicht die Zellen eines Stringrids mit Rowcount, Free usw. durchzugehen.

Was ist jetzt ? Wer setzt das konkret ein ?

Hansa 12. Feb 2005 20:42

Re: Property "Objects" im Stringgrid
 
Ja, die Frage ist zumindest teilweise noch offen. Wer setzt das in der Praxis ein ?

Sharky 13. Feb 2005 08:48

Re: Property "Objects" im Stringgrid
 
Zitat:

Zitat von Hansa
Ja, die Frage ist zumindest teilweise noch offen. Wer setzt das in der Praxis ein ?

Ich :stupid:
Z.b. "Missbrauche" ich via TypCasting die Eigenschaft Object (bzw. Data bei einem TListView) dafür um die IDs von Datensätzen einer Tabelle zu speichern.
In einem anderen Probjekt (Auftragserfassung) habe ich in einem eigenen Objekt, das im prinzip nur ein Record war, Informationen zu jeder Zeile gespeichert die dort nicht angezeigt werden sollten da diese Werte in Editfeldern gezeigt wurden.
Ich finde das eine ganz tolle Sache. Man muss nur daran denken das man die erzeugten Objekte beim Löschen einer Zelle/Zeile selber wieder freigeben muss. Auch beim schliessen der Form muss man sich um die Freigabe der Objekte selber kümmern.

plautzer 15. Feb 2005 19:31

Re: Property "Objects" im Stringgrid
 
Hi,

ich habe ähnliche Fragen wie Hansi. Mir wurde schonmal nahe gelegt, TObject zu benutzen, aber bis jetzt sehe ich keinen wirklichen Sinn darin.

Ich habe ebenfalls ein Beispiel, bei dem ich gern wissen würde, ob das mit einen TObject besser umzusetzen wäre.

Ich will einfach alle Zeilen im Grid in Arrays gespeichert haben, damit ich diese per Speicherklick dann alle abarbeiten bzw speichern kann.

Meine Variante ist eine bissl umständlicher, aber funktioniert auch:

Delphi-Quellcode:
procedure TFmain.StringGridSetEditText(Sender: TObject; ACol, ARow: Integer; const Value: String);
begin  //Sobald ein feld editiert wird, wird die RowNummer im array a[x] gespeichert und die Änderungen im Label festgehalten
if posproof(strtoint(lgrid_change.Caption),stringgrid.Row) = false then
begin
setlength(a,stringgrid.RowCount);
zahl:=strtoint(lgrid_change.Caption);
a[zahl]:=stringgrid.Row;
lgrid_change.Caption:=inttostr(zahl+1);
end;
end;

//Die Funktion um die Position der reihe zu ermitteln

function TFmain.posproof(label_zahl,reihe:integer):boolean;
begin
if label_zahl > 0 then
  begin
    zahl:=1;
    while zahl < label_zahl do
      begin
      if reihe= a[zahl] then
      begin
      result:=true;
      exit;
      end
      else zahl:=zahl+1;
   end;
   result:=false;
end
else result:=false;
end;

//Das Speichern...

   zahl:=1;
   while zahl < strtoint(lgrid_change.Caption) do
   begin
   DM.SP_abrechnung_update.Params[0].AsString:= stringgrid.Cells[0,a[zahl]];
   DM.SP_abrechnung_update.Params[1].AsString:= stringgrid.Cells[1,a[zahl]];
   ...
   DM.SP_abrechnung_update.ExecProc;
   Dm.IBTrans.Commit;
   DM.IBTrans.Active := True;
   DM.Abrechnung.Open;
   zahl:=zahl+1;
   end;
Wie ihr sehen könnt fehlt mir noch die Prüfung ob ünberhaupt etwas geändert wurde. Kann man das über ein TObject lösen, sodass man den alten Zelleninhalt im TObject speichert und ihm beim Verlassen der Zelle mit dem neuen Zelleninhalt vergleicht?

Und könnte ich gleich die geänderten in den Arrays speichern und dann abarbeiten, ohne das ich die Anzahl der Veränderungen im Label speichere?


Schön Abend noch,

Plautzer

Hansa 15. Feb 2005 19:39

Re: Property "Objects" im Stringgrid
 
Zitat:

Zitat von plautzer
Ich will einfach alle Zeilen im Grid in Arrays gespeichert haben, damit ich diese per Speicherklick dann alle abarbeiten bzw speichern kann...

Irgendwie bist du auf dem Holzweg. Warum noch ein Array für ein Stringgrid ? :shock: Auf meiner Glaskugel steht allerdings, du willst für einzelne Zellen festhalten, ob sie geändert worden sind ?

Und dafür die Stringgrid-Objects benutzen ? Das würde schon so gehen. Allerdings würde ich alles von Anfang an lesen. Da muß schon noch einiges bedacht werden.

plautzer 17. Feb 2005 10:55

Re: Property "Objects" im Stringgrid
 
Zitat:

Zitat von Hansa
Irgendwie bist du auf dem Holzweg. Warum noch ein Array für ein Stringgrid ? ..

Kannst du das nochmal näher erläutern?
Ich wüsste mir sonst nicht weiter zu helfen.

Ich möchte ermöglichen, dass man verschiedene Zellen bzw. Zeilen im Stringgrid editieren kann und dann nur die geänderten Zeilen auch geupdatet werden.

Ich könnte es zwar so machen, das ich immer alles speichere, aber geht bei mir nicht, das ich jede Änderung(Zeitpunkt) festhalte und die sich dann ändern würde, auch wenn garnichts editiert wurde.

Ich habe jetzt noch folgendes Problem, und zwar habe ich nun die Daten aus der Tabelle auf X Tabellen verteilt.Ich muss nun realisieren, dass wenn man in den verschiedene Tabellen editiert und dann speichert, auch alle Daten geupdadet werden. Das kann ich nicht wie oben lösen.

Ich müsste an jeder Zelle eine Objekt,dranhängen, das den Tabellenname, die Zeile und wenns noch geht die ID beinhält.

Wie gesagt, muss ich das ganze wieder in Variablen (Arrays) speichern um dann alle auf einmal zu speichern.

Nochmal zur Änderung im Zelleinhalt:
Zitat:

Und dafür die Stringgrid-Objects benutzen ?
Gibt es noch andere möglichkeiten, außer zwei EDITS (vorher,nachher) zu vergleichen?


THx,

Plautzer

Hansa 17. Feb 2005 11:48

Re: Property "Objects" im Stringgrid
 
Du brauchst das Array nicht, weil du sowieso für jede Zelle ein Object mit Row und Col hast.

Dein Object würde dann so aussehen :

Delphi-Quellcode:
  TPlautzerObject = class(TObject)
    editierbar : boolean;
    ID        : integer;
    TableName : string;
  end;

plautzer 17. Feb 2005 13:44

Re: Property "Objects" im Stringgrid
 
Mahlzeit,

wenn ich das jetzt richtig verstehe, dann setze ich den Wert editiert der Zelle auf true. Wenn ich dann alles speichern will, dann lese ich alle zelle die aud true gesetz sind aus und kann mit den angehängten Informationen(reihe und ID), den ganzen Spaß auslesen, oder?

Bin ich damit wieder auf den Holzweg? Wenn nicht, dann würde ich gern wissen wie man die Objekte wieder ausliest.

Thx,

Plautzer


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:37 Uhr.
Seite 3 von 6     123 45     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