powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Разморозить форму
42 сообщений из 42, показаны все 2 страниц
Разморозить форму
    #39783953
logone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем
У меня есть функция в которой происходит ожидания нажатия enter:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
procedure WaitEnter;
var
  msg: tagMSG;
begin
  repeat
    GetMessage(msg, 0, 0, 0);
  until (msg.message = WM_KEYDOWN) and (msg.wParam = 13);
end;



Она вызывается в цикле:
Код: pascal
1.
2.
3.
4.
5.
while ... do
  ...
  WaitEnter;
  ...
end;


Когда она выполняется, как мне получить возможность двигать форму и писать в edit?
...
Рейтинг: 0 / 0
Разморозить форму
    #39783962
Фотография krapotkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а чем главный цикл обработки сообщений не подходит ?
он всем этим и занимается
и обработчик OnKeyPress замечательно отловит нажатие Enter без всякой бесовщины
...
Рейтинг: 0 / 0
Разморозить форму
    #39783984
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Взгляните на код этой процедуры

[SRC delphi]
procedure MyProcessMessages();
var
lpMsg : TMsg;
begin
while PeekMessage(lpMsg,0,0,0,PM_REMOVE) do
begin
TranslateMessage(lpMsg);
DispatchMessage(lpMsg);
end;
end;
/SRC]
...
Рейтинг: 0 / 0
Разморозить форму
    #39783985
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сорри, лишнее удалил.



Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
procedure MyProcessMessages();
var
   lpMsg    : TMsg;
begin
   while PeekMessage(lpMsg,0,0,0,PM_REMOVE) do
   begin
      TranslateMessage(lpMsg);
      DispatchMessage(lpMsg);
   end;
end;
...
Рейтинг: 0 / 0
Разморозить форму
    #39783997
logone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krapotkin,

Мне нужно чтобы до того, пока не будет нажата клавиша ентер цикл дальше не шёл!
...
Рейтинг: 0 / 0
Разморозить форму
    #39784013
Vizit0r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
logonekrapotkin,

Мне нужно чтобы до того, пока не будет нажата клавиша ентер цикл дальше не шёл!

потоки не предлагать, как я понимаю?
...
Рейтинг: 0 / 0
Разморозить форму
    #39784044
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здесь потоки нафик не сдались - не тот уровень ТС, судя по вопросу. Достаточно флага и ProcessMessages
...
Рейтинг: 0 / 0
Разморозить форму
    #39784045
logone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vizit0r,

Я попробовал потоками
Я тоже сначала подумал, что мне нужно просто чтобы эта функция выполнялась в отдельном потоке
Я сделал так -
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
while ... do
  ...
  TThread.CreateAnonymousThread(
    procedure
    var
      msg: tagMSG;
    begin
      repeat
        PeekMessage(msg, 0, 0, 0);
      until (msg.message = WM_KEYDOWN) and (msg.wParam = 13);
    end).Start;
  ...
end;


Но получилось так, что теперь этот код в этом месте ждёт нажатия энтер в отдельном потоке, а цикл то конечно продолжается!
Я не понимаю как здесь использовать потоки, пожалуйста подскажи
...
Рейтинг: 0 / 0
Разморозить форму
    #39784046
logone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
white_nigger,

Не хочу я этих флагов! Это всегда посредственное решение! Я хочу научиться писать нормально!
...
Рейтинг: 0 / 0
Разморозить форму
    #39784053
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
logone,

о каком цикле ты пишешь? Что должно остановиться?
...
Рейтинг: 0 / 0
Разморозить форму
    #39784058
logone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
s62,

Цикл
Код: pascal
1.
while ... do


А остановиться должен цикл до тех пор пока не будет нажата клавиша ентер
...
Рейтинг: 0 / 0
Разморозить форму
    #39784091
asutp2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
logonewhite_nigger,

Не хочу я этих флагов! Это всегда посредственное решение! Я хочу научиться писать нормально!
Правильное решение это использование флагов и OnKeyPress. А использование подобного цикла как раз решение уровня даже не студента, а школьника.
...
Рейтинг: 0 / 0
Разморозить форму
    #39784094
logone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vizit0r,

Пожалуйста, если ты тут будешь, то предложи
...
Рейтинг: 0 / 0
Разморозить форму
    #39784103
