Autor Beitrag
Timelesk
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 82


Delphi 2006 Prof
BeitragVerfasst: Di 06.01.09 21:14 
Hallo,

ich stehe vor einem Problem.
Ich generiere dynamisch Spalten in mein NextGrid (Komponente von BergSoft).
Das ist alles kein Problem und funktioniert einwandfrei.
Nur jetzt würde ich gerne noch ein paar Eigenschaften der Spalten anpassen wie z.B. Position des Textes, ob sichtbar oder nicht...

Das Problem ist, dass Delphi nicht weiß, was für eine Spalte mit welchen Eigenschaften es ist (Textspalte oder Imagespalte).
Das habe ich auch gelöst, indem ich folgenden Aufruf starte:
ausblenden Delphi-Quelltext
1:
TNxImageColumn(main.gridNoten.Columns[main.gridNoten.Columns.Count-1]).Visible := false;					


wenn ich jetzt aber 5 Änderungen machen möchte, darf ich 5x diesen ewig langen Objektbezeichner schreiben.
Da dachte ich mir: Hey in PHP gibt es die Referenzen. Sowas gibt es doch bestimmt auch in Delphi. --> Pointer!

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
var
  PColumn: ^TNxImageColumn;
begin
  main.gridNoten.Columns.Add(TNxImageColumn, 'Löschen'); //Spalte erstellen. Funktioniert.
  
  PColumn := @TNxImageColumn(main.gridNoten.Columns[main.gridNoten.Columns.Count-1]);
  PColumn.Images := main.ImageList;
  PColumn.Alignment := taCenter;


Aber in der Zuweisung von PColumn gibt er mir jetzt eine Fehlermeldung aus:
E2046 Variable erforderlich

Die Fehlermeldung ist zwar eindeutig, aber ich verstehe das Problem echt nicht.
Die Spalte wird gesetzt, belegt Speicher und muss doch irgendwie referenzierbar sein.

Könnt ihr mir weiterhelfen?

Vielen herzlichen Dank.

gruß
Timelesk


PS: Als ich das hier eben verfasste ist mir die Möglichkeit mit with ... do ... eingefallen.
Auch eine Lösung, aber mich interessiert trotzdem, warum das nicht klappt!


Moderiert von user profile iconNarses: Topic aus VCL (Visual Component Library) verschoben am Di 06.01.2009 um 20:19
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Di 06.01.09 21:18 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
var
  MyColumn: TNxImageColumn;
begin
  main.gridNoten.Columns.Add(TNxImageColumn, 'Löschen'); //Spalte erstellen. Funktioniert.
  
  MyColumn := TNxImageColumn(main.gridNoten.Columns[main.gridNoten.Columns.Count-1]);
  MyColumn.Images := main.ImageList;
  MyColumn.Alignment := taCenter;


Variablen von einer Klasse sind intern schon Pointer, deswegen brauchste hier nicht noch nen "Extra-Pointer"

Zusätzlich kannste dir noch anschauen, ob es sich in Zeile 4 um eine Funktion handelt, dann geht's vllt. auch so:
ausblenden Delphi-Quelltext
1:
  MyColumn := TNxImageColumn(main.gridNoten.Columns.Add(TNxImageColumn, 'Löschen')); //Spalte erstellen. Funktioniert.					

_________________
PROGRAMMER: A device for converting coffee into software.
Timelesk Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 82


Delphi 2006 Prof
BeitragVerfasst: Mi 07.01.09 12:59 
Hi,

vielen Dank für deine Antwort.
D.h. also wenn ich das einfach umleite auf nen neue Variable wird automatisch ein Pointer gesetzt?
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Mi 07.01.09 13:04 
Jo, es wird intern automatisch mit Pointern gearbeitet.
Ein ganzes Objekt kann man nicht (so einfach?) "kopieren".

_________________
PROGRAMMER: A device for converting coffee into software.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 07.01.09 13:34 
user profile iconXentar hat folgendes geschrieben Zum zitierten Posting springen:
Jo, es wird intern automatisch mit Pointern gearbeitet.
Um das nochmal deutlich zu sagen: Wenn es eine Instanz einer Klasse ist (wie hier)!

user profile iconXentar hat folgendes geschrieben Zum zitierten Posting springen:
Ein ganzes Objekt kann man nicht (so einfach?) "kopieren".
Normalerweise mit Assign. ;-) (Wenn die Klasse das implementiert hat.)
Timelesk Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 82


Delphi 2006 Prof
BeitragVerfasst: Mi 07.01.09 15:03 
Vielen herzlichen Dank für eure Hilfe.
Hab es jetzt so gelöst, wie Xentar in seinem ersten Post beschrieben hatte.