AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Property "Objects" im Stringgrid

Ein Thema von Hansa · begonnen am 9. Jan 2005 · letzter Beitrag vom 24. Feb 2005
Antwort Antwort
Seite 2 von 6     12 34     Letzte »    
Nightshade

Registriert seit: 7. Jan 2003
Ort: Menden
192 Beiträge
 
Delphi 7 Enterprise
 
#11

Re: Property "Objects" im Stringgrid

  Alt 11. Jan 2005, 21:26
Sobald du Text in die Zellen schreibst (muss ja irgendwo passieren ), musst du dann auch das Object anhängen.


Und In TestForEdit sollte man dann wirklich abfragen ob ein Object angehängt ist....


Delphi-Quellcode:
function TForm1.TestForEdit(ACol, ARow : integer):boolean;
begin
  if Stringgrid1.Objects[ACol, ARow] <> nil then begin
    MyObject := TMyObject(Stringgrid1.Objects[ACol, ARow]);
    result := MyObject.EditAble;
  end
  else
    result := false;
end;
Christian
Killing for peace is like fucking for virginity

Nightshade
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#12

Re: Property "Objects" im Stringgrid

  Alt 11. Jan 2005, 21:28
beim Stringrid setzt ich das nicht ein (weil ich das nie nutze). Aber bei Listviews zum Beispiel. Ich zeige in der Listview einfach nur einen Titel an und in dem Object was ich da dem Item zuweise werden Bilder, Pfade etc. hinterlegt, je nach dem was das programm macht.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
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, 19: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
Christian Seehase
(Co-Admin)

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

Re: Property "Objects" im Stringgrid

  Alt 13. Jan 2005, 23:05
Moin Hansa,

bis zu 32 boolsche Werte kannst Du auch direkt dort speichern, ohne ein Objekt haben zu müssen, es handelt sich ja schliesslich nur um einen 32 Bit grossen Wert, der einen Pointer zu einem Objekt darstellen kann, aber nicht muss.
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
Nightshade

Registriert seit: 7. Jan 2003
Ort: Menden
192 Beiträge
 
Delphi 7 Enterprise
 
#15

Re: Property "Objects" im Stringgrid

  Alt 13. Jan 2005, 23:19
Warum erstellst du in der Neuen Zeile nicht direkt die Objekte ?

Delphi-Quellcode:
procedure TfrmArtNrEin.ErzeugeNeueZeile(Sender: TObject);
var
  t : integer;
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;
    for t := 0 to pred(rows.Count) do // Direkt für jede Zelle ein Objekt erstellen.
       AddEditObjectToGrid(t, Row, true);
    NeueZeile := false; // hier wieder SelectCell einschalten
  end;
end;
Christian
Killing for peace is like fucking for virginity

Nightshade
  Mit Zitat antworten Zitat
Hansa

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

Re: Property "Objects" im Stringgrid

  Alt 14. Jan 2005, 19:51
Zitat von Christian Seehase:
...bis zu 32 boolsche Werte kannst Du auch direkt dort speichern, ohne ein Objekt haben zu müssen...
Wo ? Was meinst Du damit ?

Delphi-Quellcode:
procedure TfrmEin.ChangeEditObjectEditable (ACol, ARow : integer;
                                                    Editable : boolean);
begin
  if sgNr.Objects[ACol, ARow] <> nil then begin
    EditObject := TEditObject (sgNr.Objects[ACol, ARow]);
    EditObject.Editable := Editable;
    sgNr.Objects[ACol, ARow] := EditObject;
  end;
end;
So geht das ganze offensichtlich. Es geht hier darum, eine Eigenschaft des StringGrid-Objektes nur zu verändern unter der Vorrausetzung, daß es schon da ist. 8) Allerdings habe ich andere Aussagen gelesen, daß die Zeile :

