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

Вниз

Как сделать чтобы через определённый промежуток времени   Найти похожие ветки 

 
Кен   (2003-10-01 04:33) [0]

программа переключала на себя фокус ?
Советуют использовать :
SetActiveWindow()
SetForeGroundWindow()
Но, что долно быть в скобках ?

Пробовал следующее :

SetForegroundWindow(Application.Handle);
SetForegroundWindow(Form1.Handle);
SetActiveWindow(Application.Handle);
SetActiveWindow(Form1.Handl);
Windows.SetFocus(Application.Handle);
Windows.SetFocus(Form1.Handle);
BringWindowToTop(Application.Handle);
BringWindowToTop(Form1.Handle);
ShowWindow(Form1.Handle, SW_SHOWNA);


Не помогло. Максимум, что получается, так это в панеле задач программа начинает мигать, но фокус на неё не переключается.
Как же правильно сделать ?


 
Tumcoat   (2003-10-01 04:47) [1]

А таймером пользоваться не пытался?


 
KSergey   (2003-10-01 05:31) [2]

Application.BringToFront?


 
Кен   (2003-10-02 05:02) [3]


> KSergey © (01.10.03 05:31) [2]
> Application.BringToFront?

Гениально !


 
Кен   (2003-10-07 02:48) [4]


> KSergey © (01.10.03 05:31) [2]
> Application.BringToFront?

Нет. Не гениально. Почему то в первый раз срабатывает, а во второй уже нет, только опять мигает программа в панели задач и всё. В чём дело непойму.


> Tumcoat © (01.10.03 04:47) [1]
> А таймером пользоваться не пытался?

Каким образом ?


 
Developerr   (2003-10-07 12:11) [5]


> Каким образом ?

Задаешь интервал в таймере. 60000 - это = 1 мин.
Щелкаешь на таймере 2 раза и в событии OnTimer пишешь:
a:=a+1; //предварительно присвоив a:=0; только не в этой процедуре.
if a=10 then
SetActiveWindow()
//Через десять минут должно стать активным.


 
Кен   (2003-10-08 01:48) [6]


> Developerr © (07.10.03 12:11) [5]
> Задаешь интервал в таймере. 60000 - это = 1 мин.
> Щелкаешь на таймере 2 раза и в событии OnTimer пишешь:
> a:=a+1; //предварительно присвоив a:=0; только не в этой
> процедуре.
> if a=10 then
> SetActiveWindow()
> //Через десять минут должно стать активным.

SetActiveWindow() - Что в скобках ?

Так не работает SetActiveWindow(Application.Handle);
Так тоже не работает SetActiveWindow(Form1.Handl);
Просто мигает окошко, в панеле задач, а переключения не происходит.
Вот я и спрашиваю, а как правильно ?


 
Tumcoat   (2003-10-08 08:48) [7]

Как и было сказано выше:
1. Задаешь интервал в таймере (допустим в событии OnActivate).
Timer1.Interval:=1000;
это примерно 1 сек.
2. Щелкаешь на таймере 2 раза и в событии OnTimer пишешь:
Timer1.Interval:=1000;
Form2.Show;
(можно ShowModal)
3. И все. :-)) Каждый раз при активации формы, через 1 сек. будет появляться вторая форма.


 
Tumcoat   (2003-10-08 08:51) [8]

Ой извини, во втором пункте Timer1.Interval:=0; :-)))


 
don-do   (2003-10-08 09:30) [9]

Ой, а ведь бить за это больно будут.:-)


 
Кен   (2003-10-09 01:27) [10]

Для экспериментов проще кинуть на форму TClipboardViewer из RXLib и в его ClipboardViewer1Change прописывать появление формы.
Запускаете программу. Переключаетесь на другое окно и копируете из него что-нибудь. При этом программа должна появиться поверх всех окон и переключить на себя фокус.

procedure TForm1.ClipboardViewer1Change(Sender: TObject);
begin
if Form1.Enabled then begin // Чтобы при запуске программы не получать ошибку установки фокуса.
Form1.Show;
// Или пишете сюда что угодно из приведённых выше вариантов.
// Кто найдёт правильный код - тот здесь самый умный.
end;
end;


