Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1198581367
mikola
2007-12-25 14:16
2008.01.27
функция проверки на наличие файла на ftp


2-1199345203
Прохожев М.М
2008-01-03 10:26
2008.01.27
Нужна помощь


2-1198423011
batya-x
2007-12-23 18:16
2008.01.27
изменения в реестре


15-1197963583
Slider007
2007-12-18 10:39
2008.01.27
С днем рождения ! 18 декабря 2007 вторник


15-1198146970
Alkid
2007-12-20 13:36
2008.01.27
PIF-файл





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский