![]() |
|
|
#16
|
|||
|
|||
|
Цитата:
Спасибо за помощь |
|
#17
|
|||
|
|||
|
C дата тайм пикером так и не понял
объясните как использовать обработчик для динамически созданного объекта DBGrid создаю так Код:
var Form1: TForm1; DBGrid:TDbgrid; procedure TForm1.Button1Click(Sender: TObject); begin DBGrid:=tdbgrid.Create(TabSheet); DBGrid.Parent:=TabSheet; DBGrid.Align:=alClient; end; |
|
#18
|
||||
|
||||
|
Как я понял, вам надо нечто такое:
Код:
unit Unit9;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls, Grids, DBGrids, DB, ADODB;
type
TForm9 = class(TForm)
Button1: TButton;
PageControl1: TPageControl;
ADOConnection1: TADOConnection;
ListBox1: TListBox;
DateTimePicker1: TDateTimePicker;
procedure Button1Click(Sender: TObject);
procedure ListBox1DblClick(Sender: TObject);
procedure DBGridCellClick(Column: TColumn);
procedure DateTimePicker1Change(Sender: TObject);
end;
var
Form9: TForm9;
implementation
{$R *.dfm}
procedure TForm9.DBGridCellClick(Column: TColumn);
begin
if Column.Field.DataType in [ftDate,ftDateTime]
then begin
DateTimePicker1.Tag := Integer(Column.Field);
DateTimePicker1.DateTime := Column.Field.AsDateTime;
DateTimePicker1.Left := Mouse.CursorPos.X - Left - 5;
DateTimePicker1.Top := Mouse.CursorPos.Y - Top - 30;
DateTimePicker1.Show;
end;
end;
procedure TForm9.DateTimePicker1Change(Sender: TObject);
Var
Field: TField;
begin
Field := TField(DateTimePicker1.Tag);
Field.DataSet.Edit;
Field.Value := DateTimePicker1.DateTime;
Field.DataSet.Post;
DateTimePicker1.Hide;
end;
procedure TForm9.ListBox1DblClick(Sender: TObject);
Var
TabSheet: TTabSheet;
Grid: TDBGrid;
Tbl: TAdoTable;
i: Integer;
DateField: TDateTimePicker;
begin
TabSheet := TTabSheet.Create(PageControl1);
TabSheet.PageControl := PageControl1;
TabSheet.Caption := ListBox1.Items[ListBox1.ItemIndex];
PageControl1.TabIndex := PageControl1.PageCount - 1;
Tbl := TAdoTable.Create(TabSheet);
Tbl.Connection := ADOConnection1;
Tbl.CursorLocation := clUseServer;
Tbl.TableName := ListBox1.Items[ListBox1.ItemIndex];
Grid := TDBGrid.Create(TabSheet);
Grid.Parent := TabSheet;
Grid.Align := alClient;
Grid.DataSource := TDataSource.Create(TabSheet);
Grid.DataSource.DataSet := Tbl;
Grid.OnCellClick := DBGridCellClick;
Tbl.Open;
end;
procedure TForm9.Button1Click(Sender: TObject);
begin
ADOConnection1.Open;
ADOConnection1.GetTableNames(ListBox1.Items);
end;
end.Последний раз редактировалось Страдалецъ, 10.02.2016 в 15:00. |
| Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение: | ||
ApxaHGe1 (14.02.2016)
| ||
|
#19
|
|||
|
|||
|
Еще вопрос... как все столбцы выравнять по границе формы? Т.е. при рисайзе формы dbgrid то же меняет размеры до размера форм. И тогда все столбцы видны. А когда сделаешь маленький размер формы половину столбцов не видно... можно ли как это исправить? Что бы размеры динамически подгонялись? И сделать перенос слов по границе столбца?
|
|
#20
|
||||
|
||||
|
Перенос сделать не очень просто, надо пересчитывать высоту всех видимых строк, т.е. отрисовку реализовывать самому.
Можно пойти немного другим путем, через автоподбор ширины столбцов, может вам и этого хватит: Код:
procedure TForm9.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState);
Var CellWidth: Integer;
begin
CellWidth := Canvas.TextWidth(' '+Field.AsString+' ');
if CellWidth > TDBGrid(Sender).Columns.Items[Field.Index].Width
then TDBGrid(Sender).Columns.Items[Field.Index].Width := CellWidth;
end;
procedure TForm9.FormCreate(Sender: TObject);
Var i: Integer;
begin
for i := 0 to DBGrid1.Columns.Count - 1
do DBGrid1.Columns.Items[i].Width := 60;
end; |
| Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение: | ||
ApxaHGe1 (17.05.2016)
| ||
|
#21
|
|||
|
|||
|
У меня так же сделаноprocedure TForm9.FormCreate(Sender: TObject);
Var i: Integer; begin for i := 0 to DBGrid1.Columns.Count - 1 do DBGrid1.Columns.Items[i].Width := 60; end; |
|
#22
|
|||
|
|||
|
Народ, осталась последняя мелочь....
Подскажите плиз как сделать что бы при событии, когда я изменяю дату в столбце "Фактический Срок Исполнения" через DateTimePicker, он сравнивал эту дату(новую которую я выбрал) с датой из столбца "Срок исполнения" и если дата фактического исполнения старше даты Срока исполнения то в статус записывал НЕ ВЫПОЛНЕНО! и обратно, если даты равны или меньше по времени, то написал ВЫПОЛНЕНО ![]() Последний раз редактировалось ApxaHGe1, 12.02.2016 в 22:38. |
|
#23
|
|||
|
|||
|
Тему можно закрыть! Всем спасибо за помощь
|