|
#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
|
|||
|
|||
Тему можно закрыть! Всем спасибо за помощь
|