AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

StringGrid um ScrollBar erweitern

Ein Thema von guidobrose · begonnen am 15. Mai 2007 · letzter Beitrag vom 21. Mai 2007
Antwort Antwort
guidobrose
(Gast)

n/a Beiträge
 
#1

StringGrid um ScrollBar erweitern

  Alt 15. Mai 2007, 12:42
Hallo zusammen,

ich bin heute wieder nervig, ich weiß...

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
  Mit Zitat antworten Zitat
guidobrose
(Gast)

n/a Beiträge
 
#2

Re: StringGrid um ScrollBar erweitern

  Alt 15. Mai 2007, 12:53
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.
  Mit Zitat antworten Zitat
daddy

Registriert seit: 9. Sep 2005
Ort: Köln
124 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: StringGrid um ScrollBar erweitern

  Alt 15. Mai 2007, 15:56
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
  Mit Zitat antworten Zitat
guidobrose
(Gast)

n/a Beiträge
 
#4

Re: StringGrid um ScrollBar erweitern

  Alt 16. Mai 2007, 09:09
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
  Mit Zitat antworten Zitat
Benutzerbild von Lannes
Lannes

Registriert seit: 30. Jan 2005
Ort: Münster
745 Beiträge
 
Delphi 3 Professional
 
#5

Re: StringGrid um ScrollBar erweitern

  Alt 16. Mai 2007, 11:30
Hallo,

kennst Du den Tipp:
SwissDelphiCenter : ...proportionale Rollboxen in einer TScrollbar/TStringGrid anzeigen?
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
  Mit Zitat antworten Zitat
guidobrose
(Gast)

n/a Beiträge
 
#6

Re: StringGrid um ScrollBar erweitern

  Alt 16. Mai 2007, 13:34
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.
  Mit Zitat antworten Zitat
daddy

Registriert seit: 9. Sep 2005
Ort: Köln
124 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: StringGrid um ScrollBar erweitern

  Alt 16. Mai 2007, 18:35
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
  Mit Zitat antworten Zitat
guidobrose
(Gast)

n/a Beiträge
 
#8

Re: StringGrid um ScrollBar erweitern

  Alt 21. Mai 2007, 14:50
@ 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
  Mit Zitat antworten Zitat
Antwort Antwort


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 17:12 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