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

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

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрый день.
    Я хочу написать компонент. Конкретно интересует как добавлять и организовывать свойства в Object Inspector'е. Копания привели только к тому что нужно писать редактор свойств... без подробностей как именно его писать и как оформить взаимодействие со средой

    Всего записей: 781 | Зарегистр. 25-09-2005 | Отправлено: 05:16 09-09-2009
    ShIvADeSt



    Moderator
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Оформлять взаимодействия не надо. Компонент - это по сути класс, только его потом еще регистрируют, чтобы он попал на панель компонентов. Обжект Инспектор видит те свойства которые объявлены как property в public свойствах класса. Чтобы понять как это пишется - скачай любой компонент (паки качать не советую, много буков) и посмотри организацию

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

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



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

    Цитата:
    Обжект Инспектор видит те свойства которые объявлены как property в public свойствах класса
    Не в public, а в published

    ----------
    Если нравится, считайте, что получилось…

    Всего записей: 1766 | Зарегистр. 21-07-2001 | Отправлено: 08:07 09-09-2009
    Smokeer

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

    Цитата:
    Оформлять взаимодействия не надо. Компонент - это по сути класс, только его потом еще регистрируют, чтобы он попал на панель компонентов.  

    Взаимодействие не компонента, а этого самого редактора свойств(?). Получается он не нужен вообще.
     
    PS: Спасибо. Возникает следующий вопрос: как организовать своства в дерево типа:
     
    \Properties
    |-\PropertyGroup1
    | |-Property 1 from group 1
    | =-Property 2 from group 1
    |
    |-\PropertyGroup2
    | |-Property 1 from group 2
    | =-Property 2 from group 2
    ...

    Всего записей: 781 | Зарегистр. 25-09-2005 | Отправлено: 17:37 09-09-2009 | Исправлено: Smokeer, 17:38 09-09-2009
    volser

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    PropertyGroup1, PropertyGroup2 - сделай проперти наследники TPersistent.

    Всего записей: 713 | Зарегистр. 31-03-2006 | Отправлено: 11:36 10-09-2009
    SANIOK_AV



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Доброго времени суток!
    Ситуация такая:
    Написал програмку...
    на моём компьютере она запускается в виде окна (не на весь экран)
    на другом компьютере то же самое :открывается окно примерно того же размера...
    но одно но: с вертикальной и горизонтальной прокруткой...  
    подскажите пожалуйста, "где копать" ?
    Заранее благодарен!

    Всего записей: 485 | Зарегистр. 31-03-2009 | Отправлено: 13:56 10-09-2009
    V1s1ter



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SANIOK_AV
    Как возможный вариант - дело в скинах или масштабах шрифтов Windows, например, при одном скине Heigth = 800; ClientHeigth = 777, а при другом скине (или масштабе шрифта) Heigth = 800; ClientHeigth = 765. В итоге если компоненты расположены так , что при ClientHeigth меньшем на 12 пикселей чем при "нормальном" размере не влазиют в эту самую ClientHeigth, то появляется вертикальный ScrollBar, который в свою очередь крадет ClientWidht.

    Всего записей: 948 | Зарегистр. 06-02-2007 | Отправлено: 14:18 10-09-2009
    DreamKHV



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SANIOK_AV
    Копать нужно в сторону ScaleBy, но она неадекватно работает с некоторыми шрифтами.Source

    Всего записей: 21 | Зарегистр. 19-03-2009 | Отправлено: 14:30 10-09-2009
    V1s1ter



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

    Цитата:
     
    Сам не сталкивался с такой необходимостью, но где копать знаю - реестр ветвь
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum
    Но там не все уже готовенькое, строки типа "\\?\Volume{fe9bf0a0-6259-11de-9c9a-806d6172696f}\" нужно собирать по ключам...
    Начни с просмотра этой ветки реестра в RegEdit.exe

    Всего записей: 948 | Зарегистр. 06-02-2007 | Отправлено: 14:47 10-09-2009
    SANIOK_AV



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    V1s1ter
    DreamKHV
    Спасибо...
    Тупо немного растянул форму и всё нормуль))

    Всего записей: 485 | Зарегистр. 31-03-2009 | Отправлено: 15:08 10-09-2009
    Smokeer

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

    Цитата:
    PropertyGroup1, PropertyGroup2 - сделай проперти наследники TPersistent.

    Покажите, пожалуйста, пример.

    Всего записей: 781 | Зарегистр. 25-09-2005 | Отправлено: 17:58 10-09-2009
    volser

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Smokeer
    Посмотрите на свойство Constraints класса TControl.

    Всего записей: 713 | Зарегистр. 31-03-2006 | Отправлено: 20:09 10-09-2009
    SerBUser

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите, плиз - пишу на Дельфи службу, которая по таймеру выполняет нужные мне действия. Нашел на сайте Королевство Дельфи хорошую статью "Создание служб Windows в Delphi с использованием VCL" - но так и не понял - как сделать так, чтоб при старте службы запускался таймер, а при стопе останавливался. Вот код:  

    Код:
     
    procedure ServiceController(CtrlCode: DWord); stdcall;
    begin
      Service1.Controller(CtrlCode);
    end;
     
    function TService1.GetServiceController: TServiceController;
    begin
      Result := ServiceController;
    end;
     
    procedure TService1.ServiceStart(Sender: TService; var Started: Boolean);
    begin
     Timer1.Enabled:=true;
     Started:=true;
    end;
     
    procedure TService1.ServiceStop(Sender: TService; var Stopped: Boolean);
    begin
     Timer1.Enabled:=false;
     Stopped := True;
    end;
     
    procedure TService1.Timer1Timer(Sender: TObject);
    begin
     // тут мои действия
    end;
     

     
    Служба не стартует - пишет, что некоторые службы останавливаются, когда им нечего делать. Как правильно это дело организовать?

    Всего записей: 123 | Зарегистр. 31-08-2009 | Отправлено: 09:20 11-09-2009
    Hiken



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SerBUser
    К примеру, можете сделать цикл с Sleep(Milliseconds) внутри.

    Всего записей: 1343 | Зарегистр. 14-01-2006 | Отправлено: 09:22 11-09-2009
    SerBUser

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

    Цитата:
    К примеру, можете сделать цикл с Sleep(Milliseconds) внутри

    Цикл где?

    Всего записей: 123 | Зарегистр. 31-08-2009 | Отправлено: 10:07 11-09-2009
    Hiken



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    В OnStart. Либо убрать OnStart унд OnStop, и задействовать OnExecute. Все по статье!

    Всего записей: 1343 | Зарегистр. 14-01-2006 | Отправлено: 10:18 11-09-2009
    gorenski



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SerBUser
    В обработке таймера OnTime что-нибудь делай

    Всего записей: 711 | Зарегистр. 29-01-2003 | Отправлено: 10:19 11-09-2009 | Исправлено: gorenski, 10:19 11-09-2009
    SerBUser

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

    Цитата:
    В обработке таймера OnTime что-нибудь делай

    Так делаю. Раз в секунду.  

    Код:
     
    procedure TService1.Timer1Timer(Sender: TObject);
    var
     f:text;
    begin
     Assignfile(f,'c:\hp\11.txt');
     append(f);
     writeln(f,timetostr(now)+'Отработал');
     CloseFile(f);
    end;
     

     
    Даже в файл ничего не записывается.

    Всего записей: 123 | Зарегистр. 31-08-2009 | Отправлено: 11:33 11-09-2009
    NOwlar



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SerBUser
    Нужно обязательно сделать обработчик OnExecute следующего вида

    Код:
     
    procedure TSvc.ServiceExecute(Sender: TService);
      while not Terminated do begin
        //тут что-то делаем
        ServiceThread.ProcessRequests( True );
      end;
    end;
     

    Иначе основной поток сервиса сразу закончится и сервис остановится. Читаем хэлп внимательнее: "When the OnExecute event handler finishes, the service thread terminates"
     
    Ну или как вариант в OnStart запустить свой поток какой-нить
     
    Добавлено:
    В OnStart же цикл делать нельзя, иначе служба будет бесконечно долго стартовать. На время работы OnStart есть какое-то ограничение (точно не помню), по истечении которого Service Manager будет ругаться.

    Всего записей: 170 | Зарегистр. 25-01-2006 | Отправлено: 16:07 11-09-2009
    SerBUser

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    NOwlar
    Хм. А в статье было написано - или пишем обработчики OnStart/OnStop или обработчик OnExecute. Т.е. я правильно понял, что надо в OnExecute и прописывать те действия, которые мне надо выполнить по таймеру, а таймер убрать совсем и код будет примерно такой:

    Код:
     
    procedure TSvc.ServiceExecute(Sender: TService);  
      while not Terminated do begin  
        //тут что-то делаем  
        ServiceThread.ProcessRequests( false );  
        Sleep(1000);
      end;  
    end;
     

     
    И в слипе и указать - с какой периодичностью выполнять действия. А если мне надо раз в 5 минут делать? Sleep разве нормально отработает такой большой интервал?
     

    Цитата:
    Ну или как вариант в OnStart запустить свой поток какой-нить

    А как его запустить? Можно примерчик?

    Всего записей: 123 | Зарегистр. 31-08-2009 | Отправлено: 02:32 14-09-2009 | Исправлено: SerBUser, 02:35 14-09-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