Ghost Writer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
logoneвозможность двигать форму и писать в edit?добавление пары строчек это решает. но зачем так делать?
хочешь как в консольном приложении readln. если требуется подтверждение дальнейших действий, то может проще MessageBox вывести. он также приостановит цикл и закрыть его можно тоже нажатием Enter
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
procedure WaitEnter;
var
  msg: tagMSG;
begin
  repeat
    GetMessage(msg, 0, 0, 0);
    TranslateMessage(msg);
    DispatchMessage(msg);
  until (msg.message = WM_KEYDOWN) and (msg.wParam = 13);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  N: Integer;
begin
  N := 0;
  while True do
  begin
    WaitEnter;
    Inc(N);
    Caption := IntToStr(N);
  end;
end;
...
Рейтинг: 0 / 0
Разморозить форму
    #39784111
logone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо!
Семён, ты был прав, я просто впервые увидел эти функции, поискал, почитал про них, и не понял
Ghost Writer, а только сейчас понял смысл!
Спасибо вам!
...
Рейтинг: 0 / 0
Разморозить форму
    #39784167
Фотография Gator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
logone,

[spoiler] Поздравля вас соврамши!
YouTube Video
...
Рейтинг: 0 / 0
Разморозить форму
    #39784188
logone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gator,
После тестов, было понято что
Если в этот момент (когда мы в функции WaitEnter) выполнится другой обработчик события -
Допустим вы по Esc закроете форму в этот момент
И переключитесь на другую форму
Функция WaitEnter останется работать и ждать ентера, и когда будет нажат энтер цикл продолжит работу!

Чтобы этого не было
Нужно будет написать что то типа:
Код: pascal
1.
var STOP: boolean;



Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
procedure WaitEnter;
var
  msg: tagMSG;
begin
  repeat
    GetMessage(msg, 0, 0, 0);
    TranslateMessage(msg);
    DispatchMessage(msg);
    if msg.wParam = 27 then 
    begin
      STOP := true; 
      break;
    end;
  until (msg.message = WM_KEYDOWN) and (msg.wParam = 13);
end;



Потом мы попадём обратно в цикл и там тоже должны будем написать:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
while True do
begin
  WaitEnter;
  if STOP then break; (или Exit)
  Inc(N);
  Caption := IntToStr(N);
end;



Не используйте это никогда!
Вместо цикла вызовите функцию, которая сделает то что надо
А после этого в конце обработчика событий OnKeyPress вызовите снова эту же функцию
Имитатор итераций готов
...
Рейтинг: 0 / 0
Разморозить форму
    #39784191
logone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пысы: Тоже самое касается и флагов с процесс мессаджем!
...
Рейтинг: 0 / 0
Разморозить форму
    #39784197
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
logoneУ меня есть функция в которой происходит ожидания нажатия enter:
Выбросьте её нафиг и никогда не пишите такую хрень. Потом сформулируйте, какую задачу Вы пытаетесь решить её с помощью и спросите, как решать её адекватно.
...
Рейтинг: 0 / 0
Разморозить форму
    #39784286
bk0010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Писать как в DOSе он хочет, ИМХО.
...
Рейтинг: 0 / 0
Разморозить форму
    #39784289
asutp2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bk0010Писать как в DOSе он хочет, ИМХО.+1
...
Рейтинг: 0 / 0
Разморозить форму
    #39784398
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а вот зря лажаете человека

ИМХО: он дело говорит, событийная ориентация хороша только для несвязанных примитивов: нажал-получил
когда в программе нужна сценарная логика с кучей разветвлений с таким подходом приходится заводить состояния
а стейт-машины очень сложны в поддержке, по сравнению с прямым кодом

т.е. с введением событийно-ориентированного похода мы потеряли очень ёмкий пласт подходов к разработке и сами себе создаём проблемы на ровном месте

logone, правильный цикл для VCL вот такой:
Код: pascal
1.
2.
3.
4.
5.
  repeat
    Application.HandleMessage();
    if (Application.Terminated) then
      Abort();
  until ЕслиСвершилось;
...
Рейтинг: 0 / 0
Разморозить форму
    #39784401
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)т.е. с введением событийно-ориентированного похода мы потеряли очень ёмкий пласт подходов к разработке
С введением любой хорошей и прогрессивной технологии проходит какое-то время, люди забывают как хреново было до неё (плюс вырастают те, кто этого просто не застал) и начинается эдакое романтическое отношение к прошлому: мол, сейчас вот такие недостатки, а тогда было хорошо (забывая, что тогда были недостатки в десять раз больше).

