Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi StringGrid um ScrollBar erweitern (https://www.delphipraxis.net/92154-stringgrid-um-scrollbar-erweitern.html)

guidobrose 15. Mai 2007 12:42


StringGrid um ScrollBar erweitern
 
Hallo zusammen,

ich bin heute wieder nervig, ich weiß... :-D

Folgendes Problem, bei dem ich noch irgendwie auf den richtigen Weg gebracht werden würde:

Ich möchte gerne eine eigene StringGrid-Klasse erstellen, die einige, mir wichtige Funktionen, bieten soll. Soweit kein Problem, ableiten von TStringGrid und noch einige Prozeduren dazu - fertig. Jetzt würde ich aber auch gerne noch einen ScrollBar an das Grid andocken (falls notwendig). Dieses darum, weil ich gerne hätte, dass die "Greiffläche" im Scrollbar im Verhältnis zur Größe des zu scrollenden Bereiches verhält. Das könnte ich mit einem TScrollBar ganz leicht realisieren, den ich in meiner abgeleiteten Klasse entsprechend ein- oder ausblende.

Ist TStringGrid dafür jetzt noch der geeignete Vorfahr? Denn ich kann zwar in der Create-Methode meiner Klasse auch den Scrollbar erzeugen, aber dargestellt wird er deswegen ja noch nicht.

Ich steh grad wieder mal auf dem Schlauch und benötige einen kleine Tip.

Danke vielmals.

PS: Nein, ich möchte keine fertige Komponente verwenden, weil ich
1. Noch was lernen möchte
2. Keine gefunden habe, die meinen Wünschen entspricht
3. Turbo Delphi Explorer verwende

guidobrose 15. Mai 2007 12:53

Re: StringGrid um ScrollBar erweitern
 
Also, ich mal was ausprobiert, was zwar irgendwie funktioniert, aber nicht besonders schön ist:

Meine Klasse:

Delphi-Quellcode:
type

  TXTStringGrid = class(TCustomControl)
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    StringGrid: TStringGrid;
    ScrollBar: TScrollBar;
    constructor Create(AOwner: TComponent); override;
  end;

implementation

constructor TXTStringGrid.Create(AOwner: TComponent);
var
  c: integer;
begin
  inherited Create(AOwner);
  StringGrid:=TStringGrid.Create(AOwner);
  ScrollBar:=TScrollBar.Create(AOwner);
  ScrollBar.Kind:=sbVertical;
end;
Und der Aufruf davon:

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
StrGrd:=TXTStringGrid.Create(Panel);
StrGrd.Parent:=Panel;
StrGrd.StringGrid.Parent:=Panel;
StrGrd.Align:=alLeft;
StrGrd.ScrollBar.Parent:=Panel;
StrGrd.ScrollBar.Align:=alRight;
end;
Das klappt sogar, der Aufruf ist natürlich schon dämlich, ich möchte eigentlich nur create aufrufen müssen. Das Panel habe ich übrigens verwendet, damit ich trotz der nicht-visuellen Klasse beim Design der Form einen "Platzhalter" habe, der für das zukünftige Steuerelement steht.

daddy 15. Mai 2007 15:56

Re: StringGrid um ScrollBar erweitern
 
Du kannst doch Deine Komponente auch von TPanel ableiten und darin Dein Grid und Deinen Scrollbalken unterbringen. Dann benötigst Du keinen Platzhalter. Das, was Du in Deinem "FormCreate" eingebaut hast, kannst Du dann genauso gut im Create der Komponente unterbringen.

Gruß Daddy

guidobrose 16. Mai 2007 09:09

Re: StringGrid um ScrollBar erweitern
 
Ich hab das jetzt schon einigermaßen hingekriegt. Ich leite jetzt die Klasse von TStringGrid ab, damit ich die "Standardfunktionalitäten" automatisch zur Verfügung habe. Die Klasse MUSS allerdings mit einem Container, z.B. TPanel als Parent erzeugt werden, weil sie sich an dessen Maßen orientiert. Das ist allerdings kein Problem, weil ich ja sowieso ein Panel verwende, um zur Entwurfszeit das Layout ordentlich festlegen zu können.

Genau dies ist auch der Grund warum ich NICHT von TPanel ableiten möchte, dann habe ich ja wieder eine zur Entwurfszeit "unsichtbare" Klasse, die ich per Code auf die Form einpassen muss und dazu bin ich zu faul.

Guido

Lannes 16. Mai 2007 11:30

Re: StringGrid um ScrollBar erweitern
 
Hallo,

kennst Du den Tipp:
SwissDelphiCenter : ...proportionale Rollboxen in einer TScrollbar/TStringGrid anzeigen?

guidobrose 16. Mai 2007 13:34

Re: StringGrid um ScrollBar erweitern
 
Hallo Lannes,

sehr interessant. Mir ging es zwar nur in zweiter Linie um den Scrollbar, aber ich habe das sofort mal ausprobiert. Im Großen und Ganzen klappt es, nur nicht 100%ig. Ich komme über den Scrollbar nicht ganz bis an die letzten Zeilen im Grid und er "springt" immer wieder vom Ende ein Stück weg.

daddy 16. Mai 2007 18:35

Re: StringGrid um ScrollBar erweitern
 
Hallo Guido

Zitat:

Genau dies ist auch der Grund warum ich NICHT von TPanel ableiten möchte, dann habe ich ja wieder eine zur Entwurfszeit "unsichtbare" Klasse, die ich per Code auf die Form einpassen muss und dazu bin ich zu faul.
TPanel ist doch aber eine sichtbare Klasse. Ich habe selber Komponenten dieser Art entwickelt, die von TPanel abgeleitet sind. Du musst dann nur einmalig das Create der Komponente überschreiben und darin die von Dir gewünschten Objekte erzeugen, in der Größe anpassen usw. Klappt eigentlich bestens. Die Komponente lassen sich auch problemlos aus der Komponentenpalette übernehmen und stellen sich im Formular ganz normal dar (inklusive der im "Create" erzeugten Objekte.

Gruß Daddy

guidobrose 21. Mai 2007 14:50

Re: StringGrid um ScrollBar erweitern
 
@ daddy

Du hast natürlich recht, aber da ich ja TurboDelphi Explorer verwende, kann ich keine zusätzlichen Komponenten installieren und muss diese darum direkt im Quelltext und zur Laufzeit erzeugen. Da müsste ich allerdings solche Sachen, wie Position und Größe als Zahlenwerte zuweisen und ich mag das gerne zur Entwurfszeit grafisch erledigen. Ich plaziere also die Standard Komponente TPanel an der gewünschten Position auf das Formular und "meine" Klasse erzeuge ich darin mit alClient.

Sollte es auch eine einfachere Möglichkeit geben, dann immer her damit.

Guido


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:52 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