Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.12.18;
Скачать: CL | DM;

Вниз

DBCtrlGrid без ScrollBar   Найти похожие ветки 

 
Silver... ©   (2005-10-25 17:48) [0]

Как сделать чтоб небыло видно ScrollBar у DBCtrlGrid


 
msguns ©   (2005-10-25 18:20) [1]

У него два скрола. Какой имеется в виду ?


 
msguns ©   (2005-10-25 18:20) [2]

Прошу прощения. Упустил Ctrl ;((


 
Silver... ©   (2005-10-25 19:00) [3]

Мне хватит даже направления куды рыть :)


 
Amoeba ©   (2005-10-26 10:43) [4]

А нафига это нужно?


 
Johnmen ©   (2005-10-26 11:09) [5]

Убрать можно, но это извращение.
А рыть надо в сторону отказа от DBCtrlGrid, как от бесполезного,  бессмысленного и просто "неудобного"...


 
Silver... ©   (2005-10-26 21:16) [6]


> А рыть надо в сторону отказа от DBCtrlGrid


Не впервые слышу НО

у меня ситуация такая:

 Надо товар видать ввиде кнопок (с инфой о таваре) кликнул...

Так как не хотелось мучится с плодением "обычных" кнопок (TPanel в моем случае для инфы о товаре), расчета размеров.
 Вобчем поставил DBCtrlGrid там TPanel с инфой о товаре, OnClick... и всё, причем хорошо даже опционируется легко изменяется кол. строк, столбцов... вобшем идеально подошел для решения задачи (за 10 мин)

 ... единственное не нравится когда красуется ScrollBar когда в нем нет нёбходимость (отсюда о вопрос:)
 всё осталиное работает на ура


 
sniknik ©   (2005-10-26 21:40) [7]

> ... единственное не нравится когда красуется ScrollBar когда в нем нет нёбходимость
ShowScrollBar(DBCtrlGrid1.Handle, SB_BOTH, false);


 
Johnmen ©   (2005-10-27 00:13) [8]

причём ShowScrollBar надо вызывать в OnPaintPanel


 
sniknik ©   (2005-10-27 00:38) [9]

> причём ShowScrollBar надо вызывать в OnPaintPanel
а может и не надо, это в гриде идет восстановление скролов по "каждому чиху", там на них много завязано, а тут может и не так. может разового снятия будет достаточно.


 
Johnmen ©   (2005-10-27 00:43) [10]

>sniknik ©   (27.10.05 00:38) [9]

Надо :)))
Т.к. скролл всегда перерисовывается при навигации...


 
Silver... ©   (2005-10-27 20:26) [11]


> может разового снятия будет достаточно.

оказалось что недостаточно :(

 Кажись от идеи убрать ScrollBar придется отказаться потому как даже если не видно ScrollBar-а его место по любому остается что тоже не красиво уж лучше пусть ScrollBar красуется чем пустое место :(

 Доп. вопрос (чтоб др. ветку не открывать)

Можно как-нибудь добраться до метода OnPaint самого DBCtrlGrid (КАК?). В смысле надо сделать некие настойки сразу до/после его прорисовки


 
sniknik ©   (2005-10-27 21:12) [12]

> уж лучше пусть ScrollBar красуется чем пустое место :(
а сделать пошире, с учетом что он исчезнет?

> Можно как-нибудь добраться до метода OnPaint самого DBCtrlGrid (КАК?)
... не трож генофонд! ;о))
но в принципе можно попробовать... скопируй к себе папку с программой и подключи в проект файл dbcgrids.pas, там сделай исправление  

procedure TDBCtrlGrid.WMPaint(var Message: TWMPaint);
begin
 //сюда посыл своего сообщения (SendMessage) это /до
 PaintHandler(Message);
 //сюда тоже самое /после
end;
тут надо еще хендл окна передать которому сообшения шлются, одно маленькое свойство добавить ;)

ну или пару процедур и пропертей добавить, будут полноценные методы  
тогда вместо сообшений
procedure TDBCtrlGrid.WMPaint(var Message: TWMPaint);
begin
 if Assigned(FOnBeforePaint) then FOnBeforePaint(Self);
 PaintHandler(Message);
 if Assigned(FOnAfterPaint) then FOnAfterPaint(Self);
end;
присваивать правда их придется в рантайм... и главное основных методов не трогать...
должно получится. я так делал. правда с ADODB, и тогда изза проблем (с таймаутами), а не изза собственной "блажи".... но ведь принцип тот же. ;) попробуй.


 
sniknik ©   (2005-10-27 22:01) [13]

вот
это изменения в dbcgrids.pas (скопированном и подключенном к твоему проекту!!!)

 ....
 TDBCtrlPaint = procedure(Sender: TObject) of object;

 TDBCtrlGrid = class(TWinControl)
 private
   FDataLink: TDBCtrlGridLink;
 ....
   FOnPaintPanel: TPaintPanelEvent;
   FOnBeforePaint: TDBCtrlPaint;
   function AcquireFocus: Boolean;
 ...  
   property OnStartDrag;
   property OnBeforePaint: TDBCtrlPaint read FOnBeforePaint write FOnBeforePaint;
 end;

 ...

procedure TDBCtrlGrid.WMPaint(var Message: TWMPaint);
begin
if Assigned(FOnBeforePaint) then FOnBeforePaint(Self);
 PaintHandler(Message);
end;


а это пример работы с "этим" ;)
модуль

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, DBCtrls, Mask, dbcgrids, DB, ADODB;

type
 TForm1 = class(TForm)
   ADOConnection1: TADOConnection;
   ADODataSet1: TADODataSet;
   DataSource1: TDataSource;
   DBCtrlGrid1: TDBCtrlGrid;
   DBEdit1: TDBEdit;
   DBText1: TDBText;
   Label1: TLabel;
   procedure FormCreate(Sender: TObject);
 private
   procedure BeforePaint(Sender: TObject);
 public
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.BeforePaint(Sender: TObject);
begin
 Label1.Caption:= IntToStr(StrToIntdef(Label1.Caption, 0)+1)
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 DBCtrlGrid1.OnBeforePaint:= BeforePaint;
end;

end.

и форма в dfm
object Form1: TForm1
 Left = 233
 Top = 107
 Width = 236
 Height = 302
 Caption = "Form1"
 Color = clBtnFace
 Font.Charset = DEFAULT_CHARSET
 Font.Color = clWindowText
 Font.Height = -11
 Font.Name = "MS Sans Serif"
 Font.Style = []
 OldCreateOrder = False
 OnCreate = FormCreate
 PixelsPerInch = 96
 TextHeight = 13
 object Label1: TLabel
   Left = 16
   Top = 16
   Width = 32
   Height = 13
   Caption = "Label1"
 end
 object DBCtrlGrid1: TDBCtrlGrid
   Left = 5
   Top = 48
   Width = 216
   Height = 216
   DataSource = DataSource1
   TabOrder = 0
   object DBText1: TDBText
     Left = 16
     Top = 8
     Width = 65
     Height = 17
     DataField = "ID"
     DataSource = DataSource1
   end
   object DBEdit1: TDBEdit
     Left = 16
     Top = 32
     Width = 169
     Height = 21
     DataField = "GoodName"
     DataSource = DataSource1
     TabOrder = 0
   end
 end
 object ADOConnection1: TADOConnection
   Connected = True
   ConnectionString =
     "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security In" +
     "fo=False;User ID=sa;Initial Catalog=Base2;Use Procedure for Prep" +
     "are=1;Auto Translate=True;Packet Size=4096;Workstation ID=NIKS;U" +
     "se Encryption for Data=False;Tag with column collation when poss" +
     "ible=False"
   LoginPrompt = False
   Provider = "SQLOLEDB.1"
   Left = 16
   Top = 144
 end
 object ADODataSet1: TADODataSet
   Active = True
   Connection = ADOConnection1
   CursorType = ctStatic
   CommandText = "select * from Googs"
   Parameters = <>
   Left = 56
   Top = 144
 end
 object DataSource1: TDataSource
   DataSet = ADODataSet1
   Left = 96
   Top = 144
 end
end


работает ;) естественно тебе придется подключить свою базу и таблицу.


 
Silver... ©   (2005-10-28 20:14) [14]


> ... не трож генофонд! ;о))


Ти знаеш я какраз и не любитель его трогать разве когда припрет :)
это, скажем так, на половину тот случай потому как убрать ScrollBar это лично мое желание, а не требование заказчика. Я надеелся сделать малой кровью, не трогая генофонд :), типа у себя чего-то ловлю... отменяю...

 Большое спасибо за пример.

Воспользуюсь им пока не нашел другого "интерфейсного" решения



Страницы: 1 вся ветка

Текущий архив: 2005.12.18;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.078 c
6-1125919503
ДимДимыч
2005-09-05 15:25
2005.12.18
TIdTCPServer &amp; TIdTCPClient <OnDisconnect>


3-1128086133
Ling
2005-09-30 17:15
2005.12.18
Сжать файлы и сохранить в BLOB


14-1133177205
Труп Васи Доброго
2005-11-28 14:26
2005.12.18
FB SQL проблема с изменением данных


2-1133718346
333
2005-12-04 20:45
2005.12.18
PageControl


2-1133451732
СА
2005-12-01 18:42
2005.12.18
Запуск программы на другом компьтере.