Если очень грубо, то до введения событийно-ориентированного подхода автор и думать бы не стал о том, что пока система ждёт нажатия Enter - в ней можно "двигать окна и писать в edit". А если бы задумался - ему бы квалификации не хватило даже начать это реализовывать. Событийно-ориентированный подход дал ему возможность замахнуться на то, на что он раньше и претендовать не смел - но не отменил необходимость думать головой и не дал возможности писать полную хрень и надеяться на вменяемый результат.
...
Рейтинг: 0 / 0
Разморозить форму
    #39784406
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer,

не надо уходить в крайности
это никак не запрещает попутно обрабатывать любые нужные в данный конкретный момент события

он позволяет интуитивно понятно описывать "сценарий действий"

в C# используют и никто не страдает :-)

PS: фанатичный вгляд на идеологию очень часто закрывает нам красивые и элегантные решения
...
Рейтинг: 0 / 0
Разморозить форму
    #39784408
goldmi45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
logoneVizit0r,

Я попробовал потоками
Я тоже сначала подумал, что мне нужно просто чтобы эта функция выполнялась в отдельном потоке
Я сделал так -
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
while ... do
  ...
  TThread.CreateAnonymousThread(
    procedure
    var
      msg: tagMSG;
    begin
      repeat
        PeekMessage(msg, 0, 0, 0);
      until (msg.message = WM_KEYDOWN) and (msg.wParam = 13);
    end).Start;
  ...
end;


Но получилось так, что теперь этот код в этом месте ждёт нажатия энтер в отдельном потоке, а цикл то конечно продолжается!
Я не понимаю как здесь использовать потоки, пожалуйста подскажи
Вам нужно весь цикл засунуть в поток, а не ожидание нажатия на Enter. И при наступлении момента, когда нужно получить от главного потока разрешение на продолжение, начать процесс синхронизации с главным потоком, послать сообщение главному потоку (к примеру) и ждать. Ожидание можно сделать через Event, к примеру.
...
Рейтинг: 0 / 0
Разморозить форму
    #39784414
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)т.е. с введением событийно-ориентированного похода мы потеряли очень ёмкий пласт подходов к разработке

нет конечно. Никто ничего не терял.

пишите консольное приложение без всяких там некошерных PeekMessage, разве кто запрещает?

или Direct-3D приложение
...
Рейтинг: 0 / 0
Разморозить форму
    #39784432
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

конечно, зачем пользователю формочка :-)
только консоль...
...
Рейтинг: 0 / 0
Разморозить форму
    #39784472
bk0010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerЕсли очень грубо, то до введения событийно-ориентированного подхода автор и думать бы не стал о том, что пока система ждёт нажатия Enter - в ней можно "двигать окна и писать в edit".Ну почему же, в Clipper-е, помнится, с помощью @ say @ get read и menu to создавали формочки типа виндовых (писать в edit, нажимать кнопочки, окна были редкостью, в основном в turbo vision - разрешение 80x25 не способствовало), но с жестким следованием кода. Вот народ при переходе и мучился. Но пока писал эмулятор этого подхода под Windows, привыкал к event-driven programming.
...
Рейтинг: 0 / 0
Разморозить форму
    #39784624
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bk0010в turbo vision - разрешение 80x25 не способствовало), но с жестким следованием кодаВ Turbo Vision уже была событийная модель
...
Рейтинг: 0 / 0
Разморозить форму
    #39784632
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
80x50

или даже 120xNN

когда появился Turbo Vision уже давно CGA и MDA стали историей
...
Рейтинг: 0 / 0
Разморозить форму
    #39784636
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)конечно, зачем пользователю формочка :-)
только консоль...

то есть ты говоришь, что "потерянный ёмкий пласт" пользователю не нужен???

а почему тебя это волнует? пусть жрёт что дают!


bk0010Ну почему же, в Clipper-е, помнится, с помощью @ say @ get read и menu to создавали формочки типа виндовых

точне, в dBASE, а Клиппер - это клон клона.
да и сам dBase скорее всего взял это с мейнфреймов, видел я как в туристических фирмах авиа-билеты продавали в 2000-x - чуть ли на BBS-интерфейс, хотя и по интернету.

