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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Sergey_Demchuk
    Что именно вам пишет компилятор? И какая у вас версия делфей? Данный код отлично компилируется на DelphiXE.

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 11:08 08-02-2011
    Sergey_Demchuk



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    У меня 7-й дельф.
    Выдает
    [Error]: Incompatible types
     
    Добавлено:
    У меня 7-й дельф.
    Выдает
    [Error]: Incompatible types

    Всего записей: 3551 | Зарегистр. 16-12-2002 | Отправлено: 14:24 08-02-2011
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Sergey_Demchuk
    И на какую строку указывает? Покажите свой код.

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 15:41 08-02-2011
    Sergey_Demchuk



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Вот на эту строку и указывает как раз
    ...
     if ((Buf[ii]=#$00) and (Buf[ii+1]=#$00) and (Buf[ii+2]=#$FA)) then
    ...
     
    Добавлено:
    Я когда определял переменную вот так
    Buf: array[0..255] of Char;
    ошибки нет.
    Сейчас она определена Buf: array[0..255] of Byte;
    Получаю  
    [Error] Aktualnost.dpr(208): Incompatible types

    Всего записей: 3551 | Зарегистр. 16-12-2002 | Отправлено: 17:13 08-02-2011
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Sergey_Demchuk
    Уберите символы "#", они служат для обозначения букв (Char), а вы теперь работаете с числами (Byte).

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 17:33 08-02-2011
    Cryogen2003



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Добрый день.
    Есть маленькая проблема, получаю данные от некоторого веб-сервиса в компании. Сервис написан в PHP и отдается строка "сжатая" с помощью serialize. Есть в дельфе аналог unserialize или может быть у кого-то уже есть написанный аналог unserialize?

    ----------
    Холодильники мы

    Всего записей: 745 | Зарегистр. 08-12-2004 | Отправлено: 12:34 09-02-2011
    greenpc

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Cryogen2003
    через
    1. TStringList - разделитель  
    2. "регулярка"
    или кусочек ответа в студию
    ps: Sharp Serialization Library

    Всего записей: 401 | Зарегистр. 18-04-2003 | Отправлено: 14:13 09-02-2011 | Исправлено: greenpc, 14:43 09-02-2011
    Cryogen2003



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    greenpc
    да, сейчас как раз перевожу это вариант с си шарпа

    ----------
    Холодильники мы

    Всего записей: 745 | Зарегистр. 08-12-2004 | Отправлено: 14:46 09-02-2011
    Cryogen2003



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Переписал этот вариант с си шарпа, вроде работает )))))
    Если надо, то пользуйтесь
     
    uDeSerialize.pas

    ----------
    Холодильники мы

    Всего записей: 745 | Зарегистр. 08-12-2004 | Отправлено: 11:42 10-02-2011
    JohnSilver182



    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Кто нибудь  делал сабж , типа :  
    Спросить у  гугла  как пишется правильно слово  
    типа  ввожу :   Осперин  а  мне  не МЕГА страница а ТЕКСТ
     
    =======
    Аспирин
    =======

    Всего записей: 829 | Зарегистр. 03-06-2009 | Отправлено: 13:23 10-02-2011 | Исправлено: JohnSilver182, 13:47 10-02-2011
    Cryogen2003



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    JohnSilver182
    А если попробовать что-нибудь типа Addict или ExpressSpellChecker из пакета девок. Не подойдет?

    ----------
    Холодильники мы

    Всего записей: 745 | Зарегистр. 08-12-2004 | Отправлено: 13:52 10-02-2011
    JohnSilver182



    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Cryogen2003
    Очень  интересно  ,  правда я думаю с мега словарями YANDEX  не сравнить ...

    Всего записей: 829 | Зарегистр. 03-06-2009 | Отправлено: 14:02 10-02-2011 | Исправлено: JohnSilver182, 14:03 10-02-2011
    Cryogen2003



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Ну да, с их словарями не сравнить, но думаю на первое время подойдет. У меня в моих проектах (где используются девки), практически везде добавляется проверка орфографии. По крайней мере перестали появляться в базе 10 ошибок в одном коротеньком предложении.

    ----------
    Холодильники мы

    Всего записей: 745 | Зарегистр. 08-12-2004 | Отправлено: 14:13 10-02-2011
    Sampron

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите как в этом Подробнее... компоненте заставить работать свойство Hint/ShowHint ?

    Всего записей: 563 | Зарегистр. 06-01-2007 | Отправлено: 19:46 12-02-2011 | Исправлено: Sampron, 19:48 12-02-2011
    Sergey_Demchuk



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

    Код:
    Buf: array[0..255] of Byte;  
    ...  
      FillMemory(@Buf, SizeOf(Buf), 0);  
      reg:=TRegistry.Create;  
      reg.RootKey:=HKEY_LOCAL_MACHINE;  
      reg.OpenKey('SYSTEM\CurrentControlSet\Data', false);  
      REG.ReadBinaryData('Data', Buf, SizeOf(Buf));  
      ii:=1;  
      if ((Buf[ii]=$00) and (Buf[ii+1]=$d3)) then  
      begin  
        TmpDate := EncodeDate(2000 + Buf[ii+5], Buf[ii+4], Buf[ii+3]);  
     
        TmpDate := IncDay(TmpDate, 50);  
     
        Buf[ii+3] := YearOf(TmpDate) - 2000;  
        Buf[ii+2] := MonthOf(TmpDate);  
        Buf[ii+4] := DayOf(TmpDate);  
      end;

     
    Вот в этой строке пока не заработало, выдает ошибку о неправильных аргументах для функции
       TmpDate := EncodeDate(2000 + Buf[ii+5], Buf[ii+4], Buf[ii+3])
    Не работает она, вызывая исключение EconvertError
    Не нравятся значения ad,06,97 которые означают число, месяц и год соответственно (23декабря2009).

    Всего записей: 3551 | Зарегистр. 16-12-2002 | Отправлено: 01:16 14-02-2011
    greenpc

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

    Код:
    procedure TForm1.btn5Click(Sender: TObject);
    var
      TmpDate: TDateTime;
      ii: Integer;
    Buf: array[0..255] of Byte;
    begin
      FillMemory(@Buf, SizeOf(Buf), 0);
       ii:=1;
        Buf[ii+5] :=5;
        Buf[ii+4] :=3;
        Buf[ii+3] :=1;
      begin
        TmpDate := EncodeDate(2000 + Buf[ii+5], Buf[ii+4], Buf[ii+3]);
     
        TmpDate := IncDay(TmpDate, 50);
        ShowMessage(DateToStr(TmpDate));
        Buf[ii+3] := YearOf(TmpDate) - 2000;
        Buf[ii+2] := MonthOf(TmpDate);
        Buf[ii+4] := DayOf(TmpDate);
      end;
    end;
     
    ps: а Вы переведите число ad в десятичное удивитесь чему равно (173)

    Всего записей: 401 | Зарегистр. 18-04-2003 | Отправлено: 11:23 14-02-2011 | Исправлено: greenpc, 11:25 14-02-2011
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Sergey_Demchuk
    Посмотрите справку по этой функции. Там параметры идут в обратном порядке: сначала год, потом месяц и день. Если вы в параметр день передадите число больше 31 (или 30, 29, 28 - в зависимости от месяца и года) то конечно получите ошибку.
    И еще хорошо подумайте сколько добавлять к году, это полностью зависит от того, как он у вас записывается в реестр.

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 11:45 14-02-2011 | Исправлено: Frodo_Torbins, 11:47 14-02-2011
    Sergey_Demchuk



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Немного перемудрил я что то. Вытягивать дату из реестра мне и не надо. А надо ее туда наоборот занести значение от текущей даты плюс 50 дней.  
     

    Код:
    Buf: array[0..255] of Byte;  
    ...  
       
     Temp:=DateToStr(Date);
     
         AktDay:= Copy (Temp, 1, Pos('.',Temp)-1);
        Temp:= StringReplace (Temp, AktDay + '.','',[rfIgnoreCase]);
        AktMonth:= Copy (Temp, 1, Pos('.',Temp)-1);
        Temp:= StringReplace (Temp, AktMonth + '.','',[rfIgnoreCase]);
        AktYear:= Temp;
    FillMemory(@Buf, SizeOf(Buf), 0);  
      reg:=TRegistry.Create;  
      reg.RootKey:=HKEY_LOCAL_MACHINE;  
      reg.OpenKey('SYSTEM\CurrentControlSet\Data', false);  
      REG.ReadBinaryData('Data', Buf, SizeOf(Buf));  
      ii:=1;  
      if ((Buf[ii]=$00) and (Buf[ii+1]=$d3)) then  
      begin  
    TmpDate := EncodeDate(StrToInt(AktYear), StrToInt(AktMonth), StrToInt(AktDay));  
       
        TmpDate := IncDay(TmpDate, 50);  
       
        Buf[ii+3] := YearOf(TmpDate) - 2000;  
        Buf[ii+2] := MonthOf(TmpDate);  
        Buf[ii+4] := DayOf(TmpDate);  
     
     
      end;

    Проблема в том, что значения в реестре получаются неправильные. Причина видимо в том, что его все таки видимо заносить не напрямую.
    Как писал несколькими страницами ранее, формула есть для Екселя.
     

    Цитата:
    Клетка А1           =ДЕС.В.ДВ(250;8)     результат в клетке 11111010  
    Клетка А2           =ДЕС.В.ДВ(ДЕНЬ("27.11.2011");8)     результат в клетке  00010111  
    Клетка А3           ==ПРАВСИМВ(СУММПРОИЗВ(НЕ(ПСТР(A1;СТОЛБЕЦ(СМЕЩ($A$1;0;0;1;ДЛСТР(A1)));1)=(ПСТР(A2;СТОЛБЕЦ(СМЕЩ($A$2;0;0;1;ДЛСТР(A1)));1)))*1;10^(ДЛСТР(A1)-СТОЛБЕЦ(СМЕЩ($A$1;0;0;1;ДЛСТР(A1)))))+10^ДЛСТР(A1);ДЛСТР(A1))       результат 11101101  
     
    А вот этот результат в последней клетке мне уже просто останется преобразовать в HEX, это просто. А вот эту формулу пока немогу правильно записать на паскале.  
     
     
    Цитата:=ДЕС.В.ДВ(250;8)  
     
     
    250 это Маска XOR  
     
    Добавлено:  
    Ячейка А1 дополняет выбранные целочисленные биты ячейки А2. В екселе конечно такой функции нету,  
    Я так понимаю, что нужно написать что то типа  
    11111010 XOR 00010111 и в результате должно быть 11101101

     
    Я думал что прокатит     Buf[ii+5] := (YearOf(TmpDate)-2000) xor 250 но результат тоже неверен. Сначала надо переводить в двоичный вот это (YearOf(TmpDate)-2000) и вот это (250), затем делать между ними XOR и обратно переводить в HEX. Тогда результат получается тот что надо. Я это сделал, но все переменные у меня в текстовом виде и как такое значение занести затем в реестр в бинарном виде, у меня не получилось

    Всего записей: 3551 | Зарегистр. 16-12-2002 | Отправлено: 13:44 14-02-2011 | Исправлено: Sergey_Demchuk, 13:54 14-02-2011
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Sergey_Demchuk
    Текущая дата плюс 50 дней: "TmpDate := IncDay(Date, 50);".
    Хотелось бы посмотреть конечное значение в реестре и дату, которую оно представляет. А то мне кажется, что вы путаете местами день и год. Вы вообще знаете как в переводе с английского будет "year, day"?

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 14:32 14-02-2011
    RuPurple



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    У меня возникла проблема с функцией ShellExecute.
    Некоторое время назад сделал простенькую программку для тестирования. Эта программа при запуске (по процедуре FormCreate) загружает несколько bmp-файлов из директории interface (находится прямо рядом с Project1.exe, в одной папке то есть) следующим образом:

    Код:
     
    Bitmap1 := TBitmap.Create;
    Bitmap1.LoadFromFile('.\interface\logo.bmp');
     

    и так далее несколько файлов. В общем сама программа работает на ура, к ней претензий нет.
    Теперь недавно сделал другую программку, которая должна с помощью функции ShellExecute запускать первую:

    Код:
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    ShellExecute(Handle,nil,PChar('C:\Shell\TEST\Project1.exe'),nil,nil,SW_SHOW);
    end;
     

    Первая программа запускается, но сразу же выдает такую ошибку:

    Цитата:
    Cannot open file "C:\Shell\interface\logo.bmp". Системе не удается найти указанный путь.

    и так далее со всеми bmp-файлами. Это в общем-то и понятно, так как bmp-файлы находятся в директории C:\Shell\TEST\interface, а не в C:\Shell\interface\. Но почему программа для тестирования, которая сама по себе работает нормально, при запуске с помощью ShellExecute начинает искать свои файлы в той папке, где находятся программа для запуска ShellExecute, а не в своей собственной?

    Всего записей: 724 | Зарегистр. 21-02-2010 | Отправлено: 16:14 14-02-2011 | Исправлено: RuPurple, 16:18 14-02-2011
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 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