Чтение онлайн

ЖАНРЫ

Советы по Delphi. Версия 1.4.3 от 1.1.2001

Озеров Валентин

Шрифт:

 FPickList.Parent := Self;

 FPickList.IntegralHeight := True;

 FPickList.ItemHeight := 11;

 FPickList.Items.CommaText :='1,2,3,4,5,6,7,8,9,0';

end;

destructor TTestDropEdit.Destroy;

begin

 FPickList.Free;

 inherited;

end;

procedure TTestDropEdit.CloseUp(Accept: Boolean);

begin

 if FPickList.Visible then begin

if GetCapture <> 0 then SendMessage(GetCapture, WM_CANCELMODE, 0, 0);

SetWindowPos(FPickList.Handle, 0, 0, 0, 0, 0, SWP_NOZORDER or SWP_NOMOVE or SWP_NOSIZE or SWP_NOACTIVATE or SWP_HIDEWINDOW);

if FPickList.ItemIndex <> -1 then Text := FPickList.Items.Strings[FPickList.ItemIndex];

FPickList.Visible := False;

Invalidate;

 end;

end;

procedure TTestDropEdit.DropDown;

var

 P: TPoint;

 I,J,Y: Integer;

begin

 if Assigned(FPickList) and (not FPickList.Visible) then begin

FPickList.Width := Width;

FPickList.Color := Color;

FPickList.Font := Font;

FPickList.Height := 6 * FPickList.ItemHeight + 4;

FPickList.ItemIndex := FPickList.Items.IndexOf(Text);

P := Parent.ClientToScreen(Point(Left, Top));

Y := P.Y + Height;

if Y + FPickList.Height > Screen.Height then Y := P.Y - FPickList.Height;

SetWindowPos(FPickList.Handle, HWND_TOP, P.X, Y, 0, 0, SWP_NOSIZE or SWP_NOACTIVATE or SWP_SHOWWINDOW);

FPickList.Visible := True;

Invalidate;

Windows.SetFocus(Handle);

 end;

end;

procedure TTestDropEdit.CMCancelMode(var Message: TCMCancelMode);

begin

 if (Message.Sender <> Self) and (Message.Sender <> FPickList) then CloseUp(False);

end;

procedure TTestDropEdit.WMKillFocus(var Message: TMessage);

begin

 inherited;

 CloseUp(False);

end;

procedure TTestDropEdit.WndProc(var Message: TMessage);

 procedure DoDropDownKeys(var Key: Word; Shift: TShiftState);

 begin

case Key of

VK_UP, VK_DOWN:

if ssAlt in Shift then begin

if FPickList.Visible then CloseUp(True)

else DropDown;

Key := 0;

end;

VK_RETURN, VK_ESCAPE:

if FPickList.Visible and not (ssAlt in Shift) then begin

CloseUp(Key = VK_RETURN);

Key := 0;

end;

end;

 end;

begin

 case Message.Msg of

 WM_KeyDown, WM_SysKeyDown, WM_Char:

with TWMKey(Message) do begin

DoDropDownKeys(CharCode, KeyDataToShiftState(KeyData));

if (CharCode <> 0) and FPickList.Visible then begin

with TMessage(Message) do SendMessage(FPickList.Handle, Msg, WParam, LParam);

Exit;

end;

end

 end;

 inherited;

end;

end.
 

Программное

открытие ComboBox II

Delphi 1

procedureTForm1.ComboBox1Enter(Sender:TObject);

begin

 SendMessage(ComboBox1.Handle, CB_SHOWDROPDOWN, Integer(True), 0);

end;

Поместите эту строку в обработчик события OnEnter ComboBox:

SendMessage(combobox1.Handle, CB_SHOWDROPDOWN, 1, 0);

Измените третий параметр (1) на 0, если вы хотите спрятать список. 

Поделиться с друзьями: