![]() |
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 |
Re: StringGrid um ScrollBar erweitern
Also, ich mal was ausprobiert, was zwar irgendwie funktioniert, aber nicht besonders schön ist:
Meine Klasse:
Delphi-Quellcode:
Und der Aufruf davon:
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;
Delphi-Quellcode:
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.
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; |
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 |
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 |
Re: StringGrid um ScrollBar erweitern
Hallo,
kennst Du den Tipp: SwissDelphiCenter : ![]() |
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. |
Re: StringGrid um ScrollBar erweitern
Hallo Guido
Zitat:
Gruß Daddy |
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 07:03 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