Form1.Show; переключает на себя фокус только одни раз ! Второй раз уже не срабатывает. Почему неизвестно. Возможно на Form1 надо послать какое то сообщение о потере фокуса.


 
Кен   (2003-10-11 04:06) [11]

Как, товарищи ?


 
mike.dld   (2003-10-11 04:14) [12]

не знаю, какого хрена у тебя не получается, я в OnTimer пишу просто


SetForegroundWindow(Handle);


и всё работает. У меня WinXP, D6


 
Anatoly Podgoretsky   (2003-10-11 11:41) [13]

don-do © (08.10.03 09:30) [9]
Ой не то слово


 
alexta   (2003-10-12 01:45) [14]

Не все так просто. У меня тоже не работает под ХР, 2000. Спрашивал у умных людей - сказали что дяди из Microsoft лавочку в 2000 и ХР прикрыли. Теперь ни одна программа без вмешательства пользователя активной не становится.

Насколько ето правда - не знаю.


 
Anatoly Podgoretsky   (2003-10-12 07:41) [15]

Это правда, что бы плохии дяди не портили работу пользователя.


 
Кен   (2003-10-14 02:16) [16]


> Anatoly Podgoretsky © (12.10.03 07:41) [15]
> Это правда, что бы плохии дяди не портили работу пользователя.

А откуда это известно ? Какой источник информации ?


 
Германн   (2003-10-14 03:35) [17]

Очень все это верно сказано.
Но у меня недавно произошло все как раз наоборот. Уже давно, некий забытый уже мной заказчик попросил, чтобы моя программа всегда была поверх всех прочих и не давала человеку сидящему за компом никаких возможностей нормально пользоваться любыми другими приложениями. Я, конечно, пытался его переубедить, говоря, что Windows все-таки разрабатывался как раз для противополжных целей, но...
А вот недавно, приехав к одному из пользователей данной программы, где она стояла в "пробном" режиме, я попробовал переключиться в WindowsCommander, чтобы либо прочитать свои исходники, либо запустить Дельфи, чтобы уточнить некие вопросы. У этого пользователя стоит WinXP. Никто, кроме... (см. П.Энтони) не может там ничего сделать, кроме как посмотреть на экран. Но увы - никаких нормальных способов переключиться в любое другое приложение я не нашел. Происходило некое "моргание", возможно видимое из-за того, что монитор TFT и более ничего! Единственным способом работы в другом приложении, типа WC было - "Оттащить" мышкой окно моей программы в сторону. Причем видимый кусок ее так и оставался всега видимым, несмотря на то, что работа шла в другом приложении!
Дык вот как такое произошло! И как такое сделать самому? Ей богу - не понимаю!


 
Кен   (2003-10-15 03:34) [18]


> Германн © (14.10.03 03:35) [17]

А сама программа есть ? Может в коде её поглядеть ?


 
Германн   (2003-10-16 03:30) [19]

2 Кен © (15.10.03 03:34) [18]
Ес-сно есть. Это же моя собственная программа. И в коде можно поглядеть. Но вот только в коде нет ничего особенного!
Есть вызываемая по таймеру каждую секунду(это минимальный интервал) процедура SetAct.
procedure SetAct;
begin
SetWindowPos(Application.Handle,HWND_TOP,1,1,0,0,SWP_NOSIZE);
SetForegroundWindow(Application.Handle);
end;

И все! Но, во-первых, раз в секунду - это заметно на глаз. Во-вторых, вышеописанный случай - единственный из множества. Во всех прочих случаях - работа моей программы не сопровождается такими эфФектами!



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

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

Наверх




Память: 0.49 MB
Время: 0.018 c
3-89158
изм
2003-10-06 16:25
2003.10.27
float to numeric


1-89343
Виталя
2003-10-16 13:27
2003.10.27
Всплывающая подсказка для кнопки


3-89129
Ser_ega
2003-10-07 22:47
2003.10.27
ser_ega


3-89164
rosl
2003-10-07 03:34
2003.10.27
sql


7-89587
Borealis
2003-08-14 22:06
2003.10.27
Кем лочится файл?





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