![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
DBCtrlGrid без ScrollBar
Silver... © (2005-10-25 17:48:00)Как сделать чтоб небыло видно ScrollBar у DBCtrlGrid
Silver... (2005-10-28 20:14:00) [1]
> ... не трож генофонд! ;о))
Ти знаеш я какраз и не любитель его трогать разве когда припрет :)
это, скажем так, на половину тот случай потому как убрать ScrollBar это лично мое желание, а не требование заказчика. Я надеелся сделать малой кровью, не трогая генофонд :), типа у себя чего-то ловлю... отменяю...
Большое спасибо за пример.
Воспользуюсь им пока не нашел другого "интерфейсного" решения
sniknik (2005-10-27 22:01:00) [2]вот
это изменения в 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
работает ;) естественно тебе придется подключить свою базу и таблицу.
sniknik (2005-10-27 21:12:00) [3]> уж лучше пусть 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, и тогда изза проблем (с таймаутами), а не изза собственной "блажи".... но ведь принцип тот же. ;) попробуй.
Silver... (2005-10-27 20:26:00) [4]
> может разового снятия будет достаточно.
оказалось что недостаточно :(
Кажись от идеи убрать ScrollBar придется отказаться потому как даже если не видно ScrollBar-а его место по любому остаетсячто тоже не красиво уж лучше пусть ScrollBar красуется чем пустое место :(
Доп. вопрос (чтоб др. ветку не открывать)
Можно как-нибудь добраться до метода OnPaint самого DBCtrlGrid (КАК?). В смысле надо сделать некие настойки сразу до/после его прорисовки
Johnmen (2005-10-27 00:43:00) [5]>sniknik © (27.10.05 00:38) [9]
Надо :)))
Т.к. скролл всегда перерисовывается при навигации...
sniknik (2005-10-27 00:38:00) [6]> причём ShowScrollBar надо вызывать в OnPaintPanel
а может и не надо, это в гриде идет восстановление скролов по "каждому чиху", там на них много завязано, а тут может и не так. может разового снятия будет достаточно.
Johnmen (2005-10-27 00:13:00) [7]причём ShowScrollBar надо вызывать в OnPaintPanel
sniknik (2005-10-26 21:40:00) [8]> ... единственное не нравится когда красуется ScrollBar когда в нем нет нёбходимость
ShowScrollBar(DBCtrlGrid1.Handle, SB_BOTH, false);
Silver... (2005-10-26 21:16:00) [9]
> А рыть надо в сторону отказа от DBCtrlGrid
Не впервые слышу НО
у меня ситуация такая:
Надо товар видать ввиде кнопок (с инфой о таваре) кликнул...
Так как не хотелось мучится с плодением "обычных" кнопок (TPanel в моем случае для инфы о товаре), расчета размеров.
Вобчем поставил DBCtrlGrid там TPanel с инфой о товаре, OnClick... и всё, причем хорошо даже опционируется легко изменяется кол. строк, столбцов... вобшем идеально подошел для решения задачи (за 10 мин)
... единственное не нравится когда красуется ScrollBar когда в нем нет нёбходимость (отсюда о вопрос:)
всё осталиное работает на ура
Johnmen (2005-10-26 11:09:00) [10]Убрать можно, но это извращение.
А рыть надо в сторону отказа от DBCtrlGrid, как от бесполезного, бессмысленного и просто "неудобного"...
Amoeba (2005-10-26 10:43:00) [11]А нафига это нужно?
Silver... (2005-10-25 19:00:00) [12]Мне хватит даже направления куды рыть :)
msguns (2005-10-25 18:20:00) [13]У него два скрола. Какой имеется в виду ?
msguns (2005-10-25 18:20:00) [14]Прошу прощения. Упустил Ctrl;((