Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   TStringGrid in Delphi7 und XE (https://www.delphipraxis.net/176590-tstringgrid-delphi7-und-xe.html)

jan001 16. Sep 2013 10:20

AW: TStringGrid in Delphi7 und XE
 
Ich habe geprüft. Das gleiche Code ist mit D7 OK in XE5 nicht.

DeddyH 16. Sep 2013 10:22

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.

baumina 16. Sep 2013 10:29

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;

jaenicke 16. Sep 2013 10:47

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.

jan001 16. Sep 2013 11:37

AW: TStringGrid in Delphi7 und XE
 
Hier ist link zu Projekt im D7 und XE5.
http://www.a101.de/test/D7.ZIP
http://www.a101.de/test/XE5.ZIP

baumina 16. Sep 2013 13:04

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.

sx2008 16. Sep 2013 13:15

AW: TStringGrid in Delphi7 und XE
 
Du machst einen ganz bösen Fehler indem du innerhalb der Klasse
Delphi-Quellcode:
TForm1
auf die Instanz
Delphi-Quellcode:
Form1
zugreifst!!!

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:
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;
Da aber self und Form1 auf unterschiedliche Objekte verweisen können, bringt dich die Benüzung von Form1 in Teufels Küche.
Innerhalb einer Klasse anstatt über self auf Form1 zuzugreifen ist ganz eindeutig ein Fehler!

MEissing 16. Sep 2013 13:17

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)

DeddyH 16. Sep 2013 13:35

AW: TStringGrid in Delphi7 und XE
 
Zitat:

Zitat von sx2008 (Beitrag 1228675)
Du machst einen ganz bösen Fehler indem du innerhalb der Klasse
Delphi-Quellcode:
TForm1
auf die Instanz
Delphi-Quellcode:
Form1
zugreifst!!!

Mir scheint, Du hast den Thread nicht von Anfang an gelesen.

jan001 16. Sep 2013 13:45

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 09:05 Uhr.
Seite 2 von 3     12 3      

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