![]() |
Problem mit record
Ich brauche ein ein mehrdimensionales array, indem ich die eigenschaften font und color einspeichere.
hier die deklaration:
Delphi-Quellcode:
Mein Problem: wie kann ich überprüfen ob der wert in ca[x,y].font schon gesetzt ist,
type
Tcell_attributes = array of array of Record Font : Tfont; color : Tcolor; end; //... var ca : Tcell_attributes; //... ca[x,y].font := // . . . also ob da schon was reingeschrieben wurde -? |
Re: Problem mit record
Auf Nil prüfen bzw. Assigned()
|
Re: Problem mit record
ich habe verucht die länge des arrays zu bestimmen, allerdings stürzt meine Anwendung dann auch immer ab
etwa so
Delphi-Quellcode:
setlength(ca1,stringgrid1.Colcount);
for x := 1 to stringgrid1.Colcount-1 do setlength(ca1[x], stringgrid1.RowCount); |
Re: Problem mit record
nil geht leider nicht - ich probier mal assigned
|
Re: Problem mit record
funktioniert leider nicht . . .
|
Re: Problem mit record
Liste der Anhänge anzeigen (Anzahl: 1)
assignd funktioniert allerdings geht der code nicht richtig . . .
also ich versuche alle Zellen in einem Stringgrid mit font und color eigenschaften zu belegen. mit color funktioniert das wunderbar - allerdings nicht mit font.
Delphi-Quellcode:
das problem : wenn ich eine zelle anklicke, das popupmenü öffen und denn auf 'schriftarten bearbeiten' klicke wird der font wert stdfont nicht richtig in den fontdialog1 eingefügt.procedure Temaske_excel.Schriftartbearbeiten1Click(Sender: TObject); begin if Assigned(ca1[stringgrid1.Col,stringgrid1.Row].font) then fontdialog1.Font := ca1[stringgrid1.Col,stringgrid1.Row].font else fontdialog1.Font := stdfont; if fontdialog1.Execute then begin ca1[stringgrid1.Col,stringgrid1.Row].font := fontdialog1.Font; end; end; der fontdialog1 sollte dann doch eigentlich stdfont anzeigen, oder? in der oncreate definiere ich stdfont so:
Delphi-Quellcode:
stdfont := Fontdialog1.font;
|
Re: Problem mit record
Zitat:
|
Re: Problem mit record
ahh daddy hat ahnung!(cool) wie bekomme ich das hin? muss ich da mit create arbeiten?
|
Re: Problem mit record
Haargenau, Du musst eine Klasse erst instanziieren. Vergiss aber bitte nicht, den belegten Speicher zum Schluss wieder freizugeben.
|
Re: Problem mit record
villeicht noch ein kleines Beispiel . . .
das ist doch ein array - muss ich jedes element einzelnd createn d.h. für die ganze Matrix einzelnd?`oder gibts ne lösung das besser hinzubekommen. Was ist mit font selber - muss ich auch ein tfont objekt erzeugen? |
Re: Problem mit record
jaa. ich habs geschafft. danke analle!!! :cheers:
so sollte es sein. Allerdings ist mir erst am heutigen(!) tage aufgefallen, das man objekte nicht wie variablen zuweisen kann, sondern immr nur mit assign. was passiert eigentlich mit meinen variablen wenn ich z.B. das hier mache: // ACHTUNG!! absichtlich falscher code!! font1 := font2; Was passiert hierbei, wird da der Font1 Zeiger einfach überschrieben von font2?? (bedeutet das, Font1 wird dann immer noch font1 heissen allerdings mit den eigenschaften von font2 + die alte font1-ram-speicherstelle bleibt verbaut und unaufrufbar)???
Delphi-Quellcode:
procedure Temaske_excel.Schriftartbearbeiten1Click(Sender: TObject);
begin // objekt kreiren falls nicht existent. if ca1[stringgrid1.Col,stringgrid1.Row] = nil then ca1[stringgrid1.Col,stringgrid1.Row] := Tcell_attributes.Create; if assigned(ca1[stringgrid1.Col,stringgrid1.Row].font) then begin fontdialog1.Font.Assign(ca1[stringgrid1.Col,stringgrid1.Row].font); end else begin ca1[stringgrid1.Col,stringgrid1.Row].Font := Tfont.Create; fontdialog1.Font.Assign(stdfont); end; if fontdialog1.Execute then begin ca1[stringgrid1.Col,stringgrid1.Row].font.Assign(fontdialog1.Font); fontdialog1.Font.Assign(stdfont); end; end; |
Re: Problem mit record
Es gibt ein Speicherleck. Denn die ursprünglichen Daten von font1 liegen ja noch irgendwo rum, aber du hast den Hinweis auf die Stelle überschrieben und somit weiß niemand wo.
Wenn du jetzt an eine Eigenschaft von Font1 etwas zuweist, ändert sich auch der enstprechende Wert bei font2. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:36 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