EditObject := TEditObject (sgNr.Objects[ACol, ARow]); Besser gesagt, eine Zuweisung an das Objekt nicht nötig sei, da es ohnehin an die Zelle gebunden ist. Das Object sieht so aus :

Delphi-Quellcode:
  TEditObject = class(TObject)
    public
      Editable : boolean;
...
  end;
Der Typecast hier :

EditObject := TEditObject (sgNr.Objects[ACol, ARow]); ist mir im Zusammenhang auch noch nicht vollständig klar.

Wer weiß mehr ? Das Ding ist schon wichtig, aber ich denke schon daran, daß nicht mehr rauskommt als hier :

http://www.delphipraxis.net/internal...ect.php?t=4012

http://www.delphipraxis.net/internal...t=objektablage

Ist zwar schon länger her, aber mittlerweile alles voll im produktiven Einsatz. Dem Thema hier droht wohl dasselbe Schicksal.
Gruß
Hansa
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

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

Re: Property "Objects" im Stringgrid

  Alt 15. Jan 2005, 00:41
Moin Hansa,

die Zeile

EditObject := TEditObject (sgNr.Objects[ACol, ARow]); ist nicht notwendig, da Du das Objekt auch direkt so ansprechen kannst:

Delphi-Quellcode:
procedure TfrmEin.ChangeEditObjectEditable (ACol, ARow : integer;
                                                    Editable : boolean);
begin
  if sgNr.Objects[ACol, ARow] <> nil then begin
    (sgNr.Objects[ACol, ARow] as TEditObject).Editable := Editable;
  end;
end;

Wie sieht eigentlich die vollständige Deklaration Deines EditObjects aus?
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 kiar
kiar

Registriert seit: 2. Aug 2003
Ort: Aschersleben
1.362 Beiträge
 
Delphi 5 Professional
 
#18

Re: Property "Objects" im Stringgrid

  Alt 15. Jan 2005, 00:51
@chris,

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

rak
verhältnisse die einem nicht passen,
muss man verändern oder verlassen
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

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

Re: Property "Objects" im Stringgrid

  Alt 15. Jan 2005, 01:02
Moin Raik,

meine Aussage bezog sich hierauf:

Zitat von Hansa:
...spricht etwas dagegen, pro Zelle ein Object mit 5 Bool-Werten anzulegen...
wenn es sich ausschliesslich um boolsche Werte handelt, so lassen sich diese ja in fünf Bits darstellen.
Der Pointer den ein TObject darstellt ist 32-Bit gross, kann also sogar 32 derartige Werte enthalten.
Man muss ja nicht zwingend ein Objekt erzeugen, um den Pointer mit einem Wert zu füllen.

Beispiel (ein wenig auf Hansas Postings bezogen)

Delphi-Quellcode:
const
  _iEditable = $00000001; // Zelle ist editierbar
  _iScanned = $00000020; // Zelleninhalt wurde gescannt
  _iColorRed = $00000040; // Zelle soll rot sein
//...

// Den Pointer mit den beiden Bits belegen
sgNr.Objects[ACol, ARow] := TObject(_iEditable or _iScanned);
Jetzt enthält das Objekt der Zelle die zwei boolschen Werte (gesetzt), ohne dass ein Objekt erzeugt wurde.
Im Beispiel ist jetzt für die Zelle hinterlegt, dass sie editierbar ist, und das ihr derzeitiger Wert durch Scannen erzeugt wurde.
Sie soll nicht rot eingefärbt werden.
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 kiar
kiar

Registriert seit: 2. Aug 2003
Ort: Aschersleben
1.362 Beiträge
 
Delphi 5 Professional
 
#20

Re: Property "Objects" im Stringgrid

  Alt 15. Jan 2005, 01:07
hallo chris,

das ist ja cool ,

danke wieder etwas gelernt.

raik
verhältnisse die einem nicht passen,
muss man verändern oder verlassen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 6     12 34     Letzte »    


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 13:17 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