Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi ScrollBar bei DBGrid immer anzeigen (https://www.delphipraxis.net/90452-scrollbar-bei-dbgrid-immer-anzeigen.html)

me2u 17. Apr 2007 18:28

Datenbank: MS Jet 4.0 OLE • Zugriff über: ADO

ScrollBar bei DBGrid immer anzeigen
 
hallo,

ich wollte mal fragen ob es möglich ist bei einem DBGrid die vertikale ScrollBar so einzustellen dass sie - unabhängig von der menge der datensätze - diese immer anzeigt.. standartmäßig geht sie ja weg wenn keine benötigt wird.. in so einem fall wäre natürlich optimal diese zu deaktivieren...

weil so wie es jetzt ist ist es ziemlich doof.. wenn sie verschwindet bleibt eine lücke...

kann mir da jemand helfen??

Mfg und vielen dank

me2u 19. Apr 2007 19:15

ScrollBar bei DBGrid immer anzeigen
 
hmmm.... geht das net oder weis nur keiner wie???

aber eigentlich müsste es doch gehen, weil dauerhaft ausblenden kann man sie ja auch... habe dazu dies gefunden

hier

kann damit vlt. jemand was anfangen und das ins gegenteil umwandeln???

mfg

mkinzler 19. Apr 2007 19:18

Re: ScrollBar bei DBGrid immer anzeigen
 
Hast du schon
Delphi-Quellcode:
 SetWindowLong(Handle, GWL_STYLE, Style and Scrollstyles);
versucht?

arnold mueller 19. Apr 2007 21:07

Re: ScrollBar bei DBGrid immer anzeigen
 
Quelle: Win32 Developer's References

BOOL ShowScrollBar(

HWND hWnd, // handle of window with scroll bar -> DbGrid.Handle
int wBar, // scroll bar flag -> SB_BOTH
BOOL bShow // scroll bar visibility flag -> True
);


-
Arno

daddy 20. Apr 2007 09:39

Re: ScrollBar bei DBGrid immer anzeigen
 
Das Gegenteil dessen, was Du in Beitrag 2 vorgestellt hast, sähe wie folgt aus:

Delphi-Quellcode:
TVScrollDBGrid = class(TDBGrid)
private
  procedure WMNCCalcSize(var Msg: TMessage); message WM_NCCALCSIZE;
end;

procedure TVScrollDBGrid.WMNCCalcSize(var Msg: TMessage);
// Grundsätzlich den vertikalen Scrollbalken anzeigen
var Style : Integer;
begin
  Style := GetWindowLong(Handle, GWL_STYLE);
  if (Style and WS_VSCROLL) = 0 then
    SetWindowLong(Handle, GWL_STYLE, Style or WS_VScroll);
  inherited;
end; // WMNCCalcSize
Oder du bindest selber eine neue Komponente in die Komponentenpalette ein, bei der Du über die neuen Eigenschaften "AlwaysShowVScroll" und "AlwaysShowHScroll" im Objektinspektor festlegen kannst, welche der beiden Scrollbalken permanent eingeblendet werden sollen:

Delphi-Quellcode:
TFlexibleScrollDBGrid = class(TDBGrid)
private
  FAlwaysShowVScroll: Boolean;
  FAlwaysShowHScroll: Boolean;
  procedure WMNCCalcSize(var Msg: TMessage); message WM_NCCALCSIZE;
published
  property AlwaysShowVScroll: Boolean read FAlwaysShowVScroll
                                      write FAlwaysShowVScroll;
  property AlwaysShowHScroll: Boolean read FAlwaysShowHScroll
                                      write FAlwaysShowHScroll;
end;

procedure TFlexibleScrollGrid.WMNCCalcSize(var Msg: TMessage);
var Style, ScrollStyles : Integer;
begin
  // An ScrollStyles übergeben, welche Scrollbars permanent zu sehen sein sollen
  ScrollStyles := 0;
  if FAlwaysShowVScroll then ScrollStyles := WS_VSCROLL;
  if FAlwaysShowHScroll then ScrollStyles := ScrollStyles or WS_HSCROLL;
  // Prüfen, ob sie bereits angezeigt werden
  Style := GetWindowLong(Handle, GWL_STYLE);
  // Wenn nicht, dann die Anzeige aktivieren
  if (FAlwaysShowVScroll and ((Style and WS_VSCROLL) = 0))
     or (FAlwaysShowHScroll and ((Style and WS_HSCROLL) = 0))
  then SetWindowLong(Handle, GWL_STYLE, Style or ScrollStyles);
  inherited;
end; // WMNCCalcSize
MfG

me2u 20. Apr 2007 14:20

Re: ScrollBar bei DBGrid immer anzeigen
 
es geht =))

danke euch allen für die Mühe... :thumb:

mfg

entwickler-tbdevelop.com 25. Sep 2008 14:47

Re: ScrollBar bei DBGrid immer anzeigen
 
Hi, this is similar & works well:

Delphi-Quellcode:
unit ScrollDBGrid;

interface

uses
   Windows,
   Messages,
   StdCtrls,
   DbGrids;

type

   TScrollDBGrid = class(TDbGrid)
   private
      FAlwaysScroll: TScrollStyle;
      procedure SetAlwaysScroll(const Value: TScrollStyle);
      procedure WMNCCalcSize(var Msg: TMessage); message WM_NCCALCSIZE;
   published
      property   AlwaysScroll: TScrollStyle
                     read FAlwaysScroll
                     write SetAlwaysScroll
                     default ssNone;
   end;

implementation

{ TFlexibleScrollDBGrid }

procedure TScrollDBGrid.SetAlwaysScroll(const Value: TScrollStyle);
begin

   if not (FAlwaysScroll = Value) then
   begin

      FAlwaysScroll := Value;

      RecreateWnd;

   end;

end;


procedure TScrollDBGrid.WMNCCalcSize(var Msg: TMessage);
var
   NewStyle: Integer;
begin

   NewStyle := GetWindowLong(Handle, GWL_STYLE);

   if ([ScrollBars, FAlwaysScroll] * [ssHorizontal, ssBoth] <> []) then
      NewStyle := NewStyle or WS_HSCROLL;

   if ([ScrollBars, FAlwaysScroll] * [ssVertical, ssBoth] <> []) then
      NewStyle := NewStyle or WS_VSCROLL;

   SetWindowLong(Handle, GWL_STYLE, NewStyle);

   inherited;

end;


end.
Best regards.

(jope)


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