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


Система IP-видеонаблюдения "Линия". Скачать бесплатную демо-версию для 16 камер. НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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

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

ShIvADeSt



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

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

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

     
    И старайтесь, чтобы ваш код не попал сюда

  • Всего записей: 3902 | Зарегистр. 29-07-2003 | Отправлено: 05:13 19-05-2010 | Исправлено: data man, 02:45 31-12-2010
    EugeneBoss3



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

    Всего записей: 234 | Зарегистр. 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, но это вы уж как нибудь сами.

    Всего записей: 2108 | Зарегистр. 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...ибо скорее всего вы юзаете стандартный компонент

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



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

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

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

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

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

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

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



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

    Код:
    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). Может кто знает как еще проверить привилегии администратора.

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



    Moderator
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    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

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

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



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

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

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

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



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

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

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

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

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



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

    Всего записей: 834 | Зарегистр. 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?

    Всего записей: 379 | Зарегистр. 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?

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

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

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

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

    Всего записей: 1281 | Зарегистр. 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  

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

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

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

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

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



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

    Всего записей: 379 | Зарегистр. 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

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

    Имя:
    Пароль:
    Сообщение

    Для вставки имени, кликните на нем.

    Опции сообщенияДобавить свою подпись
    Подписаться на получение ответов по e-mail
    Добавить тему в личные закладки
    Разрешить смайлики?
    Запретить коды


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

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.Board
    © Ru.Board 2000-2018

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru