Форум: "Начинающим";
Текущий архив: 2008.01.27;
Скачать: [xml.tar.bz2];
ВнизTPopupMenu +стандартное меню Найти похожие ветки
← →
Максим В. (2007-12-28 09:29) [0]У меня простой наследник TListBox, в котором я при двойном клике по пункту создаю TEdit, который позволяет редактировать пункт.
У самого TListBox"a задан внешний TPopupMenu, который успешно показывается. Но при такой ситуации: когда я делаю двойной клик по пункту - создается TEdit контролл, - у этого TEdit отсутствует собственое стандартное меню (копировать-вырезать...), а опять же возникает меню из TPopupMenu. Т.е. TPopupMenu переопределяет (?) стандартное меню TEdit"a.
Что мне в такой ситуации сделать?
Код создающий TEdit внутри TListBox"a:procedure TCheckListBox.CreateWnd;
begin
inherited CreateWnd;
FEdit := TEdit.Create(Self);
FEdit.BorderStyle := bsNone;
FEdit.Parent := Self;
FEdit.Visible := False;
FEdit.OnKeyPress := OnEditKeyPress;
...
end;
← →
Максим В. (2007-12-28 11:03) [1]Совсем нет идей, или я плохо описал ситуацию?
Добавлю: если не устанавливать PopupMenu для ListBox, тогда стандартное меню TEdit"a спокойно показывается.
← →
{RASkov} © (2007-12-28 14:02) [2]> [1] Максим В. (28.12.07 11:03)
Вот посмотри вариант:type
TForm1 = class(TForm)
.....
private
procedure EditExit(Sender: TObject);
{ Private declarations }
.....
end;
................
procedure TForm1.ListBox1DblClick(Sender: TObject);
var Edit: TEdit;
begin
Edit:=Tedit.Create(ListBox1);
with Edit do begin
Parent:=ListBox1;
BorderStyle:=bsNone;
Text:=ListBox1.Items[ListBox1.ItemIndex];
BoundsRect:=ListBox1.ItemRect(ListBox1.ItemIndex);
OnExit:=EditExit;
Color:=clInfoBk;
SetFocus;
end;
ListBox1.Tag:=Integer(Edit);
end;
procedure TForm1.EditExit(Sender: TObject);
begin
ListBox1.Items[ListBox1.ItemIndex]:=TEdit(Sender).Text;
end;
procedure TForm1.ListBox1Click(Sender: TObject);
begin
if ListBox1.Tag<>0 then begin
try
TObject(ListBox1.Tag).Free;
finally
ListBox1.Tag:=0;
end;
end;
end;
Вместо идентификатора "ListBox1" - лучше везде используй сендер.... код будет гибче...)
← →
{RASkov} © (2007-12-28 14:07) [3]Тьфу.... или тебе как раз стандартное для эдита и нужно меню?
← →
Максим В. (2007-12-28 14:11) [4]Да, именно для создаваемого Edit"a нужно стандартное-windows меню, а не меню из PopupMenu.
← →
{RASkov} © (2007-12-28 14:12) [5]Тогда попробуй вот так:
procedure TForm1.ListBox1DblClick(Sender: TObject);
var Edit: TEdit;
begin
......
ListBox1.PopupMenu:=nil;
end;
........
procedure TForm1.ListBox1Click(Sender: TObject);
begin
if ListBox1.Tag<>0 then begin
try
TObject(ListBox1.Tag).Free;
finally
ListBox1.Tag:=0;
ListBox1.PopupMenu:=PopupMenu1;
end;
end;
end;
Т.е. мы просто на время редактирования отключаем всему листу его попапменю и после редактирования включаем его назад.....
← →
clickmaker © (2007-12-28 14:12) [6]
> [4] Максим В. (28.12.07 14:11)
а нельзя ли временно отнять попап-меню у листбокса, на время когда показываешь edit?
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.01.27;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c