InputBox глюк

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

InputBox глюк

Сообщение Little_Roo » 06.05.2010 11:31:56

Во вчерашней сборке проявилась замечательная глюка
Было Lazarus 0.9.29 r25120 FPC 2.4.1 i386-win32-win32/win64
InputBox.JPG

Стало Lazarus 0.9.29 r25198 FPC 2.4.1 i386-win32-win32/win64
InputBox2.JPG
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось Little_Roo 06.05.2010 14:37:12, всего редактировалось 1 раз.
Аватара пользователя
Little_Roo
энтузиаст
 
Сообщения: 639
Зарегистрирован: 27.02.2009 19:56:36
Откуда: Санкт-Петербург

Re: InputBox глюк

Сообщение alaken » 06.05.2010 14:32:46

FPC тут не причем, все дело в LCL Lazarus,
даже пересобранный с ключем -dOldAutoSize ничего не дает, видимо что-то другое "пилят"...
alaken
постоялец
 
Сообщения: 221
Зарегистрирован: 18.02.2010 09:02:13

Re: InputBox глюк

Сообщение скалогрыз » 06.05.2010 14:52:11

alaken писал(а):FPC тут не причем, все дело в LCL Lazarus,
даже пересобранный с ключем -dOldAutoSize ничего не дает, видимо что-то другое "пилят"...

возможность использовать OldAutoSize была недавно удалёна из LCL.
баг уже отрапортован: http://bugs.freepascal.org/view.php?id=16415

скорее всего исправят вечерком.
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: InputBox глюк

Сообщение alaken » 06.05.2010 15:03:42

скалогрыз писал(а):...возможность использовать OldAutoSize была недавно удалёна из LCL.

AutoSize допилили?

тенденция нехорошая, чаще ломают чем что-то делают...
alaken
постоялец
 
Сообщения: 221
Зарегистрирован: 18.02.2010 09:02:13

Re: InputBox глюк

Сообщение скалогрыз » 06.05.2010 15:27:18

alaken писал(а):AutoSize допилили?
тенденция нехорошая, чаще ломают чем что-то делают...


да вообще негодяи! наобещали с три короба и бесплатно, а теперь баги заставляют огребать! и ещё ехидную приписочку к транку написали: "используете на свой страх и риск"! нужно срочно переходить на Delphi... или нет лучше сразу на Си!
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: InputBox глюк

Сообщение alaken » 06.05.2010 15:36:40

скалогрыз писал(а):
alaken писал(а):AutoSize допилили?
тенденция нехорошая, чаще ломают чем что-то делают...


да вообще негодяи! наобещали с три короба и бесплатно, а теперь баги заставляют огребать! и ещё ехидную приписочку к транку написали: "используете на свой страх и риск"! нужно срочно переходить на Delphi... или нет лучше сразу на Си!

повеселило Ваше ехидство =)
alaken
постоялец
 
Сообщения: 221
Зарегистрирован: 18.02.2010 09:02:13

Re: InputBox глюк

Сообщение скалогрыз » 06.05.2010 15:45:29

alaken писал(а):повеселило Ваше ехидство =)

сейчас в моде слово троллинг :)

но если кому кровь и носа (срочно под винду), нужен рабочий InputQuery вместо Изображение,
то можете использовать этот наколеннособранный патч
У вас нет необходимых прав для просмотра вложений в этом сообщении.
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: InputBox глюк

Сообщение alaken » 06.05.2010 16:04:01

Троллинг
не знал, довольно позновательно.

вот попытался разобраться
в файле inputdialog.inc метод ShowInputDialog создает окно диалога
поменял Align := alTop; на Align := alBottom;
Код: Выделить всё
function ShowInputDialog(const InputCaption, InputPrompt : String;
  MaskInput : Boolean; var Value : String) : Boolean;

  function ActiveMonitor: TMonitor; inline;
  begin
    if Screen.ActiveCustomForm <> nil then
      Result := Screen.ActiveCustomForm.Monitor
    else
    if Application.MainForm <> nil then
      Result := Application.MainForm.Monitor
    else
      Result := Screen.PrimaryMonitor;
  end;

var
  Form: TForm;
  Prompt: TLabel;
  Edit: TEdit;
  MinEditWidth: integer;
  AMonitor: TMonitor;
begin
  Result := False;
  Form := TForm(TForm.NewInstance);
  Form.DisableAutoSizing;
  Form.CreateNew(nil, 0);
  with Form do
  begin
    BorderStyle := bsDialog;
    Caption := InputCaption;
    Prompt := TLabel.Create(Form);
    with Prompt do
    begin
      Parent := Form;
      Caption := InputPrompt;
      //Align := alTop;
      Align := alBottom;
      AutoSize := True;
    end;
    Position := poScreenCenter;
    Edit := TEdit.Create(Form);
    with Edit do
    begin
      Parent := Form;
      //Align := alTop;
      Align := alBottom;
      BorderSpacing.Top := 3;
      AMonitor := ActiveMonitor;
      // check that edit is smaller than our monitor, it must be smaller at least
      // by 6 * 2 pixels (spacing from window borders) + window border
      MinEditWidth := Min(AMonitor.Width - 20, Max(260, AMonitor.Width div 4));
      Constraints.MinWidth := MinEditWidth;
      Text := Value;
      TabStop := True;
      if MaskInput then
      begin
        EchoMode := emPassword;
        PasswordChar := '*';
      end else
      begin
        EchoMode := emNormal;
        PasswordChar := #0;
      end;
      TabOrder := 0;
    end;

    with TButtonPanel.Create(Form) do
    begin
      Parent := Form;
      ShowBevel := False;
      ShowButtons := [pbOK, pbCancel];
      //Align := alTop;
      Align := alBottom;
    end;

    ChildSizing.TopBottomSpacing := 6;
    ChildSizing.LeftRightSpacing := 6;
    AutoSize := True;

    // upon show, the edit control will be focused for editing, because it's
    // the first in the tab order
    Form.EnableAutoSizing;
    if ShowModal = mrOk then
    begin
      Value := Edit.Text;
      Result := True;
    end;
    Form.Free;
  end;
end;

результат во вложении,

PS Autosize починили, взялись за Align...
У вас нет необходимых прав для просмотра вложений в этом сообщении.
alaken
постоялец
 
Сообщения: 221
Зарегистрирован: 18.02.2010 09:02:13

Re: InputBox глюк

Сообщение скалогрыз » 06.05.2010 16:10:24

alaken писал(а):создает окно диалога
поменял Align := alTop; на Align := alBottom;

отличное решение!
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: InputBox глюк

Сообщение alaken » 06.05.2010 16:18:22

скалогрыз писал(а):
alaken писал(а):создает окно диалога
поменял Align := alTop; на Align := alBottom;

отличное решение!

Ваш патч делает практически тоже самое.

но это костыли, проблема глубже...
я несколько запоздал с решением, пересобирал Lazarus, тестировал.

Добавлено спустя 2 минуты 14 секунд:
может это не глюк вовсе а фича...
alaken
постоялец
 
Сообщения: 221
Зарегистрирован: 18.02.2010 09:02:13

Re: InputBox глюк

Сообщение VirtUX » 06.05.2010 20:37:50

этот глюк с Align уже давно имеется. При чем он по "не земным" законам порядка периодически проявляется в разных ситуациях. Борюсь с этим во время OnShow: проходом по всем выровненным компонентам, присуждая им по очереди нуль в сторону выравнивания.
Равняем по верхнему краю от меньшего к большему
Код: Выделить всё
Label1.Align := alTop;
Label2.Align := alTop;
Label3.Align := alTop;
Label3.Top := 0;
Label2.Top := 0;
Label1.Top := 0;

Равняем по левому краю в порядок (слева-направо) 2 1 3
Код: Выделить всё
Label1.Align := alLeft;
Label2.Align := alLeft;
Label3.Align := alLeft;
Label3.Left := 0;
Label1.Left := 0;
Label2.Left := 0;
Последний раз редактировалось VirtUX 10.05.2010 14:18:00, всего редактировалось 1 раз.
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: InputBox глюк

Сообщение Павел Ишенин » 09.05.2010 18:32:11

Это не баг. Это особенность работы Align. Если есть на форме Control1 с align alTop и Top = 0 и мы хотим добавить на форму Control2 с align = alTop - то как нам его поместить над Control1? В delphi достаточно присвоить Control2 align = alTop и Top = 0 - он поместится над Control1. Это теперь также работает в Lazarus.

Но, некоторый код был написан без учета этого, и в результате старые ошибки всплыли на поверхность.
Павел Ишенин
постоялец
 
Сообщения: 475
Зарегистрирован: 24.03.2007 10:16:52

Re: InputBox глюк

Сообщение Little_Roo » 11.05.2010 17:05:32

Вроде починили :D :D :D - Lazarus 0.9.29 r25309 FPC 2.4.1 i386-win32-win32/win64

Добавлено спустя 7 минут 39 секунд:
Павел Ишенин писал(а):Это не баг. Это особенность работы Align. Если есть на форме Control1 с align alTop и Top = 0 и мы хотим добавить на форму Control2 с align = alTop - то как нам его поместить над Control1? В delphi достаточно присвоить Control2 align = alTop и Top = 0 - он поместится над Control1.

Была (уже для теста) голая форма и вызов InputBox - выравнивать там было нечего
Кстати, ShowMessage как работало нормально, так и ...тьфу-тьфу, чтоб не сглазить...нормально отображает....

Починка видимо в Lazarus 0.9.29 r25309 FPC 2.4.1 i386-win32-win32/win64
Аватара пользователя
Little_Roo
энтузиаст
 
Сообщения: 639
Зарегистрирован: 27.02.2009 19:56:36
Откуда: Санкт-Петербург


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 26

Рейтинг@Mail.ru