Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi 2

Модерирует : ShIvADeSt

ShIvADeSt (22-03-2007 02:18): http://forum.ru-board.com/topic.cgi?forum=33&topic=8142  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100

   

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Продолжение темы http://forum.ru-board.com/topic.cgi?forum=33&topic=3647&start=2020#lt
Внимание, все большие куски кода (более 5 строк) оформляем в тег [more] дабы уменьшить размер поста.

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 01:52 20-04-2006 | Исправлено: ShIvADeSt, 02:02 30-06-2006
STEEL



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Выложите плиз исходничок готовой программки по работе с компортом? Имеется у меня класс, брал на sources.ru в разделе Delphi, не догоняю как непрерывно слушать порт. Есть функция ReadString, которая возвращает то что лежит в буфере порта, если воткнуть её в цикл, приложение вешается. На Си под юниксом я создавал отдельный поток (нить) и непрерывный цикл. Нужно постоянно слушать порт,  к которому подключен сканер штрихкодов, он плюётся обычным набором цифр и латиницей.

Всего записей: 2293 | Зарегистр. 06-01-2002 | Отправлено: 20:22 03-06-2006 | Исправлено: STEEL, 20:25 03-06-2006
nehalem



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Мне программно надо узнать включен (checked) ли CheckBox у другой программы, зная хэндл этого чек бокса. Можно ли ??

Всего записей: 1208 | Зарегистр. 07-02-2003 | Отправлено: 21:27 03-06-2006
Butcher



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
STEEL
поставь в цикле Sleep() с каким-нибудь промежутком времени, хотя бы 100 мс - уже вешаться не будет.

Всего записей: 41 | Зарегистр. 12-02-2003 | Отправлено: 22:43 03-06-2006
Kostya

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А как выбрать в запросе в этом все значения даты. К примеру *.06.2006 как? Какую маску надо указывать?

Всего записей: 194 | Зарегистр. 18-03-2003 | Отправлено: 22:48 03-06-2006
kkRiz

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
Есть функция ReadString, которая возвращает то что лежит в буфере порта, если воткнуть её в цикл, приложение вешается.

1. Кто мешает сделать тред и в нём читать с ком порта в цикле? Дельфя и винда в этом отличий никаких не имеют.
2. Нужно воткнуть application.processmessages в цикл.

Всего записей: 206 | Зарегистр. 11-05-2006 | Отправлено: 23:02 03-06-2006
EZH



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Kostya
Ну так задай последнее чило предыдущего месяца и первое число след месяца. Или что-то типа MONTH(Date)=6 AND YEAR(Date)=2006.

Всего записей: 1738 | Зарегистр. 02-09-2004 | Отправлено: 23:04 03-06-2006
STEEL



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всё равно приложение подвисает, что не так

Код:
 
procedure TMyThread.Execute;
begin
  while not Terminated do
    Synchronize(DoWork);
end;
 
procedure TMyThread.DoWork;
var i: Integer; buf: String;
begin
  for i := 0 to 10000 do
  begin
    Application.ProcessMessages;
    Form1.cp.ReadString(buf);
    Form1.SystemEvent(buf);
    Sleep(1000);
end;
 

Всего записей: 2293 | Зарегистр. 06-01-2002 | Отправлено: 11:42 04-06-2006
kkRiz

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Хм, во-первых, processmessages нужен только если выполнение в основном цикле программы, как я понимаю. Т.к. когда тред, то обработкой сообщений программе будет заниматься основной поток приложения. Почему зависает когда идёт обработка в треде - понимаю с трудом, тем более если засунут слип. МОжет быть попробовать поиграть с приоритетом треда? И убрать слип нафиг. И ещё глянуть в саму реализацию Readstring. Может там затык.

Всего записей: 206 | Зарегистр. 11-05-2006 | Отправлено: 11:59 04-06-2006
FireZone

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kkRiz

Цитата:
Почему зависает когда идёт обработка в треде - понимаю с трудом, тем более если засунут слип.

Потому что DoWork выполняется в основном потоке, поскольку вызывается через Synchronize.
 
