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

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

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

ShIvADeSt (19-05-2010 05:14): Продолжаем тут http://forum.ru-board.com/topic.cgi?forum=33&topic=11215  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

ShIvADeSt



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

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

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

  • Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 02:09 28-06-2009 | Исправлено: psa1974, 12:00 02-02-2010
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    delover
    Цитата:
    Привожу пример подходящий допустим для маленького коллектива
    Вот собственно и различие, в королевстве считают, что так делать нельзя.
     
    Нечто странное пишете:
    Цитата:
    e := te.create
    raise e;
    e.free;  
    После raise обьект исключения ведь полностью в распоряжении RTL.
     
    Если же брать код:
    Код:
    Obj := TSomeClass.Create;
    StrToInt(Edit1.Text);
    ...
    Obj.Free;
    То StrToInt тут действительно может выдать исключение, после которого Obj.Free не выполнится. Так что логика в том вопросе гдето такая: если возникнет исключение в StrToInt, то ничего страшного, но память терять все равно не хорошо.
     
    Ramazan
    CreateThread не переключает менеджер памяти в многопоточный режим.
     
    Короче говоря квинтана придирается фактически к мелочам, но важным.

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 20:21 06-08-2009 | Исправлено: Frodo_Torbins, 20:33 06-08-2009
    delover

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Frodo_Torbins
    Различие... А что Вы имеете ввиду:

    Цитата:
    в королевстве считают, что так делать нельзя.  

    Они составляют тесты для программистов одиночек???  
    Если брать большой коллектив то мой пример неудачен, так как он просто зачёркивает все вопросы - если нормально криейт без тру то нормально и StrToInt и любой непечатный синтаксис. Пример не актуален и не уместен так как получается типа экзамена:
    - Что получится если мнимую единицу прибавить к не мнимой?
    - 1 + 1i
    - Правильно. (Тут же) А можно ли извлекать корень из отрицательного числа?
    - Да
    - Неправильно, так как Ваша неоднобокость противоречит нашей трёхсотнелетнедавной принципиальности, заключающейся в том, что если вы второкласник то ответите неправильно (вопрос 1) и если вы даже академик то тоже ответите неправильно (вопрос 2).
     
    В целом там есть очень интересные вопросики которые не могут непонравится. Однако если применять некоторые вопросы к тем многим программерам, которые разыскивая причину бага видят криейт без тру и воскликают "НУ ВСЁ ПРавильно - будет бага". То явно можно "по честному" схлыздить и забрать балл... Сами понимаете бочка мёда.

    Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 13:24 07-08-2009
    delover

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    зы
    немного подчистил для большей ясности.

    Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 22:51 07-08-2009
    asdnsd



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Что то странное.. пытаюсь определить версию Windows в Win7 следующим кодом:
     

    Код:
     
    function DetectWinVersion : TWinVersion;
    var
      OSVersionInfo : TOSVersionInfo;
    begin
      Result := wvUnknown;                      // Неизвестная версия ОС
      OSVersionInfo.dwOSVersionInfoSize := sizeof(TOSVersionInfo);
      if GetVersionEx(OSVersionInfo)
        then
          begin
            case OSVersionInfo.DwMajorVersion of
              3:  Result := wvNT3;              // Windows NT 3
              4:  case OSVersionInfo.DwMinorVersion of
                    0: if OSVersionInfo.dwPlatformId = VER_PLATFORM_WIN32_NT
                       then Result := wvNT4     // Windows NT 4
                       else Result := wv95;     // Windows 95
                    10: Result := wv98;         // Windows 98
                    90: Result := wvME;         // Windows ME
                  end;
              5:  case OSVersionInfo.DwMinorVersion of
                    0: Result := wvW2K;         // Windows 2000
                    1: Result := wvXP;          // Windows XP
                    2: Result := wv2003;        // Windows 2003
                  end;
              6:  case OSVersionInfo.dwMinorVersion of
                    0: Result := wvVista; // Windows Vista
                    1: Result := wvSeven; // Windows Seven
                  end;
            end;
          end;
    end;
     

     
    На выходе выдает WinXp т.е 5.1 а в winver стоит как и полагается 6.1. Совместимость с WinXP не стоит, версия Delphi 2007, в чем же косяк ?
     
    Мистика какая то, после очередной перекомпиляции определять стало правильно

    Всего записей: 447 | Зарегистр. 21-05-2007 | Отправлено: 23:11 07-08-2009 | Исправлено: asdnsd, 23:21 07-08-2009
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    delover
    Цитата:
    Они составляют тесты для программистов одиночек???
    Они составляют тесты основываясь на каком то своем личном опыте. Видимо натыкались на подобные баги.

    Цитата:
    если нормально криейт без тру
    А с тру это так что ли:
    Код:
      try
        Obj := TSomeClass.Create;
        // Операции с Obj
      finally
        Obj.Free;
      end;
    Но ведь тут как раз мы можем получить двойное освобождение обьекта, в случае возникновения исключения в конструкторе. Другое дело если конструктор как нибудь в try/except обернуть, и анализировать исключение. Но там вроде не про это вопрос был. Вообще по исключениям в королевстве хорошая статья была. А в квинтане про них вопросов маловато.

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 00:26 08-08-2009 | Исправлено: Frodo_Torbins, 00:27 08-08-2009
    delover

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

    Цитата:
    Другое дело если конструктор как нибудь в try/except обернуть

    Чуствую что мысль одна и та же у нас вертится . Думаю что не стоит уделять этому много своего личного внимания. Уверен что отличных вопросов на квинтане хватает, их просто завались. А те вопросы которые занимали ранее первые места и забирали все призы могут поделиться своим местом с другими вопросами. Если целью вопроса про самкласс было практическое знание конструкций исключений, то на эту тему можно спросить много. При этом необязательно называть утечкой памяти то что занимает много внимания пользователя не видевшего вообще как это написано. И так не хотелось бы забивать голову конвертациями в коде и смесями визуальных эффектов с понятием утечка...

    Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 21:13 09-08-2009
    JohnSilver182



    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Hi  
     
    А как  выполнить правильно копирование ?  
    Есть Xcopy , но а  если  в Sourse или Destination куча пробелов ??
     

    Цитата:
    ShellExecute(Handle,'open','xcopy'

    Всего записей: 829 | Зарегистр. 03-06-2009 | Отправлено: 12:30 10-08-2009
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    JohnSilver182
    Попробуйте заключить их в двойные кавычки. Например:
    Код:
    md "D:\My Dir\"

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 14:53 10-08-2009
    Denion



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всем привет.  
     
    Вот наткнулся на небольшую проблему. Нужно сделать цикл для проверки Дисковых букв, которые в данный момент подключены и исключить данные буквы.
     
    Суть такова. В ListBox добавляются буквы существующих дисков, например "C:\", "D:\", "E:\" --> далее запускается проверка и в Label присваеваиться "F:\", если "F:\" присутствует в ListBox'e --> то тогда в Label присваеваеться следующая буква и так далее.  
     
    У меня проблема с построением циклов такого рода. Буду очень благодарен за помощь.

    Всего записей: 918 | Зарегистр. 07-12-2002 | Отправлено: 19:15 10-08-2009
    V1s1ter



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Denion
    Если я правильно понял вопрос, то вот, на скорую руку по пямяти, возможно что-то не так пишется но идея по моему ясна.

    Код:
    Var
       D: Char;
    begin
       D := 'A';
       while ListBox.Items.IndexOf(D+':\') >= 0 do Inc(D);
       if D <= 'Z' then Label1.Caption := D+':\'
       else Label1.Caption := 'Все буквы кончились...';
    end;

    Всего записей: 948 | Зарегистр. 06-02-2007 | Отправлено: 23:27 10-08-2009
    Denion



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    V1s1ter, Огромное спасибо.... Все работает, как доктор прописал... Жаль тут нет репутации, я б тебе поставил плюсик. Еще раз огромное спасибо!!!!

    Всего записей: 918 | Зарегистр. 07-12-2002 | Отправлено: 00:26 11-08-2009
    Maks150988



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    asdnsd
    Посмотрите еще здесь http://www.michael-puff.de/Artikel/GetVersionEx.shtml пример.

    Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 11:47 11-08-2009
    a1exD

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите переписать этот код на С++.  
        case Byte of
          0: (RecSize: Cardinal);   //  files of record
          1: (BufSize: Cardinal;    //  text files
              BufPos: Cardinal;
              BufEnd: Cardinal;
              BufPtr: PChar;
              OpenFunc: Pointer;
              InOutFunc: Pointer;
              FlushFunc: Pointer;
              CloseFunc: Pointer;
              UserData: array[1..32] of Byte;
              Name: array[0..259] of Char; );

    Всего записей: 2 | Зарегистр. 11-08-2009 | Отправлено: 14:49 11-08-2009
    akaGM

    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    a1exD
    давай полный тип...
    то есть всё, что стоит в блоке type или юзай вот это:

    Код:
     
    typedef union {
      struct {
        int BufSize;
        int BufPos;
        int BufEnd;
        char * BufPtr;
        void * OpenFunc;
        void * InOutFunc;
        void * FlushFunc;
        void * CloseFunc;
        unsigned char UserData[32];
        char Name[260];
      };
      int RecSize;
    } MY_UNION;

    Всего записей: 24121 | Зарегистр. 06-12-2002 | Отправлено: 15:59 11-08-2009 | Исправлено: akaGM, 16:07 11-08-2009
    delover

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    akaGM
    Похоже на стандартный тип file/text в стандартном паскале. Возможно в старых билдерах есть исходные буквы для этого. Либо как вариант - подтесать.

    Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 16:04 11-08-2009
    akaGM

    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    delover
    да, похоже на то...
     
    наверняка компилятор Сей пишет...

    Всего записей: 24121 | Зарегистр. 06-12-2002 | Отправлено: 16:10 11-08-2009
    spasius



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всем ру-бордовцам привет.
    Подскажите может кто-нить встречал компоненты или модули для генерации Капчи на Delphi с кодом?
    Спасибо.

    Всего записей: 695 | Зарегистр. 16-03-2009 | Отправлено: 12:39 12-08-2009
    a1exD

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Понятно, я к примеру взял кусок кода из файла Delphi. Мне не понятно, ведь в си аналог switch и в скобках должна стоять переменная,которая  потом сравнивается со значениями. Почему стоит Byte? И почему потом выражения в скобках идут? Вообще, мне надо разобраться, как переписать на си следующие куски кода  
     
    type
         type32 = record
           case integer of
            1 : ( pres : Integer ) ;
            2 : ( value : single ) ;
            3 : ( h,l : word ) ;
            4 : ( b1,b2,b3,b4 : byte ) ;
            5 : ( hi,li : Smallint ) ;
           end ;
     
      AnalizeResult = record
            case integer of
             1 : ( Result : SectErrs;
                   format : string[80] ;
                   SectionPassport : TSectionPassport ;
                   FilePassport : TFilePassport ;
                   StartTime,
                   EndTime,
                   StartPicket,
                   EndPicket      : integer ;  
                   filetype : string[80] ;
                    ) ;
            end ;

    Всего записей: 2 | Зарегистр. 11-08-2009 | Отправлено: 13:42 12-08-2009
    JohnSilver182



    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Hi All
     
    Моя  прога  выводит под Win98   такую ошибку Canvas does not allow drawing
     
    Есть  подозрение  что в  потоке  я вызываю процедуру  
     

    Цитата:
    Procedure   ShowMsgLB(msg:String);
    var s:string;
    begin
    try
      if FrmMsg.Visible=false then FrmMsg.Visible:=true;  //Форма для  вывода сообщений
      SendMessage(FrmMsg.Handle, OutMsgLB, 0, lParam( Pansichar(msg)  ) );
    except
    end;//ex}
    end;

     
    Но  под WInXP все  ОК
     
     
     
     
     

    Всего записей: 829 | Зарегистр. 03-06-2009 | Отправлено: 14:14 12-08-2009 | Исправлено: JohnSilver182, 14:18 12-08-2009
    akaGM

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

    Цитата:
    Почему стоит Byte? И почему потом выражения в скобках идут? Вообще, мне надо разобраться, как переписать на си следующие куски кода

    я думаю, тебе и с паскалем неплохо бы разобраться для начала, т.к. ты основ не знаешь...
     

    Код:
    typedef union {
            int pres;
            float value;
            unsigned int h,l;
            unsigned char b1,b2,b3,b4;
            short hi,li;
    } type32;
     
     
    typedef union {
            struct {
              SectErrs Result;
              char format[80];
              TSectionPassport SectionPassport;
              TFilePassport FilePassport;
              int StartTime,
                  EndTime,
                  StartPicket,
                  EndPicket;  
              char filetype[80];
             };
    } AnalizeResult;


    Всего записей: 24121 | Зарегистр. 06-12-2002 | Отправлено: 14:19 12-08-2009
       

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

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (до версии 2009) - часть 5
    ShIvADeSt (19-05-2010 05:14): Продолжаем тут http://forum.ru-board.com/topic.cgi?forum=33&topic=11215


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru