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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
    EugeneBoss3



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Frodo_Torbins
    А можно на примере показать, хотя бы на 90°

    Всего записей: 247 | Зарегистр. 15-09-2009 | Отправлено: 03:18 14-06-2010
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    EugeneBoss3
    Ну вот например код добавления поворота к уже существующему шрифту. После этого в вашем коде надо еще поправить координаты начальной точки рисования:
    Код:
      iTop := iTop + Max(0, Round(iTextWidth * Sin(Degree/180*Pi))) -
        Min(0, Round(iTextHeight * Cos(Degree/180*Pi)));
      iLeft := iLeft - Min(0, Round(iTextWidth * Cos(Degree/180*Pi))) -
        Min(0, Round(iTextHeight * Sin(Degree/180*Pi)));
    и размеры области рисования TextBounds, но это вы уж как нибудь сами.

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 11:15 14-06-2010
    lezval

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте. Есть программа на delphi7, в которой происходит выгрузка в excel. В 2003 все выгружается, а в 2007 выдает ошибку открытия файла, причем если excel2007 установлен на XP, то выгрузка проходит через раз. Если на Win7, то ошибка всегда. Писать программу могу только на XP с excel2003, проверять где угодно. Подскажите как решить проблему или ссылку где посмотреть?

    Всего записей: 67 | Зарегистр. 15-02-2006 | Отправлено: 09:51 15-06-2010
    mdid

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

    Всего записей: 1298 | Зарегистр. 13-02-2006 | Отправлено: 10:32 15-06-2010
    ShIvADeSt



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

    Цитата:
    Подскажите как решить проблему или ссылку где посмотреть?

    Добавить для начала окна сообщзений на каждом этапе открытия выгрузки. Может пути неправильно формируются, тогда перед открытием екселя ShowMessage(путь к файлу). Ну и везде try
    except и смотрим что не так. Права доступа к файлу проверить заодно.

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

    Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 10:33 15-06-2010
    lezval

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    mdid
    Спасибо. Как сам сразу не подумал. Вот что значит забросить на пол года программирование.

    Всего записей: 67 | Зарегистр. 15-02-2006 | Отправлено: 19:02 15-06-2010
    Maks150988



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

    Код:
    function IsUserAdmin: Boolean;
    const
      SECURITY_NT_AUTHORITY: TSIDIdentifierAuthority  = (Value: (0, 0, 0, 0, 0, 5));
      SECURITY_BUILTIN_DOMAIN_RID                     = $00000020;
      DOMAIN_ALIAS_RID_ADMINS                         = $00000220;
    var
      hToken   : THandle;
      ptGroups : PTokenGroups;
      dwSize   : DWORD;
      psidAdmin: PSID;
      i        : Integer;
      bSuccess : Boolean;
    begin
     
      Result := FALSE;
     
      bSuccess := OpenThreadToken(GetCurrentThread, TOKEN_QUERY, TRUE, hToken);
     
      if ((not bSuccess) and (GetLastError = ERROR_NO_TOKEN)) then
        bSuccess := OpenProcessToken(GetCurrentProcess, TOKEN_QUERY, hToken);
     
      if bSuccess then
      try
     
        GetMem(ptGroups, 1024);
        bSuccess := GetTokenInformation(hToken, TokenGroups, ptGroups, 1024, dwSize);
     
        if bSuccess then
        try
     
          AllocateAndInitializeSid(SECURITY_NT_AUTHORITY, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, psidAdmin);
     
          {$R-}
          for i := 0 to ptGroups.GroupCount - 1 do
            if EqualSid(psidAdmin, ptGroups.Groups[i].Sid) then
            begin
              Result := TRUE;
              Break;
            end;
          {$R+}
     
        finally
          FreeSid(psidAdmin);
        end;
     
      finally
        FreeMem(ptGroups);
        CloseHandle(hToken);
      end;
     
    end;

     
    Если пользователь не администратор - программы выдает сообщение и закрывается. Соответсвенно мне один пользователь написал что происходит такая вот ситуация, но он работает под доменной учёткой, входящей в доменную группу, прописанной в группе локальных администраторов компьютера (не в Domain Admins). Может кто знает как еще проверить привилегии администратора.

    Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 01:53 23-06-2010
    ShIvADeSt



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

    Цитата:
    Если пользователь не администратор - программы выдает сообщение и закрывается. Соответсвенно мне один пользователь написал что происходит такая вот ситуация, но он работает под доменной учёткой, входящей в доменную группу, прописанной в группе локальных администраторов компьютера (не в Domain Admins). Может кто знает как еще проверить привилегии администратора.

    Попробуй так

    Код:
     
    const
      SECURITY_NT_AUTHORITY: TSIDIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 5));
      SECURITY_BUILTIN_DOMAIN_RID = $00000020;
      DOMAIN_ALIAS_RID_ADMINS = $00000220;
     
    function CheckTokenMembership(TokenHandle: THANDLE; SidToCheck: Pointer; var IsMember: BOOL): BOOL; stdcall; external advapi32 name  'CheckTokenMembership';
     
    function IsAdmin: Boolean;
    var
      psidAdministrators: PSID;
      bSuccess: BOOL;
    begin
      Result   := False;
      bSuccess:=AllocateAndInitializeSid(SECURITY_NT_AUTHORITY, 2,
            SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, psidAdministrators);
      if bSuccess then
        if (CheckTokenMembership( 0, psidAdministrators, bSuccess)) then Result:=bSuccess;
      FreeSid(psidAdministrators);
    end;
     
     

    у меня твой способ не отработал, зато мой сработал. Проверил - занес Domain Users в локальные админы - результат тру, убрал - результат фолс.
    Взято отсюда
    http://msdn.microsoft.com/en-us/library/aa376389%28VS.85%29.aspx

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

    Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 08:26 23-06-2010
    Maks150988



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ShIvADeSt
    Ага, а есть еще:

    Код:
     
    function IsUserAdmin: LongBool; stdcall; external 'setupapi.dll' name 'IsUserAdmin';
     

    Как с ним? Хочется использовать готовое решение от производителя раз они сами его предоставляют.

    Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 11:26 23-06-2010
    ShIvADeSt



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

    Цитата:
    function IsUserAdmin: LongBool; stdcall; external 'setupapi.dll' name 'IsUserAdmin';  

    Тоже вариант, я проверил - работает нормально. Все зависит от операционки. Если тебе надо до 2к винды (а оно еще где то юзается?) то твой пример изначальный, если с 2000 то мой точно работает, а вот насчет setupapi я не знаю когда ее внедрили. Проверь либу на основных ОСях, если работает - то ИМХО самое то, минимум кода, максимум пользы.

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

    Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 11:44 23-06-2010
    Maks150988



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ShIvADeSt
    На MSDN локальной нашел такую функцию. Минимальная система Windows 2000, впринципе у меня программа и под эту систему заточена, так что тогда да, лучше этот вариант использовать раз работает замечательно.

    Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 12:38 23-06-2010
    Man_Without_Face



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Доброго времени суток, есть вопрос по halcyon:
    Создаю поле с датой:
    CHDS.CreateFields.Add('SLLASTDATE;d;8;0');
    Создается поле формата dd.mm.yyyy. Вопрос как создать поле формата
    dd.mm.yyyy hh.mm.ss?

    Всего записей: 381 | Зарегистр. 25-01-2010 | Отправлено: 17:48 23-06-2010
    volser

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

    Всего записей: 713 | Зарегистр. 31-03-2006 | Отправлено: 21:05 23-06-2010
    Man_Without_Face



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    volser ок, но как с помощью халькона создать поле datetime а не date?

    Всего записей: 381 | Зарегистр. 25-01-2010 | Отправлено: 10:00 24-06-2010
    Aleksandr N

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Банальный вопрос, но не могу получить результат.
    Есть список файлов, после сортировки список выглядит так:
    1
    10
    11
    ...
    19
    2
    20
    ...
    Каким образом можно привести список к виду:
    1
    2
    3
    ...
    ???
    Все мне известные алгоритмы не подошли.

    Всего записей: 1665 | Зарегистр. 25-02-2008 | Отправлено: 12:34 24-06-2010
    mdid

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Aleksandr N
    сортировка методом пузырька?по идее это первое что должно прийти на ум
    Man_Without_Face
    если он не умеет то вам же намекнули что даты храниться как вещественное число...вот и создайте поле типа float а в клиенте уже преобразовывайте

    Всего записей: 1298 | Зарегистр. 13-02-2006 | Отправлено: 13:30 24-06-2010 | Исправлено: mdid, 13:33 24-06-2010
    RomanTim

    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Aleksandr N
    Когда сравниваешь два элемента списка - если оба переводятся в числа, то сравнивай эти числа, иначе строки.

    Всего записей: 375 | Зарегистр. 11-09-2003 | Отправлено: 14:32 24-06-2010
    Man_Without_Face



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

    Цитата:
    а в клиенте уже преобразовывайте  

    Не совсем понял в каком клиенте?
     

    Всего записей: 381 | Зарегистр. 25-01-2010 | Отправлено: 15:06 24-06-2010
    mdid

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

    Всего записей: 1298 | Зарегистр. 13-02-2006 | Отправлено: 15:37 24-06-2010
    Man_Without_Face



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    mdid Да но у меня нет доступа к программе, которая будет открывать dbf

    Всего записей: 381 | Зарегистр. 25-01-2010 | Отправлено: 16:56 24-06-2010
    Открыть новую тему     Написать ответ в эту тему

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