powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Lazarus: как по TDataSource получить TDBGrid?
19 сообщений из 19, страница 1 из 1
Lazarus: как по TDataSource получить TDBGrid?
    #39865779
tunknown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ясно, что на TDataSource может смотреть несколько TDBGrid. Как получить любой или первый?

В Delphi был TDataSource.DataLinks+TGridDataLink.Grid, в Lazarus вместо него TDataSource.DataLinks+TComponentDataLink, но в нём Component/Control не упоминается.
...
Рейтинг: 0 / 0
Lazarus: как по TDataSource получить TDBGrid?
    #39865847
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
begin
  Label1.Caption:= 'DS_1 -->';
  Label2.Caption:= 'DS_2 -->';
  for i:= 0 to Pred(Self.ControlCount) do
  if Self.Controls[i].InheritsFrom(TDBGrid) then
  begin
    if TDBGrid(Self.Controls[i]).DataSource = DS_1 then
    Label1.Caption:= Label1.Caption + ' ~' + TDBGrid(Self.Controls[i]).Name;
    if TDBGrid(Self.Controls[i]).DataSource = DS_2 then
    Label2.Caption:= Label2.Caption + ' ~' + TDBGrid(Self.Controls[i]).Name;
  end;
end;  
...
Рейтинг: 0 / 0
Lazarus: как по TDataSource получить TDBGrid?
    #39865867
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tunknown,

В Delphi:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
type TDS = class(TDataSource);
...

var
  fDS: TDS;
  i: Integer;
  fDL: TDataLink;
  fGrid: TDBGrid;
begin
  fDS := TDS(DataSource1);

  fGrid := nil;

  for i := 0 to fDS.DataLinks.Count - 1 do begin
    fDL := fDS.DataLinks[i];
    if fDL is TGridDataLink then begin
      TCustomDBGrid(fGrid) := TGridDataLink(fDL).Grid;
      break;
    end;
  end;

  if Assigned(fGrid) then
    ShowMessageFmt('%s : %s here', [TDBGrid.ClassName, fGrid.Name])
  else
    ShowMessageFmt('%s : not found', [TDBGrid.ClassName])
...
Рейтинг: 0 / 0
Lazarus: как по TDataSource получить TDBGrid?
    #39865874
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёё,

но сие опасно, завязано на то, что знаешь устройство TDBGrid.
...
Рейтинг: 0 / 0
Lazarus: как по TDataSource получить TDBGrid?
    #39866065
tunknown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док
Код: pascal
1.
  if Self.Controls[i].InheritsFrom(TDBGrid) then

Сейчас и сделано перебором по всему приложению, т.к. TDataSource может лежать на TDataModule или на другой форме. Надо было мне сразу сказать это.

ёёёёёВ Delphi:
Нужно-то в Lazarus.
...
Рейтинг: 0 / 0
Lazarus: как по TDataSource получить TDBGrid?
    #39866614
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tunknownСейчас и сделано перебором по всему приложению, т.к. TDataSource может лежать на TDataModule или на другой форме.
а в чем конечная цель сабжа?
...
Рейтинг: 0 / 0
Lazarus: как по TDataSource получить TDBGrid?
    #39866663
tunknown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДокtunknownСейчас и сделано перебором по всему приложению, т.к. TDataSource может лежать на TDataModule или на другой форме.
а в чем конечная цель сабжа?Переделывать нет возможности, а портировать на Lazarus нужно.
...
Рейтинг: 0 / 0
Lazarus: как по TDataSource получить TDBGrid?
    #39866917
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tunknownпортировать на Lazarus нужно.
в Лазаре есть утилита для конвертации дельфийских компонентов/пакетов/проектов/файлов форм (Tools --> Delphi Conversion). Не пробовал?
...
Рейтинг: 0 / 0
Lazarus: как по TDataSource получить TDBGrid?
    #39867184