Добавлено:
STEEL
Если хочешь использовать компонент для работы с портом, то забей на потоки. Самый простой выход в твоём случае (т.е., с компонентом) - использовать таймер с интервалом эдак 100 мс. В обработчике OnTimer и делай этот самый
Код:
cp.ReadString(buf);

А с потоками имеет смысл напрягаться только если ты будешь работать с портом на голом API.

Всего записей: 293 | Зарегистр. 28-01-2004 | Отправлено: 15:06 04-06-2006
EVD



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
STEEL
У тебя код выполняется в главном потоке, так что тебе поток и не нужен.
 
Если надо с потоком, то надо что-то типа этого:
 

Код:
 
 type
   TMyThread = class
   private
       buf: string;
       ComPort: TComPortComponent;
   ............................................
   ............................................  
   end;
 
   procedure TMyThread.Execute;  
   begin  
   while not Terminated do  
      ComPort.ReadString(buf);
      Synchronize(DoWork);  
   end;  
 
procedure TMyThread.DoWork;  
begin  
    Form1.SystemEvent(buf);  
end;  
 
   
 

 
И каким компонентом пользуешся, многие компоненты и так реализованы через потоки.

Всего записей: 123 | Зарегистр. 22-12-2005 | Отправлено: 10:19 05-06-2006
ArtemiyUO

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ребята, посоветуйте пожалуйста компоненты для доступа к secure ftp connection из Делфи, максимально надежные и простые.

Всего записей: 539 | Зарегистр. 12-12-2005 | Отправлено: 15:08 05-06-2006
RostY



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ArtemiyUO
INDY не пробовал ?

Всего записей: 387 | Зарегистр. 11-01-2006 | Отправлено: 17:56 05-06-2006
ArtemiyUO

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А каким компонентом иди воспользоваться. У меня вроде 10 стоит.

Всего записей: 539 | Зарегистр. 12-12-2005 | Отправлено: 18:05 05-06-2006
EVD



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ArtemiyUO
Есть еще библиотека Synapse. Она не такая навороченная, как Indy, но зато проще

Всего записей: 123 | Зарегистр. 22-12-2005 | Отправлено: 18:14 05-06-2006
reenoip



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
cxGrid позволяет мультиселект строк. Как можно скопом удалить выбранные юзером (ctrl + click) строки, причём удалить не из грида, а из ADOTable? Грид после удаления просто обновлю, это же не суть...

Всего записей: 1768 | Зарегистр. 10-03-2006 | Отправлено: 18:47 05-06-2006
Butcher



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ArtemiyUO
TIdFtp попробуй

Всего записей: 41 | Зарегистр. 12-02-2003 | Отправлено: 18:50 05-06-2006
reenoip



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Оп-па, супер!
 
cxGridDBTableView1.DataController.DeleteSelection;
 
Обожаю cxGrid )))

Всего записей: 1768 | Зарегистр. 10-03-2006 | Отправлено: 18:54 05-06-2006
Butcher



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
reenoip
Как раз для тебя примерчик:
procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
begin
  if DBGrid1.SelectedRows.Count>0 then
    with DBGrid1.DataSource.DataSet do
      for i:=0 to DBGrid1.SelectedRows.Count-1 do begin
        GotoBookmark(pointer(DBGrid1.SelectedRows.Items[i]));
        Delete;
      end;
end;

Всего записей: 41 | Зарегистр. 12-02-2003 | Отправлено: 18:54 05-06-2006 | Исправлено: Butcher, 18:56 05-06-2006
reenoip



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Butcher, спасибо
Но cxGridDBTableView1.DataController.DeleteSelection; действительно здорово работает

Всего записей: 1768 | Зарегистр. 10-03-2006 | Отправлено: 20:48 05-06-2006
George_Lucky



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вопрос, может не совсем корректный
Стоит ли перейти с D7 на D2006? Если кто переводил свои проекты, подскажите каких проблем стоит ождать?

Всего записей: 413 | Зарегистр. 12-09-2002 | Отправлено: 09:39 06-06-2006
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi 2
ShIvADeSt (22-03-2007 02:18): http://forum.ru-board.com/topic.cgi?forum=33&topic=8142


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru