![]() |
TStringgrid Unterart Properties löschen/sperren
Hallo! Ich bin gerade dabei, meine erste Komponente zu entwickeln. Es soll eine Unterart von TStringgrid sein. Jetzt möchte ich gerne alle Eigenschaften / Properties nur noch selber setzen können (also z.B. soll man von außen keinen Zugriff auf Rowheights mehr haben.) Nur left, width, name, height und width sollen noch verwendbar sein, wobei height und width immer gleich sein sollen.
Ist das möglich und wenn ja, wie? Liebe Grüße! |
AW: TStringgrid Unterart Properties löschen/sperren
Ja kannst du :
Delphi-Quellcode:
TMyStringgrid = class(TStringgrid)
private property RowCount; //Properties private machen //.. end; |
AW: TStringgrid Unterart Properties löschen/sperren
Nein geht nicht.
Man kann sichtbarkeiten nicht mehr verringern. (wäre auch 'n bissl sinnlos, dann man kann immernoch in einen Vorfahren casten und könnte alles sehen) Du kannst höchstens von TCustomStringGrid ableiten und nur die gewünschten Eigenschaften sichtbar machen. |
AW: TStringgrid Unterart Properties löschen/sperren
Zitat:
|
AW: TStringgrid Unterart Properties löschen/sperren
Hmm, seit wann geht das denn?
eigentlich sollte es nicht gehn ... müßte auch irgendwo in der OH drinstehn :gruebel: |
AW: TStringgrid Unterart Properties löschen/sperren
Also wenn ich bei mir (Delphi 5) z.B. RowCount in den private Block schreibe, kann man das trotzdem ändern...
|
AW: TStringgrid Unterart Properties löschen/sperren
OK, angeblich soll man sowas zumindestens kompilieren können, wie ich auf einigen Seiten grad gelesen hab
z.B. ![]() Aber IMHO ist das gegen die OOP und wer weiß ob Emba daran nicht doch mal was ändert und es zukünftig untersagt. Gut, TStringGrid hat leider keinen direkten Cutsom-Vorfahren für die dieses Fall, aber du kannt TCustomDrawGrid nutzen ... da ist dein Color noch versteckt. (nja, das zeigt wiedermal, daß TStringGrid noch weitere Probleme besitzt) |
AW: TStringgrid Unterart Properties löschen/sperren
Sorry, dass ich erst so spät antworte:
Also mal ganz ausführlich: Ich möchte ein 9x9 Sudoku programmieren (als eigene Komponente). Dazu habe ich bisher (ohne eigene Komponente) ein Stringgrid benutzt. Da ein Sudoku nunmal quadratisch ist und 9 Spalten und Reihen hat, soll man weder Rowcount noch Colcount verändern können, Width muss gleich Height sein und Eigenschaften wie Cells, Colwidths/rowheights müssen gesperrt werden. Also bei mir gibt es nur TCustomGrid (ist das das gleiche???) Wenn ich jetzt nur bestimmte Eigenschaften haben will, wie geht das dann? Bisher steht jetzt in meinem Quelltext das hier:
Delphi-Quellcode:
Klar, so habe ich auch beim StringGrid angefangen... Doch wo muss ich da jetzt die Eigenschaften eintragen, die NICHT vom Nutzer geändert werden können? Und wo die, die geändert werden können?unit Sudoku; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Grids; type TlbSudokuGrid = class(TCustomGrid) private { Private-Deklarationen } protected { Protected-Deklarationen } public { Public-Deklarationen } published { Published-Deklarationen } end; procedure Register; implementation procedure Register; begin RegisterComponents('Beispiele', [TSudoku]); end; end. Viele Grüße |
AW: TStringgrid Unterart Properties löschen/sperren
Oder das StringGrid als Subkomponente verwenden.
|
AW: TStringgrid Unterart Properties löschen/sperren
Zitat:
|
AW: TStringgrid Unterart Properties löschen/sperren
Bei den Custom-Klassen sind viele Property noch versteckt, welche man dann sichtbar machen kann, indem man diese in den sichtbaren Bereich verschiebt.
Delphi-Quellcode:
Bei der Variante als Subkomponente ist diese Komponente nur innerhalb deiner Komponente vorhanden und nach außen baut man dann in seine Komponente die gewünschen Schnittstellen ein und leitet dort die Zugriffe intern auf die Subkomponente weiter.
published
property Color; Man könnte seine Komponente z.B. als Panel (ohne Rahmen) erstellen und im Constructor wird dann das StringGrid als Subkomponente innerhal dieses Panels erstellt. |
AW: TStringgrid Unterart Properties löschen/sperren
Ok, also wenn ich jetzt z.B. height hinzufügen will, muss ich dann auch immer noch Read und Write anfügen?
Ich muss ja bei Write eine Prozedur schreiben, die Height=Width setzt (oder andersrum)... Und auch beim Panel hätte ich das Problem, dass man Eigenschaften sieht, die man nicht sehen soll... Liebe Grüße! |
AW: TStringgrid Unterart Properties löschen/sperren
Ja
Delphi-Quellcode:
procedure TSudokuGrid.setWidth( AValue: Integer);
begin grid.Width := AValue; end; |
AW: TStringgrid Unterart Properties löschen/sperren
Wenn du direkt von TCustomCrid abgeleitet hast, dann einfach noch so hinscheiben, wie in meinem Beispiel. (die Getter und Setter werden dann von der ursprünglichen Deklaration übernommen)
Bei der Variante über die Subkomponente, dann so wie in mkinzlers Beispiel alles Nötige zum internen Grid weiterleiden. PS: In TCustomPanel ist ebenfalls vieles noch nicht sichtbar. |
AW: TStringgrid Unterart Properties löschen/sperren
Also prinzipiell klappt das so. Nur möchte ich OHNE Subkomponente immer wenn width gesetzt wird auch height setzen und andersrum... Nur wie?
Wenn ich das jetzt OHNE Änderungen installiere, dann kommt bei mir immer die Meldung "Abstrakter Fehler" und "Leinwand/Bild erlaubt kein Zeichnen" |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:44 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