Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.01.27;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.022 c
2-1198485445
ksmakov
2007-12-24 11:37
2008.01.27
Как вытащить номер строки в таблице dbf


15-1197796608
VasiliyE
2007-12-16 12:16
2008.01.27
Книга: delphi + ооп


6-1179331237
Juri
2007-05-16 20:00
2008.01.27
TWebBrowser Click


2-1198182166
datorn
2007-12-20 23:22
2008.01.27
WinAPI


1-1193222862
Eisdolch
2007-10-24 14:47
2008.01.27
Мерцание при перерисовке