Во вчерашней сборке проявилась замечательная глюка
Было Lazarus 0.9.29 r25120 FPC 2.4.1 i386-win32-win32/win64
Стало Lazarus 0.9.29 r25198 FPC 2.4.1 i386-win32-win32/win64
Модератор: Модераторы
alaken писал(а):FPC тут не причем, все дело в LCL Lazarus,
даже пересобранный с ключем -dOldAutoSize ничего не дает, видимо что-то другое "пилят"...
скалогрыз писал(а):...возможность использовать OldAutoSize была недавно удалёна из LCL.
alaken писал(а):AutoSize допилили?
тенденция нехорошая, чаще ломают чем что-то делают...
скалогрыз писал(а):alaken писал(а):AutoSize допилили?
тенденция нехорошая, чаще ломают чем что-то делают...
да вообще негодяи! наобещали с три короба и бесплатно, а теперь баги заставляют огребать! и ещё ехидную приписочку к транку написали: "используете на свой страх и риск"! нужно срочно переходить на Delphi... или нет лучше сразу на Си!
alaken писал(а):повеселило Ваше ехидство =)
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;
alaken писал(а):создает окно диалога
поменял Align := alTop; на Align := alBottom;
скалогрыз писал(а):alaken писал(а):создает окно диалога
поменял Align := alTop; на Align := alBottom;
отличное решение!
Label1.Align := alTop;
Label2.Align := alTop;
Label3.Align := alTop;
Label3.Top := 0;
Label2.Top := 0;
Label1.Top := 0;
Label1.Align := alLeft;
Label2.Align := alLeft;
Label3.Align := alLeft;
Label3.Left := 0;
Label1.Left := 0;
Label2.Left := 0;
Павел Ишенин писал(а):Это не баг. Это особенность работы Align. Если есть на форме Control1 с align alTop и Top = 0 и мы хотим добавить на форму Control2 с align = alTop - то как нам его поместить над Control1? В delphi достаточно присвоить Control2 align = alTop и Top = 0 - он поместится над Control1.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 32