![]() |
AW: TStringGrid in Delphi7 und XE
Ich habe geprüft. Das gleiche Code ist mit D7 OK in XE5 nicht.
|
AW: TStringGrid in Delphi7 und XE
Ich hab kein XE5, daher kann ich das nicht verifizieren. Trotzdem würde ich noch einmal prüfen, ob die Instanz stimmt und welche Werte Col und Row von dessen StringGrid aktuell aufweisen.
|
AW: TStringGrid in Delphi7 und XE
Also im XE hab ichs eben versucht, da funktioniert es noch, eine höhere Version habe ich leider nicht.
Delphi-Quellcode:
type
TForm1 = class(TForm) StringGrid1: TStringGrid; Label1: TLabel; Label2: TLabel; procedure FormActivate(Sender: TObject); procedure StringGrid1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormActivate(Sender: TObject); var n : integer; begin StringGrid1.RowCount:= 5; StringGrid1.ColCount:= 3; StringGrid1.Cells[0,0]:= 'LNr'; for n:= 1 to 4 do begin StringGrid1.Cells[0,n]:= IntToStr(n); StringGrid1.Cells[1,n]:= IntToStr(n*10); StringGrid1.Cells[2,n]:= IntToStr(n*100); end; end; procedure TForm1.StringGrid1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Label1.Caption:= StringGrid1.Cells[StringGrid1.Col,StringGrid1.Row]; Label2.Caption:= Form1.StringGrid1.Cells[Form1.StringGrid1.Col,Form1.StringGrid1.Row]; end; |
AW: TStringGrid in Delphi7 und XE
Hast du vielleicht ein Testprojekt, das du hier anhängen kannst? Denn ohne zu wissen welche Formulare da erstellt werden, sprich ob Form1 überhaupt stimmt usw. lässt sich da nicht viel zu sagen.
|
AW: TStringGrid in Delphi7 und XE
Hier ist link zu Projekt im D7 und XE5.
![]() ![]() |
AW: TStringGrid in Delphi7 und XE
Delphi-Quellcode:
program Project1;
uses Vcl.Forms, Unit1 in '..\test7\Unit1.pas' {Form1}; // ist das wirklich die richtige unit????? {$R *.res} begin Application.Initialize; Application.MainFormOnTaskbar := True; Application.CreateForm(TForm1, Form1); // warum eigentlich 2mal????? Application.CreateForm(TForm1, Form1); // warum eigentlich 2mal????? Application.Run; end. |
AW: TStringGrid in Delphi7 und XE
Du machst einen ganz bösen Fehler indem du innerhalb der Klasse
Delphi-Quellcode:
auf die Instanz
TForm1
Delphi-Quellcode:
zugreifst!!!
Form1
Jede Methode hat einen versteckten Parameter mit dem Namen self. Zu Verdeutlichung ändere ich die Methode in eine Procedure und übergebe den Self-Parameter:
Delphi-Quellcode:
Da aber self und Form1 auf unterschiedliche Objekte verweisen können, bringt dich die Benüzung von Form1 in Teufels Küche.
procedure TForm1__StringGrid1MouseUp(Self: TForm1; Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); begin Self.Label1.Caption:= Self.StringGrid1.Cells[ self.StringGrid1.Col, self.StringGrid1.Row]; Self.Label2.Caption:= Form1.StringGrid1.Cells[Form1.StringGrid1.Col,Form1.StringGrid1.Row]; end; Innerhalb einer Klasse anstatt über self auf Form1 zuzugreifen ist ganz eindeutig ein Fehler! |
AW: TStringGrid in Delphi7 und XE
Das Projekt, wenn man es angepasst hat (UNIT-Verzeichnis), zeigt in der Tat den Fehler....
Fügt man die Unit in ein neues Projekt ein, so funktioniert's. Also/Lösung: Neues Projekt aufmachen und die Units rüberziehen (oder wahlweise die Projekteinstellungen vergleich/angleichen) |
AW: TStringGrid in Delphi7 und XE
Zitat:
|
AW: TStringGrid in Delphi7 und XE
Ich habe übersehen dass Compiler 2x Application.CreateForm(TForm1, Form1);
geschrieben hat. Das war Grund für den Fehler. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:48 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