Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Компоненты и классы
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 14.09.2018, 17:38
TEKTON TEKTON вне форума
Новичок
 
Регистрация: 14.03.2011
Сообщения: 60
Репутация: 10
По умолчанию Нестандартные компоненты работы со строками

Может есть компонент который выглядит как обычный Label но при клике на нём, что б выпадал список как в ComboBox?

Вопрос № 2 как у Edit убрать рамку и фон (ну или задать нужный цвет), что б остался Edit.Text только виден и возможность вводить текст при клике.

Может есть уже готовые компоненты такие ?
Если нету, то как можно такое реализовать?

Вот набросал немного код что мне надо.
Работает, но выглядит корявенько.
Код:
procedure TForm1.Label1Click(Sender: TObject);
begin
listbox1.Visible:=true;
end;


procedure TForm1.ListBox1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
Label1.Caption:=Listbox1.Items.Strings[ListBox1.ItemIndex];
listbox1.Hide;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Listbox1.Visible:=false;
end;

Спасибо.

Последний раз редактировалось TEKTON, 14.09.2018 в 19:00.
Ответить с цитированием
  #2  
Старый 14.09.2018, 19:58
Аватар для Guaho
Guaho Guaho вне форума
Начинающий
 
Регистрация: 27.08.2017
Сообщения: 173
Версия Delphi: Delphi7
Репутация: 10
По умолчанию

Посмотрите в сторону TMS components. Там очень много всякой всячины, разных полезностей и красивостей, может и найдёте для себя что-то близкое к истине.
Ответить с цитированием
  #3  
Старый 14.09.2018, 20:42
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,004
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

1. Можно сдеалать черещ PopupMenu
Код:
procedure TForm1.Label1Click(Sender : TObject);
var
  p : TPoint;
begin
  p.Top := (Sender As TLabel).Top + (Sender As TLabel).Height;
  p.Left := (Sender As TLabel).Left;
  p := ClienttoScreen(p);
  PopupMenu1.Popup(p);
end;
Ну и в обработчике MenuItem'ов укажешь на установку соотв. значения.

2. Можно настроить и стандартный компонент. На вскидку не скажу как (просто не помню), но делал такое.
Ответить с цитированием
  #4  
Старый 14.09.2018, 21:18
TEKTON TEKTON вне форума
Новичок
 
Регистрация: 14.03.2011
Сообщения: 60
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Код:
procedure TForm1.Label1Click(Sender : TObject);
var
  p : TPoint;
begin
  p.Top := (Sender As TLabel).Top + (Sender As TLabel).Height;
  p.Left := (Sender As TLabel).Left;
  p := ClienttoScreen(p);
  PopupMenu1.Popup(p);
end;

Ругается.
Мож чего надо ещё добавить?
Цитата:
[Error] Unit1.pas(127): Undeclared identifier: 'Top'
[Error] Unit1.pas(128): Undeclared identifier: 'Left'
[Error] Unit1.pas(130): Incompatible types: 'Integer' and 'TPoint'
Ответить с цитированием
  #5  
Старый 15.09.2018, 05:30
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,004
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Сорри, забыл как оно там. Вот так работает:
Код:
type
  TForm1 = class(TForm)
    lbClickMe: TLabel;
    pmClickMe: TPopupMenu;
    miClickMe1: TMenuItem;
    miClickMe2: TMenuItem;
    miClickMe3: TMenuItem;
    edEdit: TEdit;
    procedure lbClickMeClick(Sender: TObject);
    procedure pmClickMeClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.lbClickMeClick(Sender: TObject);
var
  p : TPoint;
begin
  p.X := (Sender As TLabel).Left;
  p.Y := (Sender As TLabel).Top + (Sender As TLabel).Height + 2;
  p := ClientToScreen(p);
  pmClickMe.Tag := Integer(Sender);
  pmClickMe.Popup(p.X,p.Y);
end;

procedure TForm1.pmClickMeClick(Sender: TObject);
var
  lb : TLabel;
begin
  lb := TLabel(pmClickMe.Tag);
  lb.Caption := (Sender As TMenuItem).Caption;
end;

pmClickMeClick назначен всем пунктам меню.

По поводу TEdit.
Надо поставить такие свойства в соотв. значения:
Код:
BorderStyle := bsNone;
BevelInner := bvNone;
BevelOuter := bvNone;
Color := clBtnFace;
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
Guaho (15.09.2018)
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 20:31.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter