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

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

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

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125

Открыть новую тему     Написать ответ в эту тему

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Продолжение темы Вопросы по Delphi (до версии 2009) - часть 5

Познаем сами, помогаем другим...
Обсуждаем вопросы, не связанные с юникоидными версиями Delphi - для этого есть соответствующая тема (см. ссылки ниже).


 
Правила топика:
    Прежде чем спрашивать:
  1. Желательно изучить вопрос, попытаться найти ответ в прилагаемых мануалах, хелпах и анализируя исходники.
  2. Выполнить поиск по топику (открыть "Версия для печати" и поискать ответ там).
  3. Применить фильтр по разделу "Прикладное программирование". Ответы на многие старые вопросы могли быть даны в отдельных темах.
  4. Продумайте вопрос. На поверхностные вопросы вы получите поверхностные ответы, или вообще ответов не получите.
  5. Желательно указывать версии используемого компилятора и операционной системы.
    Прежде чем отвечать:
  1. Если не можете помочь, не мешайте.
  2. Если уж вы отвечаете на вопрос, давайте ответ по сути.
  3. Если вы не уверены, так и говорите! Ошибочный, но авторитетно звучащий ответ хуже, чем отсутствие ответа.
  4. Задавайте дополнительные вопросы, чтобы получить больше информации.
  • Отсутствие ответа не равносильно игнорированию - иногда участники форума просто не знают ответ. Повторная посылка вопроса не приветствуется. Посты типа "неужели никто не знает ответа..." или "может мне все-таки кто-нибудь ответит" недопустимы.  
  • Все большие куски кода (более 5 строк) оформляем в тег [morе] дабы уменьшить размер поста. FAQ по тегу [morе].


    Некоторые "родственные" топики:
     
  • Вопросы по Delphi (версии 2009-2010 Weaver)
  • Вопросы по компонентам для Delphi, C++ Builder
  • Использование DevExpress
  • Вопросы по Ehlib
  • Компоненты и утилиты для Delphi/BCB/FreePascal/Lazarus - только Open Source
  • Коммерческие компоненты и утилиты для Delphi/BCB
  • кабак программистов :)
     
    См. также: Некоторые полезные ресурсы о Delphi
     
    И старайтесь, чтобы ваш код не попал сюда :)

  • Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 05:13 19-05-2010 | Исправлено: akaGM, 02:33 15-07-2020
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    OOD
    wasilissk указал правильное направление, но вместо WaitForSingleObject нужно использовать WaitForInputIdle.

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 22:22 20-12-2011
    YuriyRR



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

    Цитата:
    гонять поиск окна по заголовку окна пока оно не появиться?

    Думаю что так и есть я бы еще вставил в цикл sleep() и ограничил кол-во циклов типа таймаут
     
    Добавлено:
    Вариант с  WaitForInputIdle мне тоже очень нравится. Напиши как он пройдет с аутглюком.

    Всего записей: 516 | Зарегистр. 07-06-2007 | Отправлено: 03:07 21-12-2011
    wasilissk

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Frodo_Torbins
    Да, конечно, писал по памяти, там у меня еще CreateProcess хэндл возвращает ну ладно, в качестве тегов сгодится...

    Всего записей: 293 | Зарегистр. 25-12-2006 | Отправлено: 06:35 21-12-2011
    OOD

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

    Цитата:
    Напиши как он пройдет с аутглюком

    что то не очень

    Код:
     
    procedure TForm1.FormCreate(Sender: TObject);
    var h: HWND;
    PI: TProcessInformation;
    SI: TStartupInfo;
     
    begin
    FillChar(SI, SizeOf(SI), 0);
      SI.cb := SizeOf(SI);
     
      if CreateProcess(nil, 'C:\Program Files\Microsoft Office\Office14\OUTLOOK.exe', nil, nil, False, 0, nil, nil, SI,
        PI) then
      begin
        WaitForInputIdle(PI.hProcess, INFINITE);
        H := FindWindow(nil, 'Outlook сегодня - Microsoft Outlook');
        if SetForegroundWindow(H) then
    showMessage('test');
      end
      else
    showMessage('beda');
    end;
     

     

    Всего записей: 3379 | Зарегистр. 20-05-2006 | Отправлено: 11:30 21-12-2011
    ShIvADeSt



    Moderator
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    OOD
    Что именно не работает?  
    На мой взгляд (просто уже сталкивался с таким поведением) проблема в том, что окно не выходит на передний план, то есть данный кусок

    Цитата:
    if SetForegroundWindow(H) then

    как будто не отрабатывает. Посмотри в интернете как сделать force foreground window, так как по умолчанию при использовании этой функции начиная с винХР вроде бы, окно начинает просто мигать в таскбаре.
    Если не в этом дело - то уточни

    ----------
    И создал Бог женщину... Существо получилось злобное, но забавное...

    Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 11:51 21-12-2011
    OOD

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ShIvADeSt
    Не ждет пока запуститься OUTLOOK, сообщение test выскакивает только , если запустить OUTLOOK и подождать пока он запустить,  а WaitForInputIdle не ждет пока запуститься OUTLOOK и появиться окно Outlook сегодня - Microsoft Outlook.

    Всего записей: 3379 | Зарегистр. 20-05-2006 | Отправлено: 12:10 21-12-2011
    wasilissk

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    OOD
    У WaitForInputIdle есть возвращаемое значение и еще есть SysErrorMessage(GetLastError). А сообщение test по коду у вас выводится если отработает SetForegroundWindow, а не WaitForInputIdle.

    Всего записей: 293 | Зарегистр. 25-12-2006 | Отправлено: 12:19 21-12-2011
    OOD

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    в общем не понял с циклом поиска окна , поставил тупо таймер а него поиск окна :

    Код:
     
    procedure TForm1.Timer1Timer(Sender: TObject);
    var h: HWND;
    begin
     h:= FindWindow(nil, 'Outlook сегодня - Microsoft Outlook');  
      if h<>0 then                                
      begin
        PostMessage(h, WM_SYSCOMMAND, SC_MINIMIZE, 0);  
        timer1.Enabled:=false;
      end;
    end;
     

    Всего записей: 3379 | Зарегистр. 20-05-2006 | Отправлено: 12:51 21-12-2011
    DimitriusXZ

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Нужен компонент для расширения оболочки Windows XP (Проводника) или пример.
    Подскажите что-нибудь по этому вопросу.

    Всего записей: 831 | Зарегистр. 17-01-2010 | Отправлено: 02:43 03-01-2012
    alfaservice



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Нужна помощь, совет... есть текстовый файл структура такая:
     

    Код:
     
    From: имя номер                        
    Date: 06 Dec 2009 15:16:38                        
    Text:  
     
    To: имя номер                        
    Date: 06 Dec 2009 15:16:38                        
    Text:  
     

     
    разделено пустыми строками. Нужно перегнать все это дело в базу, упорядочить вообщем инфу, так как номера есть одинаковые. Как вариант хотел попробовать запихнуть в массив так:
     

    Код:
     
    for j := 1 to s.Count - 1 do
       begin
    if s.Strings[j]='#' then  
    begin
    Text[h]:=s.Strings[j+1];  
    Text1[h]:=s.Strings[j+2];
    Text2[h]:=s.Strings[j+3];
    inc(h);
     

     
    А потом из массива раскидать по таблице. Но но в данном коде идет поиск начала нового блока по разделителю # а у меня пустая строка.  

    Всего записей: 184 | Зарегистр. 12-01-2007 | Отправлено: 23:33 03-01-2012 | Исправлено: alfaservice, 23:35 03-01-2012
    Corsairs

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    alfaservice
    Если длина текста в строке
    Цитата:
    Text:
    не превышает ограничения типа string - то не вижу особых проблем.
    Если структура файла именно такова, как описано (т.е. три строки инфы, пустая строка, три строки инфы, пустая строка) - то можно просто в цикле присваивать значения трем элементам, и пропускать четвертый (т.е. пустую строку)
    Если пустая строка может быть не одна - тогда можно использовать код выше, только вместо
    Код:
    if s.Strings[j]='#' then
    используем
    Код:
    if s.Strings[j]='' then

    Всего записей: 569 | Зарегистр. 30-06-2006 | Отправлено: 02:06 04-01-2012
    ShIvADeSt



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

    Цитата:
    if s.Strings[j]='' then

    лучше заменить на  
    if Trim(s.Strings[j])='' then
    это убережет от пробелов и символов перевода каретки и тп.


    ----------
    И создал Бог женщину... Существо получилось злобное, но забавное...

    Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 06:24 04-01-2012
    085



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    запросы с переменной в селекте невозможны? Например
    SELECT :var1  FROM  table WHERE

    Всего записей: 79 | Зарегистр. 17-09-2008 | Отправлено: 08:09 04-01-2012
    mmm_home



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

    Цитата:
    это убережет от пробелов и символов перевода каретки и тп.

    но если где-то в тексте попадется 2 пустые строки, то вся конструкция работать не будет
     
    alfaservice
    раз уж четких разделителей блоков нет, то наверное лучше  
    if (pos('from:',LowerCase(s.Strings[j])>0 or pos('to:',LowerCase(s.Strings[j])>0) then

    Всего записей: 52 | Зарегистр. 21-11-2009 | Отправлено: 08:36 04-01-2012
    exteris

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

    Всего записей: 382 | Зарегистр. 14-04-2003 | Отправлено: 10:15 04-01-2012
    alfaservice



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    mmm_home
    ShIvADeSt
    Corsairs
     
    Спасибо! Попробую... В данном случае в строке Text: находится текст смс сообщений.  
     
    И блоки действительно идут по три строки и между ними строго пустая строка одна.
     
    From:
    Date:
    Text
     
     

    Всего записей: 184 | Зарегистр. 12-01-2007 | Отправлено: 11:45 04-01-2012
    sammozg



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Люди добрые, не подскажите, а может кто и сталкивался с проблемой, почему TcpClient.Receiveln; укорачивает ответ до пустого байта, в смысле отправляется  7F FE 02 00 40 04 15 27, а приходит только 7F FE 02, просмотрел все, что только попадалось мне в Инете, нигде ничего про это не сказано.
    Сразу отвечу на несколько вопросов которые могут возникнуть: В порт приходит нужное, а вот в переменную записывается укороченное, CRLF пробывал ставить разные не помогло.  

    Всего записей: 90 | Зарегистр. 30-06-2011 | Отправлено: 13:56 06-01-2012
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    sammozg
    Код в студию.

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 14:26 06-01-2012
    sammozg



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    procedure TForm1.Button1Click(Sender: TObject);
    var
    m: string;
    begin
      TcpClient.Sendln(HexToStr(clienthex.Text));
      while TcpClient.WaitForData(1000) do m:=TcpClient.Receiveln;
      if m = '' then ShowMessage('нет ответа от сервера') else begin
      while m<>'' do
      begin
      ListBoxClient.Items.Add(StrToHex(m));
      label2.Caption:=m;
      m:=TcpClient.Receiveln;
      end;
    end;
    end;
    Вот код клиента

    Всего записей: 90 | Зарегистр. 30-06-2011 | Отправлено: 14:35 06-01-2012
    vivasem



    Newbie
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Помогите (напишите пример) с условием, нужно сделать проверку таким образом:
    if a<b (но разница между а и b больше 4000000000) then begin...
    Это часть функции для подсчета трафика с IPHLPAPI, дело в том что при достижении счетчика IPHLPAPI 4гб инфа обнуляется. Хочу написать счетчик циклов IPHLPAPI, но пока трафик не превысит 5мб после обнуления, счетчик циклов почемуто срабатывает.
     
    вот ламерский кусок описаного кода:
    begin
            trafbitin:=Table.Table[i].dwInOctets;
            trafbitout:=Table.Table[i].dwOutOctets;
              iii:=0;
              iii:=cardinal(Edit13.Text);
              Edit16.Text:=inttostr(trafbitin);
             if trafbitin<iii
             then
              begin
                kol:=strtoint(Edit14.Text);
                na:=strtoint('1');
                all:=kol+na;
                Edit14.Text:=inttostr(all);
                Edit13.Text:=('0');
                Edit13.Text:=inttostr(trafbitin);
              end;
           Edit2tr.Text:= ('In: '+BytesToFriendlyString(trafbitin));
           Edit3tr.Text:= ('Out: '+BytesToFriendlyString(trafbitout));
           Edit13.Text:=inttostr(trafbitin);
           end;
     
     а сама прога на diman.ho.ua

    Всего записей: 6 | Зарегистр. 23-08-2010 | Отправлено: 00:34 07-01-2012
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 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 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (до версии 2009) - часть 6


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru