Поскольку ALC1200 и ALC888, кажется, очень похожи (см. этот немецкая Запись Wiki ), можно попробовать мое решение за Intel HDA ALC1200 на моем ноутбуке Acer Aspire 5920 G. После обновления до Ubuntu 12.04 Точный Ящер от 11,10 моих докладчиков продолжал производить звук при включении наушников. В 11,10 динамики были отключены звук автоматически, когда наушник был включен.
я зафиксировал его путем добавления строки к/etc/modprobe.d/alsa-base.conf:
options snd-hda-intel model=auto probe_mask=1
Теперь у меня есть намного больше опций/средств управления при выполнении alsamixer
. Каждый - "Автобесшумный Режим". Установите это на "Включенный", если это не работает из поля.
stehpan
Возможно, это связано с проблемой «переполнение стека ядра Windows», которая возникает, если у вашего элемента управления много родителей. И если вы запустите его в 64-битной системе, переполнение стека ядра произойдет намного быстрее. (подробнее об этом здесь: http://news.jrsoftware.org/news/toolbar2000/msg07779.html )
CodeCentral от Embarcadero - это обходной путь для этой ошибки (который также скопирован почти 1: 1 в Delphi 2009 VCL): http://cc.embarcadero.com/Item/25646
Это могло быть из-за прозрачного фрейма, который показывает Vista. (Чтобы разные окна выглядели одинаково прозрачно.
Попробуйте использовать «Align» (alClient) вместо привязок. Поскольку вы используете все привязки, это имеет больше смысла.
До того, как в Delphi 4 были введены якоря, мы динамически изменяли размер компонентов для достижения того же эффекта. Вы можете легко перемещать / настраивать компоненты в событии формы onresize
.
Установка для свойства формы doublebuffered
значения true
может уменьшить мерцание за счет буферизации метода paint
. Я помню, что раньше нам тоже приходилось это реализовывать!
В качестве альтернативы предложенному мною динамическому изменению размера, основываясь на предложении Хеманта, я собрал рабочий код (см. Ниже). Просто создайте приложение форм VCL, перетащите на tpanel
, которая не касается ни одного края формы (по умолчанию Align = alNone
), и замените Unit1 приведенным ниже кодом. Когда вы запустите его, вы увидите 4 желтых панели, окружающие ту, которая была добавлена изначально, а центральная панель изменит размер в соответствии с формой (как если бы все привязки были истинными
).
unit Unit1;
interface
uses
Windows, Classes, Controls, Forms, ExtCtrls, Graphics;
type
TPanelPos = (ppLeft, ppRight, ppTop, ppBottom);
TForm1 = class(TForm)
Panel1: TPanel;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
Panels : array[TPanelPos] of tpanel;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
PanelPos : TPanelPos;
begin
for PanelPos := ppLeft to ppBottom do
begin
Panels[PanelPos] := tpanel.Create(Form1);
Panels[PanelPos].Parent := Form1;
Panels[PanelPos].Color := clYellow;
case PanelPos of
ppLeft :
begin
Panels[PanelPos].Align := alLeft;
Panels[PanelPos].Width := Panel1.Left - 1;
end;
ppRight :
begin
Panels[PanelPos].Align := alRight;
Panels[PanelPos].Width := Form1.Width - Panel1.Left - Panel1.Width;
end;
ppTop :
begin
Panels[PanelPos].Align := alTop;
Panels[PanelPos].Height := Panel1.Top - 1;
end;
ppBottom :
begin
Panels[PanelPos].Align := alBottom;
Panels[PanelPos].Height := Form1.Height - Panel1.Top - Panel1.Height;
end;
end;
Panel1.Align := alClient;
end;
end;
procedure TForm1.FormDestroy(Sender: TObject);
var
PanelPos : TPanelPos;
begin
for PanelPos := ppLeft to ppBottom do
Panels[PanelPos].Free;
end;
end.
Попробуйте запустить программу в режиме совместимости с XP в Vista. Программы, скомпилированные с помощью Delphi 7, могут не полностью поддерживать собственный режим Vista (на самом деле, неудивительно).
Похоже, это довольно старый вопрос, в любом случае, вот единственное решение этой проблемы во Вселенной: используйте старый метод определения размера Windows, используя API-захват WM_SIZE и WM_SIZING, это непреложный вопрос, который будет работать в каждой Windows, которую вы узнаю.
Конечно, это означает, что вы должны использовать в основном GetClientRect () для определения значений высоты и высоты, а затем изменять размеры элементов управления на основе этих значений, конечно, это может звучать как попытка зажечь космический корабль, но это лучший вариант.
В противном случае вы могли бы сделать что-то более практичное и быстрое в процедуре изменения размера, например:
Control1.Left := Control2.Left + (buttonControl.Width div 2) - (buttonControl3.Width div 2);
//for example widths
Control4.Width := (Control.Width * 4) + (Control.Left * 8) + 54 ;
Я делаю такой код и работаю только во всех Windows, независимо от того, какая версия это будет.
Вам нужны только некоторые значения разрешения экрана, чтобы сделать что-то вроде этого:
iCXSCREEN := GetSystemMetrics(SM_CXSCREEN);
iCYSCREEN := GetSystemMetrics(SM_CYSCREEN);
if ((iCXSCREEN = 1280) and (iCYSCREEN = 720)) or ((iCXSCREEN = 1280) and (iCYSCREEN = 700)) or ((iCXSCREEN = 1280) and (iCYSCREEN = 600)) then begin
// blah blah
end;
Надежда помогает кому-то другому!
Ура!