Autor Beitrag
mats
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 45



BeitragVerfasst: Sa 19.01.19 11:27 
Hallo,

ich habe auf einer Form ein StringGrig mit 8x8 Feldern. Um damit rechnen zu können habe ich einige Proceduren geschrieben und jedes Feld muß auch formatiert werden. Und zusammengerechnet muß es in der letzten Spalte / Reihe auch noch. Ein Aufwand von ca. 200 Zeilen.

Jetzt habe ich noch zwei StringGrids, die verschiedene Größen zum ersten haben. Nun wäre es doch gut, dachte ich so simple, wenn ich eine Klasse schriebe, die von StrinGrid abgeleitet ist, und zusätzlich meine Funktionen enthält, die zum Rechnen und Formatieren etc. nötig sind.
(Von Klassen abgeleitete Klassen hab ich schon geschrieben, aber nur abgeleitet von meinen eigenen Klassen (C++[DOS], PHP). Noch nie hab ich irgendwas von einer Klasse der Vcl abgeleitet und/oder erweitert.)

type
TSG = class(TStringGrid)
...
funktioniert NICHT! (siehe Bild)

Gibt es irgendwo ein einfaches Beispiel, an dem ich mich orientieren kann? Hat vielleicht jemand sowas irdendwo in einen Tutorial veröffentlicht?

Bitte am Anfang eher einfache Vorschläge, Danke.

mats


p.s. Vielleicht stelle ich mich wieder mal ein wenig blöd an, aber wo/wie fügt man OrgSourceCode ein?
Einloggen, um Attachments anzusehen!
ub60
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 694
Erhaltene Danke: 92



BeitragVerfasst: Sa 19.01.19 13:19 
Eigentlich sollte es so funktionieren.
Kann es sein, dass Du den neuen Typ innerhalb einer Klasse definierst? Etwas mehr Quelltext wäre hilfreich.

ub60
mats Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 45



BeitragVerfasst: Sa 19.01.19 18:46 
Hi,

bis jetzt habe ich eigentlich nichts gemacht: Ich habe eine neue Unit gestartet (ohne Formular), und die Namen ersetzt. Weiter nichts. Dann hab ich die Unit in mein Programm an Stelle von TSrinGrid geschrieben und wollt nur mal so kompilieren und Ende.
Denn, ich bin davon ausgegangen, daß ich über alle Funktionen von TSringGrid verfügen kann, nur dadurch daß meine Unit alles von TSringGrid erbt. Scheint aber nicht so zu sein?

mats
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2294
Erhaltene Danke: 420

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Sa 19.01.19 19:28 
Guten Abend mats,

dem Screenshot entnehme ich mal folgende Information:
Fehler hat folgendes geschrieben:
Feld Form13.StringGrid1 muss vom Typ
Vcl.Grids.TStringGrid sein, ist aber als TSG deklariert. Soll
die Deklaration korrigiert werden?

Für mich bedeutet das, dass du ein TStringGrid auf dem Formular platziert hast. Irgendwann wurde das Projekt kompiliert und eine .dfm Datei angelegt.
In der .dfm Datei wurde das Objekt StringGrid1 wie folgt unterlegt:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
object Form1: TForm1
  // ... Form1 - Eigenschaften und Werte
  object StringGrid1: TStringGrid
    // ... StringGrid1 - Eigenschaften und Werte
  end
end

Im Source (.pas Datei) hast du den Typ des Objektes StringGrid1 von TStringGrid auf TSG umgeschrieben.

Erkennst du nun den Fehler?

Dein Projekt geht davon aus, dass StringGrid1 ein TStringGrid ist, laut der .dfm Datei, im Source steht aber etwas ganz anderes!
Die dfm. Datei nacheditieren wäre jetzt keine (saubere) Lösung.
Entweder erzeugst du zur Laufzeit ein Objekt vom Typ TSG oder du installierst dir die Komponente.
Darüber habe ich hier zich Beiträge geschrieben und die anderen Helfer werden ebenso wissen, wie das genau geht.
Ich habe einen Termin wahrzunehmen. Bis dann :wave:

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)
mats Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 45



BeitragVerfasst: So 20.01.19 10:36 
Hallo Frühlingsrolle,

wenn ich es richtig verstehe: Ich muß aus meiner 'neuen' StringGrid-Klasse, abgeleitet von TSringGrid, eine Komponente machen und diese dann in Delphi als Komponente installieren und registrieren. Und dann kann ich die neue Kopmonente einsetzen wie TSringGrid oder jede andere Komponente. Und dann überschreibt Delphi mir auch die .dfm Datei?

Genau das ist es was ich will!
Vielen Dank für die Aufklärung.

mats
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2294
Erhaltene Danke: 420

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: So 20.01.19 11:13 
Genau. Sobald du deine Komponente installiert hast, kannst du sie, wie den Vorgänger, von der Palette holen und auf dein Formular setzen. In der .dfm Datei wird dadurch auch deine Komponente vermerkt.

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)
mats Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 45



BeitragVerfasst: So 20.01.19 13:05 
Hi,

hat alles geklappt. Jetzt muß ich meine Erweiterungen einbauen. Nur eins. Ich hab das neue Package leider in meinem derzeitigen Projektverzeichnis gespeichert. Muß ich für ein nächstes Projekt in einem anderen Verzeichnis es noch mal neu installieren usw.(?), da ich jetzt (noch) kein Standardverzeichnis für weitere Komponenten habe? Wie handhabt man sowas am effektivsten?

nochmal Danke

mats
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2294
Erhaltene Danke: 420

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: So 20.01.19 13:29 
Ich habe dafür ein eigenes Laufwerk, auf dem kein Betriebssystem vorliegt, und irgendwo darauf befindet sich ein entsprechendes Verzeichnis für diverse "Drittkomponenten", die jederzeit nachinstalliert werden können.
Die dafür zugehörigen Dateien (bei eigenen Komponenten) wie .pas, .dcu, .dpk, .lpk, .res ... sind wiederum in eigenen Ordnern.

Deine Komponente wird weiterhin bestehen und keine Neuinstallation verlangen. Dennoch solltest du sie "sauber" anlegen und die im Moment Verfügbare entfernen.

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)

Für diesen Beitrag haben gedankt: mats