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

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

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

    Цитата:
    Инспектор объектов и метаданные
    Там, правда нет поддержки Unicode (я сейчас в D2010), но переделал, запустил и изучаю его. За ссылки заранее огромное спасибо - сколько сможете.

    Всего записей: 480 | Зарегистр. 13-04-2006 | Отправлено: 23:29 29-12-2009
    data man



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

    ----------
    Любой достаточно развитый тролль неотличим от подлинно помешанного на какой-либо идее.
    Кекс. Антибиотики. Ламбада.

    Всего записей: 1696 | Зарегистр. 13-10-2005 | Отправлено: 23:51 29-12-2009
    ppkp

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




    Благодарим в ПМ. По 2010 своя тема.

    Всего записей: 480 | Зарегистр. 13-04-2006 | Отправлено: 00:04 30-12-2009 | Исправлено: ShIvADeSt, 03:49 30-12-2009
    JohnSilver182



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

    Цитата:
    JohnSilver182
    Думаю вам в сторону RTTI стоит глянуть.

     
    Ничего не понимаю, мне пишут что надо смотреть то Интерфейсы  то  на RTTI
    Вот не могу поверить что не у кого нет готового решения для   создания динамически форм и передача им параметров .  

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

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

    Цитата:
    Но я не знаю что писать после as TClass1 или TClass2  

    if (X is TClass1) then Caption := TClass1(X).IntegerVar  
    ну и вот так

    Код:
    type
      TAccount = class
      private
        fCustomer: string;
        fNumber: Cardinal;
        fBalance: Currency;
      end;
      TSavingsAccount = class(TAccount)
      private
        fInterestRate: Integer;
      end;
      TCheckingAccount = class(TAccount)
      private
        fReturnChecks: Boolean;
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.btn1Click(Sender: TObject);
    var
      c1 : TAccount;
    begin
      с1 :=nil;
      c1 := TSavingsAccount.Create;
      try
        //  if assigned(c1) then -- если нужно проверить что существует
          if (c1 is TSavingsAccount)  then begin
            TSavingsAccount(c1).fInterestRate := 3523;
            ShowMessage(IntToStr(TSavingsAccount(c1).fInterestRate));
          end;
      finally
        FreeAndNil(c1);
      end;  // try/finally
    end;
     

    Всего записей: 401 | Зарегистр. 18-04-2003 | Отправлено: 08:08 30-12-2009 | Исправлено: greenpc, 08:50 30-12-2009
    victorman2010

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    В компонент ClientDataSet загружаю xml файл, пишет Mismatch in datapacket. Неправильная структура xml-файла. ClientDataSet понимает только свою структуру. А если скачать другие компоненты для работы с xml? Подскажите пож какие компоненты и от куда. Суть проблемы: есть xml файл нужно отобразить его в DB Grid, отредактировать и записать обратно в файл. Заранее благодарен.

    Всего записей: 33 | Зарегистр. 16-12-2009 | Отправлено: 09:50 30-12-2009
    data man



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    victorman2010
    Попробуй OmniXML
    Там в файле OmniXMLDatabase.pas есть процедура XMLFileToDataset.
    Только в датасете должны быть поля с соответствующими именами.

    ----------
    Любой достаточно развитый тролль неотличим от подлинно помешанного на какой-либо идее.
    Кекс. Антибиотики. Ламбада.

    Всего записей: 1696 | Зарегистр. 13-10-2005 | Отправлено: 10:06 30-12-2009
    victorman2010

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    data man
    Спс, только я слаб в программировании, все равно ничего не понимаю: как эту процедуру подключить и настроить?  

    Всего записей: 33 | Зарегистр. 16-12-2009 | Отправлено: 11:09 30-12-2009
    ppkp

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    greenpc
    После try, в принципе, то же самое, что и было в постах. А перед try
    Цитата:
    c1 := TSavingsAccount.Create
    те же грабли - неизвестно что будет справа:либо писать case

    Всего записей: 480 | Зарегистр. 13-04-2006 | Отправлено: 11:30 30-12-2009 | Исправлено: ppkp, 11:42 30-12-2009
    volser

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

    Всего записей: 713 | Зарегистр. 31-03-2006 | Отправлено: 11:33 30-12-2009 | Исправлено: volser, 11:35 30-12-2009
    data man



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

    А чего же тогда сразу за XML-то ?

    Код:
    interface
    uses
      ..., OmniXMLDatabase;
     
    begin
        XMLFileToDataset('data.xml', MyDataSet, '', [odbIgnoreUnsupportedColumns, odbIgnoreMissingColumns]);
    end;


    ----------
    Любой достаточно развитый тролль неотличим от подлинно помешанного на какой-либо идее.
    Кекс. Антибиотики. Ламбада.

    Всего записей: 1696 | Зарегистр. 13-10-2005 | Отправлено: 11:37 30-12-2009
    greenpc

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ppkp
    ну и чем не устраевает или я что то не понимаю ?

    Код:
     
    case dataType of  
      dt1: c1 := TSavingsAccount.Create;  
      dt2: c1 := TCheckingAccount.Create;  
      else c1 :=nil;
    end;  
    if assigned(c1) then begin
      if (c1 is TSavingsAccount)  then begin // with (c1 as TSavingsAccount) do ...
    ...
     end else
      if (c1 is TCheckingAccount)  then begin  
    ...
     end;

    а если по-русски: пусть "с1" корзина и мы в нее что-то положили(.create)
    дальше спрашивем - это яблоко, тогда какого цвета или это колесо, тогда какой размер. Но главное в начале узнать точно что за предмет

    Всего записей: 401 | Зарегистр. 18-04-2003 | Отправлено: 12:44 30-12-2009 | Исправлено: greenpc, 13:17 30-12-2009
    ppkp

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

    Цитата:
    ну и чем не устраевает или я что то не понимаю  

    Все правильно и работает. Только не универсально. Если классов много, Case получится ну очень длинный. Отсюда следует, что вместо

    Цитата:
    if (c1 is TSavingsAccount)  then begin // with (c1 as TSavingsAccount) do  

     Var1:=1; Var2 :='aaa'; Var3 := False;
    код типа
      with c1 do for I:=0 to PropCout-1 do Prop[I] :=Val(I);
    смотрится изящнее. И потом, вызванный класс может передаваться в качестве параметра в Инспектор Объектов, например, а в Вашем варианте это невозможно(затруднительно).
    ЗЫ
    Цитата:
    Но главное в начале узнать точно что за предмет
    Это действмтельно главное. Но узнать класс можно не только перебором, а из поля ClassInfo в PropList

    Всего записей: 480 | Зарегистр. 13-04-2006 | Отправлено: 14:41 30-12-2009 | Исправлено: ppkp, 15:06 30-12-2009
    mdid

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

    Всего записей: 1298 | Зарегистр. 13-02-2006 | Отправлено: 01:52 02-01-2010 | Исправлено: mdid, 02:03 02-01-2010
    ShIvADeSt



    Moderator
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    mdid
    Иконки на рабочем столе - это элементы ListView (если память не изменяет). Для отслеживания появления надо как минимум делать перехват оконной процедуры проводника, и там отслеживать события для листвью. Из своей программы это не получится делать, так как надо внедрять библиотеку в адресное пространство проводника (иначе нормальный перехват не сделать насколько я знаю). Так как это не типовой вопрос - то предлагаю оформить отдельной темой. Правда не знаю, насколько это актуально - для внедрения процедуры надо иметь права админа, да и чревато это.

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

    Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 02:08 02-01-2010
    regkz



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    mdid
    можешь посмотреть на торри.нет раздел Components > Files and Drives > Notification, я для похожих целей использовал ATFileNotification когда-то

    Всего записей: 1128 | Зарегистр. 16-01-2007 | Отправлено: 05:54 02-01-2010
    mdid

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

    Всего записей: 1298 | Зарегистр. 13-02-2006 | Отправлено: 17:16 03-01-2010 | Исправлено: mdid, 19:45 03-01-2010
    regkz



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

    Цитата:
    можно поставить таймер на папку рабочего стола и отслеживать изменения

    можно, но нужно ли изобретать велосипед? компонент с исходными кодами, чего не хватает - можно дописать

    Всего записей: 1128 | Зарегистр. 16-01-2007 | Отправлено: 19:42 04-01-2010
    ShIvADeSt



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

    Цитата:
    правда с таким же успехом можно поставить таймер на папку рабочего стола и отслеживать изменения

    Так тебе иконки или все таки папки/файлы в директории рабочего стола? Это немного разные вещи.

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

    Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 09:51 05-01-2010
    murkovich



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

    Цитата:
    Это немного разные вещи.

    Ради интереса - а в чём оно такое разное? Ясно, что расположение иконок так не отследишь, но всё остальное ведь да? Плюс, разумеется, надо не на одну папку смотреть, а сливать вместе личную и публичную папки десктопа.

    Всего записей: 1551 | Зарегистр. 26-05-2005 | Отправлено: 12:26 05-01-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

    Компьютерный форум 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