Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2011.06.19;
Скачать: [xml.tar.bz2];

Вниз

помогите организовать проверку   Найти похожие ветки 

 
rodionov_uv   (2011-03-10 23:21) [0]

имеем динамически созданные компоненты Edit с событиями OnEnter и OnExit и открытый документ Word или Exel в котором идёт поиск.
Надо организовать проверку при смене фокуса компонентов Edit на наличие открытого окна word или exel.
Делаю так, но вылетает с ошибкой при удалении компоннента с которого уходит фокус


procedure TMyForm.NewOnExit(Sender: TObject);//событие OnExit
begin
 if MyForm.Visible = True then
 proverkaPrint;
end;

procedure TMyForm.NewOnClick(Sender: TObject);//событие OnEnter
begin
  if MyForm.Visible = True then
 begin
 W.ActiveDocument.Range(0, 0).Select;
 W.Selection.Find.Execute(ReadList.Strings[ActiveControl.TabOrder]);
 end;
end;

procedure TMyForm.ProverkaPrint;
var
win:HWND;
begin
 win := FindWindow(nil,PChar(a));
 if win = 0 then
 begin
   ShowMessage(" Вы по ошибке закрыли приложение" + b +#13 + "откройте документ заново и продолжите поиск");
   ExitDok;
   Abort;
 end;
end;

procedure TMyForm.ExitDok;
var
q:integer;
begin
 for q := 0 to EditList.Count-1 do
 begin
   TLabeledEdit(FindComponent(EditList.Strings[q])).Free;
 end;
.......................................................//далее идут обнуление переменных


 
clickmaker ©   (2011-03-10 23:29) [1]

> при удалении компоннента с которого уходит фокус

удалять компоненты из их же собственных обработчиков вообще чревато.
Да и зачем так сложно, в цикле? Можно же их сгруппировать на Panel или Frame и работать с ней


 
rodionov_uv   (2011-03-10 23:59) [2]

попробовал при создании закидывать Editы сразу на панель, а при проверке сразу её удалять всё равно ошибка


 
KilkennyCat ©   (2011-03-11 00:09) [3]

удалять также? только еще глубже? родителя?


 
rodionov_uv   (2011-03-11 00:23) [4]

сама процедура


procedure TMyForm.ExitDok;
var
q:integer;
begin
for q := 0 to EditList.Count-1 do
begin
  TLabeledEdit(FindComponent(EditList.Strings[q])).Free;
end;
.......................................................//далее идут обнуление переменных


работает я её вызываю несколько раз, а вот в этом случае не хочет


 
rodionov_uv   (2011-03-11 00:23) [5]

сама процедура


procedure TMyForm.ExitDok;
var
q:integer;
begin
for q := 0 to EditList.Count-1 do
begin
  TLabeledEdit(FindComponent(EditList.Strings[q])).Free;
end;
.......................................................//далее идут обнуление переменных


работает я её вызываю несколько раз, а вот в этом случае не хочет


 
sniknik ©   (2011-03-11 00:40) [6]

удаляй в событии формы, а вот событие посылай из обработчика компонента.


 
rodionov_uv   (2011-03-11 00:43) [7]

а на форме куда повесить


 
Германн ©   (2011-03-11 00:49) [8]


> а на форме куда повесить
>

На WM_USER +101


 
sniknik ©   (2011-03-11 00:52) [9]

вот так, типа
const
 WM_DEL_CMP = WM_USER + 101;

type
 TForm1 = class(TForm)
   ...
 private
   procedure DeleteCompanent(var Msg: TMessage); message WM_DEL_CMP;
 end;

procedure TForm1.DeleteCompanent(var Msg: TMessage);
begin
 TObject(Msg.WParam).Free;
end;

procedure TForm1.EditEnter(Sender: TObject);
begin
 with TEdit(Sender) do Text:= Name;
end;

procedure TForm1.EditExit(Sender: TObject);
begin
 with TEdit(Sender) do begin
   onEnter:= nil;
   onExit := nil;
 end;
 PostMessage(Handle, WM_DEL_CMP, Integer(Sender), 0);
end;


и никаких проверок.


 
sniknik ©   (2011-03-11 00:54) [10]

блин, Component конечно же... ;(


 
rodionov_uv   (2011-03-11 01:01) [11]

а с этого момента можно поподробней и желательно с примером


 
rodionov_uv   (2011-03-11 01:02) [12]

пока писал уже и пример дали


 
картман ©   (2011-03-11 01:07) [13]


> а с этого момента можно поподробней


http://lib.rus.ec/b/239298/read#t23


 
rodionov_uv   (2011-03-11 01:09) [14]

спасибо буду разбираться


 
rodionov_uv   (2011-03-11 02:13) [15]

если делаю как писал sniknik ©
> и никаких проверок.

удаляет компонент даже если есть окно worda

если делаю так

procedure TMyForm.NewOnExit(Sender: TObject);
var
win:HWND;
begin
 win := FindWindow(nil,PChar(a));
 if win = 0 then
 begin
   ShowMessage(" Вы по ошибке закрыли приложение" + b +#13 + "откройте документ заново и продолжите поиск");
   PostMessage(Handle, WM_DEL_CMP, Integer(Sender), 0);
 end;
end;

procedure TMyForm.NewOnClick(Sender: TObject);//событие OnEnter
begin
 if MyForm.Visible = True then
begin
W.ActiveDocument.Range(0, 0).Select;//Здесь ошибка
W.Selection.Find.Execute(ReadList.Strings[ActiveControl.TabOrder]);
end;
end;


или я чего не так делаю


 
rodionov_uv   (2011-03-11 02:32) [16]

а, если делаю так

procedure TMyForm.NewOnExit(Sender: TObject);
var
win:HWND;
begin
win := FindWindow(nil,PChar(a));
if win = 0 then
begin
  ShowMessage(" Вы по ошибке закрыли приложение" + b +#13 + "откройте документ заново и продолжите поиск");
  PostMessage(Handle, WM_DEL_CMP, Integer(Sender), 0);
end;
end;

procedure TMyForm.NewOnClick(Sender: TObject);//событие OnEnter
var
win:HWND;
begin
 if MyForm.Visible = True then
 begin
   win := FindWindow(nil,PChar(a));
   if win <> 0 then
   begin
      W.ActiveDocument.Range(0, 0).Select;
      W.Selection.Find.Execute(ReadList.Strings[ActiveControl.TabOrder]);
   end;
 end;  
end;


то удаляет по одному компоненту


 
rodionov_uv   (2011-03-11 02:34) [17]

а мне надо чтобы удалил сразу все, если окно в котором идёт поиск случайно закрыто


 
KilkennyCat ©   (2011-03-11 02:46) [18]

тебе же предложили сделать панель парентом для всех.
получил сендер? определи парента для сендера и удаляй его.
либо пиши дополнительный код: если сендер одного из таких компонентов то удалить еще и такой и такой и такой и т.д.


 
sniknik ©   (2011-03-11 07:52) [19]

все проверки и удаления после, в событии формы... а посылаемое событие тогда будет не "удаление комтонента", а "удаление всего "не нужного"".



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2011.06.19;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.003 c
6-1230461387
WeTeR
2008-12-28 13:49
2011.06.19
Отправка очереди из изображений по сети


8-1212599857
DevilDevil
2008-06-04 21:17
2011.06.19
плагин для фотошопа ?


15-1299060395
Scott Storch
2011-03-02 13:06
2011.06.19
Цифровая подпись


15-1298755792
Юрий
2011-02-27 00:29
2011.06.19
С днем рождения ! 27 февраля 2011 воскресенье


2-1299834174
ssnakess
2011-03-11 12:02
2011.06.19
Тип данных String





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский