Форум: "Базы";
Текущий архив: 2005.12.18;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.013 c