tunknown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Докв Лазаре есть утилита для конвертации дельфийских компонентов/пакетов/проектов/файлов форм (Tools --> Delphi Conversion). Не пробовал?Ей и пользуюсь. Но она не добавляет совместимости компонентам. LCL/FPC RTL совместимы с VCL на верхнем уровне, но внутреннее устройство достаточно различается, например, для поддержки кросплатформенности.
...
Рейтинг: 0 / 0
Lazarus: как по TDataSource получить TDBGrid?
    #39867473
Фотография Gator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДокtunknownСейчас и сделано перебором по всему приложению, т.к. TDataSource может лежать на TDataModule или на другой форме.
а в чем конечная цель сабжа?По идее никак. Не важно, где лежит DataSource - в датамодуле или на десятой форме. ДБГрида может вообще не быть нигде, а датасорсом пользуются другие dbaware компоненты.
Связь между дбгридом на форме FA и датасорсом на форме(модуле) FB находится легко даже в дизайнере.
Главное, чтобы формы эти формы друг друга видели.
...
Рейтинг: 0 / 0
Lazarus: как по TDataSource получить TDBGrid?
    #39867529
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что делать если к датасоурсу три грида присобачено?
...
Рейтинг: 0 / 0
Lazarus: как по TDataSource получить TDBGrid?
    #39867531
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
white_niggerА что делать если к датасоурсу три грида присобачено?Выкинуть 2 ненужных и больше так не делать.
...
Рейтинг: 0 / 0
Lazarus: как по TDataSource получить TDBGrid?
    #39867571
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tunknownЯсно, что на TDataSource может смотреть несколько TDBGrid. Как получить любой или первый?

В Delphi был TDataSource.DataLinks+TGridDataLink.Grid, в Lazarus вместо него TDataSource.DataLinks+TComponentDataLink, но в нём Component/Control не упоминается.

Никак. Разве что глобальным поиском по зарегистрированным компонентам приложения. Фу.
...
Чуть подправь LCL. Мне кажется, что от него не убудет.

В лазарусовом TDbGrid используется TComponentDataLink:

Код: pascal
1.
2.
3.
  TCustomDBGrid=class(TCustomGrid)
  private
    FDataLink: TComponentDataLink;



В конструктор класса TComponentDataLink добавь необязательный параметр aControl
Код: pascal
1.
 .Create(aControl : TControl = nil)


и соотв. свойство для хранения значения aControl.
Конструктор класс TCustomDBGrid также чуть модифицируй,

Код: pascal
1.
2.
3.
4.
5.
6.
7.
constructor TCustomDBGrid.Create(AOwner: TComponent);
begin
  FEditingColumn:=-1;
  DragDx:=5;
  inherited Create(AOwner);

  FDataLink := TComponentDataLink.Create(Self);


..и фсио. :)
...
Рейтинг: 0 / 0
Lazarus: как по TDataSource получить TDBGrid?
    #39867646
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёё..и фсио. :)
а потом еще один сможет на всех углах кричать, что он написал свой фреймворк
...
Рейтинг: 0 / 0
Lazarus: как по TDataSource получить TDBGrid?
    #39868034
Фотография Gator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док, все же знают уже, что это юудет толко транк
...
Рейтинг: 0 / 0
Lazarus: как по TDataSource получить TDBGrid?
    #39868047
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gator,

ЧТО ТАКОЕ ТРАНК???
...
Рейтинг: 0 / 0
Lazarus: как по TDataSource получить TDBGrid?
    #39868120
Фотография Gator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёё, толстый транк - не тонкие ветки
...
Рейтинг: 0 / 0
Lazarus: как по TDataSource получить TDBGrid?
    #39868871
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёёGator,

ЧТО ТАКОЕ ТРАНК???
Ты уже спрашивал :)

Ты часом не Янус Полуэктович Невструев (который У-Янус)?
...
Рейтинг: 0 / 0
Lazarus: как по TDataSource получить TDBGrid?
    #39868874
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gatorэто юудет толко транк

Скорее, форк
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Lazarus: как по TDataSource получить TDBGrid?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]