AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi StringGrid: Auf Ändern der Spalten-/Zeilenanzahl reagieren
Thema durchsuchen
Ansicht
Themen-Optionen

StringGrid: Auf Ändern der Spalten-/Zeilenanzahl reagieren

Ein Thema von Fussball-Robby · begonnen am 7. Jun 2008 · letzter Beitrag vom 7. Jun 2008
Antwort Antwort
Seite 2 von 2     12   
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#11

Re: StringGrid: Auf Ändern der Spalten-/Zeilenanzahl reagier

  Alt 7. Jun 2008, 17:48
Grundsatz der OOP : immer möglichst viel vom Vorgänger erben. Die Custom-Dinger sind dafür gedacht einem Komponentenentwickler zumindest mal die Namen der Methoden zu ersparen. Er hat ein fast leeres Grundgerüst und muss dann alles selber machen. Beim Stringgrid siehts z.B. so aus :

Zitat:
{ TCustomGrid is an abstract base class that can be used to implement
general purpose grid style controls. The control will call DrawCell for
each of the cells allowing the derived class to fill in the contents of
the cell. The base class handles scrolling, selection, cursor keys, and
scrollbars.
Außer ein bisschen Tastatureingaben, Scrollbars usw. ist also nichts fertig.

Das hier ist aber noch viel schlimmer. FColCount ist private deklariert. Es besteht also keine Chance, von dem abgeleiteten Stringgrid aus da dranzukommen. Zumindest nicht ohne Eingriffe im VCL-Quelltext. Vielleicht sieht irgendeiner in den 6000 Zeilen noch irgendeine Möglichkeit. Ich jedenfalls nicht.

Das geht wohl nur über Umwege.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Fussball-Robby
Fussball-Robby

Registriert seit: 22. Okt 2007
Ort: Nähe Köln
1.063 Beiträge
 
Delphi 7 Enterprise
 
#12

Re: StringGrid: Auf Ändern der Spalten-/Zeilenanzahl reagier

  Alt 7. Jun 2008, 18:11
Zitat von Hansa:
Delphi-Quellcode:
inherited;
FColCount := FRowCount;
Zitat von Hansa:
Habs aber doch noch gesehen wo das gemacht werden kann :

Delphi-Quellcode:
  TStringGrid = class(TDrawGrid)
  private
...
  public
    constructor Create(AOwner: TComponent); override;
Also gilt das vorher gesagte und das ist ja dann kein Problem.
Alco im Create FColCount := FRowCount? Das Create wird aber schon aufgerufen, wenn die Komponente auf die Form kommt, danach kann man das noch ändern, wie man will. Ich muss irgendwie mitbekommen, wenn RowCount/ColCount geändert wird, und in der Grids.pas werd ich einfach nicht fündig
Hat vielleicht jemand noch Ideen?
Robert L.
Der folgende Satz ist richtig!
Der vorherige Satz ist falsch!

Paradox
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#13

Re: StringGrid: Auf Ändern der Spalten-/Zeilenanzahl reagier

  Alt 7. Jun 2008, 18:23
Ich sehe nur noch Einführung einer HilfsRow / HilfsCol und da die Werte direkt an ColCount/RowCount übergeben. Oder den Einsatz der Objektablage. D.h. Vererbung auf Form-Ebene. In der Urform müsste dann nur im FormCreate RowCount := ColCount gemacht werden. Und dann eben von dieser Form ableiten, anstatt mit neu -> Form über neu -> weitere -> MeineForm. Das hätte noch den positiven Nebeneffekt, dass man so auch alle Grundeinstellungen/Ereignisse schon in der Urform abhandeln könnte. Die letzte Möglichkeit : auf Lannes warten. Der ist hier für Stringgrids zuständig. Hexen kann der AFAIK allerdings auch nicht.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Fussball-Robby
Fussball-Robby

Registriert seit: 22. Okt 2007
Ort: Nähe Köln
1.063 Beiträge
 
Delphi 7 Enterprise
 
#14

Re: StringGrid: Auf Ändern der Spalten-/Zeilenanzahl reagier

  Alt 7. Jun 2008, 18:28
Zitat von Hansa:
Ich sehe nur noch Einführung einer HilfsRow / HilfsCol und da die Werte direkt an ColCount/RowCount übergeben.
Sowas wollte ich eigentlich vermeiden, aber das ist im Moment wohl das einfachste. Wenn ich aber eine Hilfsproperty mache, kann man die anderen trotzdem noch ändern. Gibt es eine Möglichkeit, die Sichtbarkeit der Propertys runterzusetzen, sodass sie nicht mehr im OI sind?
Robert L.
Der folgende Satz ist richtig!
Der vorherige Satz ist falsch!

Paradox
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#15

Re: StringGrid: Auf Ändern der Spalten-/Zeilenanzahl reagier

  Alt 7. Jun 2008, 18:46
Hallo Robert,

Sichtbarkeiten kannst du nicht verringern, nur erweitern.

Über eine Redimensionierung deines Grids informiert dich die dafür vorgesehene Methode SizeChanged():

Delphi-Quellcode:
unit MoreGrids;

interface

uses
  SysUtils, Classes, Controls, Grids;

type
  TStringGridEx = class(TStringGrid)
  protected
    procedure SizeChanged(OldColCount, OldRowCount: Longint); override;
  end;

procedure Register;

implementation

procedure TStringGridEx.SizeChanged(OldColCount, OldRowCount: Longint);
begin
  inherited SizeChanged(OldColCount, OldRowCount);
  // ...
end;

procedure Register;
begin
  RegisterComponents('marabu', [TStringGridEx]);
end;

end.
Wenn du selbst die Dimensionen des Grids änderst, hast du doch die volle Kontrolle - auch zur Laufzeit. Worüber also zerbrichst du dir denn da den Kopf?

Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von Fussball-Robby
Fussball-Robby

Registriert seit: 22. Okt 2007
Ort: Nähe Köln
1.063 Beiträge
 
Delphi 7 Enterprise
 
#16

Re: StringGrid: Auf Ändern der Spalten-/Zeilenanzahl reagier

  Alt 7. Jun 2008, 18:58
Perfekt, SizeChanged ist genau das richtige! Danke
Delphi-Quellcode:
  inherited SizeChanged(OldColCount, OldRowCount);
  if OldColCount <> ColCount then
    RowCount := ColCount
  else
  if OldRowCount <> RowCount then
    ColCount := RowCount;
Zitat:
Wenn du selbst die Dimensionen des Grids änderst, hast du doch die volle Kontrolle - auch zur Laufzeit. Worüber also zerbrichst du dir denn da den Kopf?
Wenn ich aber aus Versehen z.B. 20 Reihen und nur 19 Spalte habe und es nicht rechtzeitig bemerke, kommt bei der Berechnung, die dann läuft, nachher nutzloses Zeugs raus. Und anstelle vor der Berechnung einen Fehler auszugeben, fand ich es komfortabler, die Sache an der Wurzel zu packen
Robert L.
Der folgende Satz ist richtig!
Der vorherige Satz ist falsch!

Paradox
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:18 Uhr.
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