Topic: Окно авторизации, ComboBox, сортировка.

Подскажите как отсортировать выпадающий список в дефолтном окне авторизации.
как то так наверное TCombobox(frmdbCoreLogin.edLogin).Sorted := True , но имя объекта явно не то.


P.S.: Хотел прикрутить Component Explorer  чтобы посмотреть имена полей в окне авторизации но не получается, т.к. нет процедуры Combo_GetFormList.

Re: Окно авторизации, ComboBox, сортировка.

0anion0 wrote:

Подскажите как отсортировать выпадающий список в дефолтном окне авторизации.
как то так наверное TCombobox(frmdbCoreLogin.edLogin).Sorted := True , но имя объекта явно не то.


P.S.: Хотел прикрутить Component Explorer  чтобы посмотреть имена полей в окне авторизации но не получается, т.к. нет процедуры Combo_GetFormList.

для поиска формы
http://myvisualdatabase.com/forum/viewtopic.php?id=6966
потом продитесь по форме и получите все компоненты

Re: Окно авторизации, ComboBox, сортировка.

у комбобокса нет имени, и найти его можно только полным перебором компонентов.

for i := 0 to frmdbCoreLogin.componentCount - 1 do
begin
  if frmdbCoreLogin.Components[i] is TdbCombobox then
  begin
     TdbCombobox(frmdbCoreLogin.Components[i]).Sorted := True;
  end;
end;

так не работает, IF не находит компонент класс которого TdbCombobox

Re: Окно авторизации, ComboBox, сортировка.

Image1
bLogin
pnPassword
edPassword
pnLogin
edLogin

Re: Окно авторизации, ComboBox, сортировка.

у комбобокса нет имени, и найти его можно только полным перебором компонентов, но у меня не находит его

6 (edited by k245 2022-07-07 09:14:43)

Re: Окно авторизации, ComboBox, сортировка.

http://myvisualdatabase.com/forum/misc.php?action=pun_attachment&item=8811&download=0

  function GetCombo: TdbComboBox;
  //
  var
    i: integer;
  begin
    for i := 0 to frmdbCoreLogin.componentCount - 1 do
    begin
      if frmdbCoreLogin.Components[i] is TdbCombobox then
      begin
        Result := TdbCombobox( frmdbCoreLogin.Components[i] );
        exit;
      end;
    end;
  end;

procedure F_OnResize (Sender: TObject);
var
  tmpCombo: TdbCombobox;
begin
  tmpCombo := GetCombo;
  // сортировка включается, но появляется рамка вокруг комбобокса, избавиться от которой очень сложно...
  tmpCombo.Sorted := True;
  // подогнать размер, чтобы выглядело нормально
  tmpCombo.Top := 0;
  tmpCombo.Left := 0;
  tmpCombo.Width := frmdbCoreLogin.pnLogin.width;
  frmdbCoreLogin.pnLogin.Height := tmpCombo.Height;
end;

begin
  // трудноуловимый комбобокс со списком пользователей появляется в момент появления формы,
  // поэтому доступ к нему будет только после того, как форма отобразится.
  // слава богам, создавшим классы Delphi, есть событие OnResize,
  // которое происходит после события OnShow
  TAForm(frmdbCoreLogin).OnResize := @F_OnResize;
end.
Post's attachments

Attachment icon Танцы с бубном.jpg 315.7 kb, 64 downloads since 2022-07-07 

Визуальное программирование: блог и телеграм-канал.

Re: Окно авторизации, ComboBox, сортировка.

0anion0 wrote:

P.S.: Хотел прикрутить Component Explorer  чтобы посмотреть имена полей в окне авторизации но не получается, т.к. нет процедуры Combo_GetFormList.

Исходники доступны через платный абонемент.

Визуальное программирование: блог и телеграм-канал.

8 (edited by k245 2022-07-07 09:17:43)

Re: Окно авторизации, ComboBox, сортировка.

Результат:

http://myvisualdatabase.com/forum/misc.php?action=pun_attachment&item=8812&download=0

Post's attachments

Attachment icon Результат.png 577.7 kb, 61 downloads since 2022-07-07 

Визуальное программирование: блог и телеграм-канал.

9 (edited by sparrow 2022-07-07 10:40:59)

Re: Окно авторизации, ComboBox, сортировка.

Есть еще событие .OnActivate

А меньше танцев от рамок и .Sorted := True если использовать :


.dbSQLexecute('SELECT id, username FROM _user ORDER BY username')
и
.dbUpdate

10 (edited by k245 2022-07-07 10:53:03)

Re: Окно авторизации, ComboBox, сортировка.

sparrow wrote:

Есть еще событие .OnActivate

А меньше танцев от рамок и .Sorted := True если использовать :


.dbSQLexecute('SELECT id, username FROM _user ORDER BY username')
и
.dbUpdate

Полностью согласен! 


procedure F_OnActivate (Sender: TObject);
var
  tmpCombo: TdbCombobox;
begin
  tmpCombo := GetCombo;
  tmpCombo.dbSQLexecute('SELECT id, username FROM _user ORDER BY username');
  tmpCombo.dbUpdate;
end;

function GetCombo: TdbComboBox;
//
var
  i: integer;
begin
  for i := 0 to frmdbCoreLogin.componentCount - 1 do
  begin
    if frmdbCoreLogin.Components[i] is TdbCombobox then
    begin
      Result := TdbCombobox( frmdbCoreLogin.Components[i] );
      exit;
    end;
  end;
end;

begin
   TAForm(frmdbCoreLogin).OnActivate := @F_OnActivate;
end.


Результат:

http://myvisualdatabase.com/forum/misc.php?action=pun_attachment&item=8815&download=0

Post's attachments

Attachment icon img-2022-07-07-13-49-36.png 9.58 kb, 62 downloads since 2022-07-07 

Визуальное программирование: блог и телеграм-канал.