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

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



    Moderator
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    rdenk1
    Не понимаю смысл гемороиться с едитом, когда есть DBEdit. Но если ты любишь на лыжах стоя, да еще и в гамаке - то вот так примерно добавлять запись в базу

    Код:
     
    Table1.Append;
    Table1.FieldValues['ALPHANUMERIC'] := Edit1.text;
    Table1.Post;
     

    заметь - взято из Хелпа дельфи. Query я использую, так как более удобно можно оперировать с данными. От тейбла отошел очень давно лет 15 назад, как узнал про SQL. В данном примере Table1 - это твой адотейбл.

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

    Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 10:24 26-07-2009
    rdenk1

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

    Цитата:
    Не понимаю смысл гемороиться с едитом, когда есть DBEdit. Но если ты любишь на лыжах стоя, да еще и в гамаке - то вот так примерно добавлять запись в базу  

    Сложности меня только привлекают
    А такой вопрос еще: когда я в edit'е на Enter нажимаю (обрабатывается добавление в БД), возникает стандартный звук Windows. Как бы его заблокировать (имеется в виду только для этого edit'а)?
     
    Добавлено:
    Я решил все-таки сделать с SQL. Поставил на форму компонент ADOQuery, отредактировал свойство SQL, запустил запрос, он выполнился. При этом свойство active у него было false, в течение всей работы. Это нормально?
    И как скопировать результат работы SQL-запроса в "обычный" (не DB) компонент? В Listbox, например?

    Всего записей: 117 | Зарегистр. 27-04-2009 | Отправлено: 12:01 26-07-2009
    Grande



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

    Цитата:
    Прога заполняет БД всяческими инфами с обязательным указанием даты-времени. До некоторых пор все идет гладко. Но, вдруг, ни с того, ни с сего, сервер PostgreSQL возвращает ошибку о якобы недопустимом формате этой самой даты-времени.

     
    Решил. Ежели кому интересно - вот причина:
    В разделе initialization есть строка  "ShortDateFormat := 'yyyy-mm-dd';".
    Так вот, долбаный Symantec antivirus периодически меняет этот формат на другой!
    Пришлось указывать дату в формате "26 July 2009", благо формат этот понимается всеми однозначно, да и реализация совсем простая.

    Всего записей: 588 | Зарегистр. 18-09-2003 | Отправлено: 17:46 26-07-2009
    Hiken



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

    Всего записей: 1343 | Зарегистр. 14-01-2006 | Отправлено: 06:19 27-07-2009
    Ramazan



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

    Цитата:
    возникает стандартный звук Windows

    Если используешь обработчик OnKeyPress, то добавь строку
    Код:
    Key := #0;

    Если OnKeyDown/OnKeyUp, то
    Код:
    Key := 0;


    ----------
    Per rectum ad...

    Всего записей: 359 | Зарегистр. 13-04-2002 | Отправлено: 07:49 27-07-2009
    Grande



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Hiken
    Разумеется, нет
    Но, тем не менее, факты - упрямая вещь. Остановил антивирус - ни единого сбоя.

    Всего записей: 588 | Зарегистр. 18-09-2003 | Отправлено: 07:52 27-07-2009 | Исправлено: Grande, 08:01 27-07-2009
    MrZeRo



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Grande
    Причина не собственно в антивирусе (я наблюдал, как и другие программы приводили к тому же эффекту), а в широковещательном сообщении WM_SETTINGCHANGE, которое по умолчанию обрабатывает Delphi-приложение и присваивает переменным значения из системных настроек, и к этому надо быть готовым.
    Для того, чтобы от этого избавиться, можно использовать свойства TApplication, я обычно это делаю так:

    Цитата:
     
    begin
      Application.Initialize;
      Application.MainFormOnTaskbar := True;
      Application.Title := 'My Cool Application';
      Application.UpdateFormatSettings := False; //!! we don't want to update our format vars
      Application.UpdateMetricSettings := False; //!! we don't want to update our system metrics vars
      Application.CreateForm(TMainForm, MainForm);
      Application.Run;
    end;
     

    Или же постоянно использовать функции преобразования согласно требуемого формата.

    ----------
    ... не это главное ...

    Всего записей: 831 | Зарегистр. 30-01-2002 | Отправлено: 14:03 27-07-2009 | Исправлено: MrZeRo, 15:56 27-07-2009
    Grande



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    MrZeRo
    Это для меня новость. Спасибо огромное!

    Всего записей: 588 | Зарегистр. 18-09-2003 | Отправлено: 18:17 27-07-2009
    rdenk1

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

    Цитата:
    Цитата:
    возникает стандартный звук Windows
     
    Если используешь обработчик OnKeyPress, то добавь строку
    Код:
    Key := #0;
     
    Если OnKeyDown/OnKeyUp, то
    Код:
    Key := 0;  

     
    У меня на самом деле код такой:
     

    Код:
    procedure block(Sender: TObject; var Key: Char);
    var  
     vrLength: byte;
    begin
     with Sender as TEdit do
      vrLength := Length(Text);  
     case Key of
      '0'..'9','(',')':
      begin
      if (vrLength>7) then
      Key := #0;  
      end;
      #8: ;
     else
      Key := #0;
     end;
    end;
     
    procedure TForm2.Edit1KeyPress(Sender: TObject; var Key: Char);
    begin
    block(Sender,key);
    end;

    Если тут поставить Key := #0 то печатать в edit'ах не будет.

    Всего записей: 117 | Зарегистр. 27-04-2009 | Отправлено: 20:35 27-07-2009
    Ramazan



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

    Код:
     
    procedure TForm2.Edit1KeyPress(Sender: TObject; var Key: Char);
    begin
      block(Sender,key);
      if Key = #13 then Key := #0;
    end;  
     



    ----------
    Per rectum ad...

    Всего записей: 359 | Зарегистр. 13-04-2002 | Отправлено: 08:19 28-07-2009
    rdenk1

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Понятно. А такой вопрос: скачал недавно с torry компонент http://torry.net/pages.php?id=117 NextGrid называется. Ссылка:  
    NextGrid D7
    Сильно понравилась демка, которая там была. Особенно панель внизу слева (с надписями Home, NextGrid и т. д.). Как называется подобная панель? Где можно подобное взять? Есть ли такое в DevExpress, и если да, то как называется?

    Всего записей: 117 | Зарегистр. 27-04-2009 | Отправлено: 16:18 28-07-2009
    Maks150988



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Привет всем. Вот мне надо прописать маршрутизацию программно без всяких консольных извращений. Сразу оговорюсь, на XP работает - ну на своей рабочей системе проверял. Решил проверить на виртуалке, именно на системах 2000 и 7. Что-то вообще не прет там. Ну насчет семерки еще можно догадаться что происходит, но вот 2000. Вроде IP Helper пристуствует судя по MSDN в 2000. На вирртуалке даже под семеркой с запуском там с праваами администратора не прописывается - ну не появляется мой долгожданный мессаджбокс вслучае успешного результата функции. Служба роутинга там включена. Может кто подскажет как оптимальнее учесть все эти виста\семеровские заморочки, особенно с реестром и заодно опробуйте на системах у кого вин2000. Есть сомнения в правильности кода, инфы вообще мало, делал код практически на энтузиазме как мог.
     

    Код:
    program resources;
     
    {$APPTYPE CONSOLE}
     
    uses
      Windows, Messages, SysUtils, winsock;
     
    type
      PMIB_IPFORWARDROW = ^MIB_IPFORWARDROW;
      MIB_IPFORWARDROW = record
        dwForwardDest     : DWORD;
        dwForwardMask     : DWORD;
        dwForwardPolicy   : DWORD;
        dwForwardNextHop  : DWORD;
        dwForwardIfIndex  : DWORD;
        dwForwardType     : DWORD;
        dwForwardProto    : DWORD;
        dwForwardAge      : DWORD;
        dwForwardNextHopAS: DWORD;
        dwForwardMetric1  : DWORD;
        dwForwardMetric2  : DWORD;
        dwForwardMetric3  : DWORD;
        dwForwardMetric4  : DWORD;
        dwForwardMetric5  : DWORD;
      end;
     
    type
      IPAddr = Cardinal;
     
    const
      iphlpapilib = 'iphlpapi.dll';
     
    function GetBestInterface(dwDestAddr: IPAddr; var pdwBestIfIndex: DWORD): DWORD; stdcall; external iphlpapilib name 'GetBestInterface';
    function CreateIpForwardEntry(const pRoute: MIB_IPFORWARDROW): DWORD; stdcall; external iphlpapilib name 'CreateIpForwardEntry';
     
    function RegWriteString(RootKey: HKEY; StrKey, StrName, StrVal: AnsiString): Boolean;
    var
      Dispos: DWORD;
      RegKey: HKEY;
      vSize : Integer;
      RegRes: Integer;
    begin
      Result := FALSE;
      vSize := Length(StrVal) + 1;
      if (vSize < 0) then
        Exit;
      RegRes := RegCreateKeyEx(RootKey, PAnsiChar(StrKey), 0, nil, REG_OPTION_NON_VOLATILE, KEY_WRITE, nil, RegKey, @Dispos);
      if (RegRes <> ERROR_SUCCESS) then
        Exit;
      Result := (RegSetValueEx(RegKey, PAnsiChar(StrName), 0, REG_SZ, PAnsiChar(StrVal), vSize) = ERROR_SUCCESS);
      RegCloseKey(RegKey);
    end;
     
    function CreateIpEntry(Destination, Mask, Gateway: AnsiString): Boolean;
    const
      PersistentKey = 'SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\PersistentRoutes';
    var
      pRoute   : MIB_IPFORWARDROW;   // структура
      FuncRes  : DWORD;
      BestIndex: DWORD;              // номер интерфейса
      szRoute  : AnsiString;
    begin
      Result := FALSE;
      // сначала подставляем номер интерфейса как -1 и далее через функцию
      // пытаемся определить лучший индекс интерфейса для маршрута
      BestIndex := DWORD(-1);
      FuncRes := GetBestInterface(inet_addr(@GateWay[1]), BestIndex);
      case FuncRes of
        // если функция вернула положительный результат, выполняем
        // следующие действия
        ERROR_SUCCESS:
          begin
            // заполняем структуру MIB_IPFORWARDROW, а также
            // создаем запись через функцию и проверяем возвращаемый результат
            // также проверяем значение маски подсети
            if (Mask = '') then
              Mask := '255.255.255.255';
            ZeroMemory(@pRoute, SizeOf(MIB_IPFORWARDROW));
            pRoute.dwForwardDest      := inet_addr(@Destination[1]);
            pRoute.dwForwardMask      := inet_addr(@Mask[1]);
            pRoute.dwForwardPolicy    := 0;
            pRoute.dwForwardNextHop   := inet_addr(@Gateway[1]);
            pRoute.dwForwardIfIndex   := BestIndex;
            pRoute.dwForwardType      := 3;
            pRoute.dwForwardProto     := 3;
            pRoute.dwForwardAge       := 0;
            pRoute.dwForwardNextHopAS := 0;
            pRoute.dwForwardMetric1   := 1;
            pRoute.dwForwardMetric2   := DWORD(-1);
            pRoute.dwForwardMetric3   := DWORD(-1);
            pRoute.dwForwardMetric4   := DWORD(-1);
            pRoute.dwForwardMetric5   := DWORD(-1);
            FuncRes := CreateIpForwardEntry(pRoute);
            // если функция вернула положительный результат, выполняем
            // следующие действия
            case FuncRes of
              NO_ERROR:
                begin
                  szRoute := Format('%s,%s,%s,1', [Destination, Mask, Gateway]);
                  Result := RegWriteString(HKEY_LOCAL_MACHINE, PersistentKey, szRoute, '');
                end;
              //ERROR_ACCESS_DENIED,
              //ERROR_INVALID_PARAMETER,
              //ERROR_NOT_SUPPORTED:;
            end;
          end;
        //ERROR_NOT_SUPPORTED,
        //ERROR_CAN_NOT_COMPLETE:;
      //else
      //  WriteLn(SysErrorMessage(GetLastError));
      end;
    end;
     
    begin
      if CreateIpEntry( '172.16.0.0' , '255.240.0.0' , '172.16.65.1' ) then
        MessageBox(0, '', '', MB_OK);
    end.

    Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 16:29 28-07-2009
    MrZeRo



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


    ----------
    ... не это главное ...

    Всего записей: 831 | Зарегистр. 30-01-2002 | Отправлено: 17:45 28-07-2009
    rdenk1

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Кто-нибудь знает где можно скачать glyph'ы для кнопок и менюшек?

    Всего записей: 117 | Зарегистр. 27-04-2009 | Отправлено: 09:20 30-07-2009
    Rudia



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    rdenk1
    http://www.google.com/search?q=скачать+иконки+бесплатно
    И любой редактор, который позволяет сохранять в bmp и менять размер

    Всего записей: 324 | Зарегистр. 13-09-2006 | Отправлено: 09:25 30-07-2009 | Исправлено: Rudia, 09:26 30-07-2009
    ShIvADeSt



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

    Цитата:
    И любой редактор, который позволяет сохранять в bmp и менять размер

    Изменение размера не айс Вылазят артефакты в виде зубцов и искажение круглых форм.  
    rdenk1
    На работе буду - у меня там есть ссылка на классный сайт с кучей картинок от самых мелких до 64х64 (мб и больше). Все 32 битные, очень красивые (на мой взгляд конечно).

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

    Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 09:43 30-07-2009
    MrZeRo



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    rdenk1
    hТТp://www.torry.net/quicksearchd.php?String=icons&Title=Yes
    hТТp://www.torry.net/pages.php?id=1527
    Там есть платные, есть и бесплатные. Думаю, можно что-то подходящее подобрать.

    ----------
    ... не это главное ...

    Всего записей: 831 | Зарегистр. 30-01-2002 | Отправлено: 11:30 30-07-2009
    Rudia



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

    Цитата:
    Изменение размера не айс Вылазят артефакты в виде зубцов и искажение круглых форм.

    Ну если изображения произвольные, то вероятность есть. Но в разных иконпаках стандарт идет обычно 128x128, либо 256x256. Они нормально ресайзятся.
    А можно ещё пользовать Axialis Icon Workshop. Он замечательно это делает.

    Всего записей: 324 | Зарегистр. 13-09-2006 | Отправлено: 12:24 30-07-2009
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    rdenk1
    Тут еще гляньте: Иконки коммерческие (Сommercial Icons).

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 15:48 30-07-2009
    YuriyRR



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Посмотри htp://www.board4all.cz/showthread.php?t=138576

    Всего записей: 516 | Зарегистр. 07-06-2007 | Отправлено: 17:46 30-07-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