.....а для виндовых это можно сделать, как цепочку модальных окон
...
Рейтинг: 0 / 0
Разморозить форму
    #39784637
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ещё вариант - старые добрые Мастера/Wizards
...
Рейтинг: 0 / 0
Разморозить форму
    #39784662
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochто есть ты говоришь, что "потерянный ёмкий пласт" пользователю не нужен???
а почему тебя это волнует? пусть жрёт что дают!это ты так сказал - 21829027

наверное потому что я за это деньги получаю, пусть не напрямую, но ...
...
Рейтинг: 0 / 0
Разморозить форму
    #39784665
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan),

я сказал, что никто "ёмкий пласт" не терял, что он как был - так и остался, весь целиком, на 100% - бери и пользуйся

про пользователя я вообще ни слова не говорил, пока ты не начал 21829080

и именно ты сказал, что "ёмким пластом" ты пользоваться не хочешь, потому что пользователям это не нравится

можешь, но не хочешь

т.е. ничего не потеряно, как я с самог оначала и говорил
...
Рейтинг: 0 / 0
Разморозить форму
    #39784671
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> когда в программе нужна сценарная логика

на вскидку:

* банкоматы
* голосовое меню в телефонах, "если вы ъхотите сварить кофе - нажмите 1"
* USSD

"пласт потерян"? да нет, живее всех живых
...
Рейтинг: 0 / 0
Разморозить форму
    #39784674
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochkealon(Ruslan),

я сказал, что никто "ёмкий пласт" не терял, что он как был - так и остался, весь целиком, на 100% - бери и пользуйся

про пользователя я вообще ни слова не говорил, пока ты не начал 21829080
в литературе этот приём называется Гротеск
...
Рейтинг: 0 / 0
Разморозить форму
    #39784850
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan),

так ты тут литературу пишешь? я думал ты на технический форум пришёл.
...
Рейтинг: 0 / 0
Разморозить форму
    #39784915
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochkealon(Ruslan),

так ты тут литературу пишешь? я думал ты на технический форум пришёл.этот литературный приём использован, что бы показать абсурдность Arioch пишите консольное приложение без всяких там некошерных PeekMessage, разве кто запрещает? а не решить проблему

"пусть едят пирожные.." (С)...
...
Рейтинг: 0 / 0
Разморозить форму
    #39785018
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)"пусть едят пирожные.." (С)...

Хороший пример. На редкость уместный.

Эта фраза во-первых не была сказана Антуанеттой, во вторых вероятнее всего была не фразой, а королевским указом, причём очень полезным для бедняков.
Т.е. использование этой фразы в обычном смысле - передёргивание карт.


Теперь возвращаемся к якобы существующей проблеме:
kealon(Ruslan)мы потеряли очень ёмкий пласт подходов к разработке

В очередной раз повторяю, в озвученнйо проблеме речь про "потеряли" и про "мы, программисты"

kealon(Ruslan)конечно, зачем пользователю формочка :-)

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

Что пользователи некоторых программистов (а не сами программисты) могут, но не хотят (а вовсе не "хотят, но не могут" = "потеряли") "использовать пласт".

Ariochа почему тебя это волнует? пусть жрёт что дают!

А вот тут был "литературный приём" - сарказм.
С целью подчеркнуть передёргивание.
Помочь тебе начать много и часто говорить о том, что вообще НЕ ЯВЛЯЕТСЯ частью озвученной проблеммы "программисты потеряли пласты", а появилось только при подмене изначальной проблемы на постороннюю.
...
Рейтинг: 0 / 0
Разморозить форму
    #39785045
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

даже и не знаю зачем программистам интересно как делать программы проще и надёжнее, вообще нелогичные создания - сами себе вакансии уменьшают
...
Рейтинг: 0 / 0
Разморозить форму
    #39785067
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а это уже ТРЕТЬЯ проблема, не связанная ни с одной из двух предыдущих

P.S. ....и эти люди говорят за литературу.
kealon(Ruslan)зачем программистам интересно
...
Рейтинг: 0 / 0
Разморозить форму
    #39785147
loww
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А остановиться должен цикл до тех пор пока не будет нажата клавиша ентер
Т.е. цикл состоит из двух частей? До нажатия и после. Создаем поток выполняем до, на нажатие Enter поднимаем событие (event), в потоке ждем событие с помощью WaitForSingleObject и выполняем после. Синхронизацию через Synchronize или просто Send/PostMessage.
...
Рейтинг: 0 / 0
42 сообщений из 42, показаны все 2 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Разморозить форму
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]