2012-04-21 1 views
3

Я хочу построить функцию в форме без видимого фона форм. Создан TForm с TransparentColor, установленным в True, а TransParentColorValue - clWhite. Просто поместите на него TImage, нарисуйте функцию на растровом изображении, назначьте ее изображению, отлично поработайте. Есть одна проблема. Я больше не могу щелкнуть форму. Любой щелчок на заголовке формы и клиентской зоне приводит к щелчку в базовом приложении. Это вызвано установкой параметра TransparentColor в значение True. Как я могу предотвратить этот «щелчок»?Предотвратить щелчок на прозрачной форме

Обновление Я пробовал предложения Сертака, и я получил замечательные результаты. Я готовлю растровое следующим образом:

Bitmap.Canvas.Brush.Color := clFuchsia; 
    Bitmap.Canvas.FillRect (Rect (0, 0, Bitmap.Width, Bitmap.Height)); 

Когда цвет установлен в clWhite и формы TransparentColorValue, а форма полностью нажмите наблюдательном включена.

Как установлено в clBlack, форма может быть перемещен, но границы не могут быть изменены и кнопки системы не работают

Оба набора для clFuchsia он ведет себя как нормальная форма. Ну, теперь это работает, но, возможно, кто-то получил объяснение?

+2

Используйте другой цвет (я понятия не имею, почему ..). –

+0

Странно, устанавливая TransparentColorValue на clBlack и заполняя растровое изображение clBlack, а также работает частично. Он не щелкает, я могу переместить форму сейчас, но все же не могу изменить размер и кнопки системы не реагируют. Любая идея, как это решить? – Arnold

+0

Где вы находите эти цвета? Сделайте это clFuchsia и отпустите .. :) –

ответ

5

Казалось бы, API действует странно, когда используются определенные цвета. Белый - очевидный, черный - немного менее проблематичный. Я пробовал с желтым, серым, пуговичным лицом, фуксией и т. Д., И они выглядят отлично.

Если кто-то хочет, чтобы дублировать эту проблему без использования «Прозрачные ...» свойства в Delphi, вот небольшой отрывок:

procedure TForm1.Button1Click(Sender: TObject); 
var 
    Color: DWORD; 
    DC: HDC; 
begin 
    Color := $00FFFFFF; 
    SetWindowLong(Handle, GWL_EXSTYLE, 
     GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_LAYERED); 
    SetLayeredWindowAttributes(Handle, Color, 255, LWA_COLORKEY); 

    DC := GetWindowDC(Handle); 
    SetDCBrushColor(DC, Color); 
    FillRect(DC, Rect(10, 10, 100, 80), GetStockObject(DC_BRUSH)); 
    ReleaseDC(Handle, DC); 
end; 


Примечание: Я бы с удовольствием удалить этот ответ, если кто-то дает ответ с окончательное объяснение.

+1

Я согласен с этим. – Arnold