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

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

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    NOwlar
     
    Согласен, но mdid привел пример именно с рекордами, поэтому это ему поможет.
    Хотя с классами не работает

    Всего записей: 26 | Зарегистр. 28-12-2006 | Отправлено: 16:20 21-10-2009
    ppkp

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите, как узнать число элементов записи (хорошо бы еще и их имена и типы) в runtime?

    Код:
     
    type
       PMyRec = ^TMyRec;
       TMyRec = packed record
          Field1: boolean;
          Field2: double;
          Field3: string;
       end;
     
    var
      MyRec: PMyRec;
     

    В данном случае число полей MyRec^ равно 3. А в общем случае? Рыл по юниту TypInfo, похоже, что там должен быть ответ, но пока ничего не придумал. Спасибо.

    Всего записей: 480 | Зарегистр. 13-04-2006 | Отправлено: 16:51 21-10-2009
    pakusya

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Спасибо за объяснение Vladkyr. Помогите пожалуйста еще, нужно создать приложение в котором есть:
    Edit1(имя), Edit2(фамилия), Edit3(год рождения), Combobox1 с выпадающим списком(образование), RadioGroup1(пол(мужской, женский )). По нажатию кнопки "добавить" информация записывается в компонент Memo, расположенный в новой форме, в конец списка.  По нажатию кнопки "очистить" поля ввода должны очистится.
    Основную  программу написала, а как всю эту информацию поместить в новую форму и очистить сразу все поля не могу сделать. Объясните пожалуйста.
    Да и еще как можно предусмотреть невозможность ввода цифр ии символов в соответствующие поля Заранее спасибо.
     
     

    Всего записей: 21 | Зарегистр. 17-10-2008 | Отправлено: 17:00 21-10-2009
    Vladkyr

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    pakusya
    На счет второго вопроса, то если Delphi версии меньше 2010, то нужно писать самому обработку нажатий клавиш с проверкой ввода или использовать сторонние компоненты (например, бесплатные Rx) в которых есть компоненты с проверкой ввода. В delphi 2010 сразу есть проверка ввода только на цифры. Ну или можно использовать компонент TMaskEdit, если он подойдет по логике задачи.
    По первому вопросу не совсем понятно, что хочется. Очистить поля TEdit можно с помощью свойства Text (Edit1.Text := ''), а переписать значения полей в другую форму, также как и в прошлом ответе:

    Код:
     
     Form2.Memo1.Lines.Add(Edit1.Text);
     Form2.Memo1.Lines.Add(Edit2.Text);
    /// и так далее по всем полям. После очищаем
     Edit1.Text := '';
     Edit2.Text := '';
    // ...
     

    Всего записей: 26 | Зарегистр. 28-12-2006 | Отправлено: 17:18 21-10-2009
    psa1974



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

    Цитата:
    Да и еще как можно предусмотреть невозможность ввода цифр ии символов в соответствующие поля Заранее спасибо.

    Пишете себе такой обработчик события OnKeyPress у компонента Edit1:

    Код:
     
    procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
    begin
      if Key in ['0'..'9'] then
        Key:= #0; //это строка запрещает ввод символа
    end;
     

    В итоге в окно Edit1 можно будет вводить все символы кроме цифр.
    Можно расширить и на специальные символы, написав условие, например так (для Дельфи 2009-2010 так не будет работать с неангельскими символами - нюансы юникода, там надо по другому...):
     
    Код:
     
     if Key in ['0'..'9', 'А'..'Я','а'..'я'] then Key:= #0; // отлавливание цифр и всех русских букв
     if Key in ['0'..'9', 'А'..'Я'] then Key:= #0; // отлавливание цифр и только заглавных русских букв
      ... // другие варианты...
     

     
    А вот если надо запретить вводить любые симфолы КРОМЕ цифр, есть лучший способ:
    1. Пишете себе такую процедуру:

    Код:
     
    procedure SetNumberStyle(EditControl: TCustomEdit);
    var
      Style: Longint;
    begin
      Style:= GetWindowLong(EditControl.Handle, GWL_STYLE) or ES_NUMBER;
      SetWindowLong(EditControl.Handle, GWL_STYLE, Style);
    end;
     

    2. В Конструкторе формы пишете:

    Код:
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      Edit1.Text:= '';  
      SetNumberStyle(Edit1);
      // повторяем все для других Едитов, где должны вводиться только цифры.
    end;
     

     
     
    Добавлено:

    Цитата:
    По нажатию кнопки "очистить" поля ввода должны очистится

    Одним махом очистить ВСЕ окна ввода, лежащие на форме:

    Код:
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
      i: Integer;
    begin
      for I := 0 to ControlCount - 1 do
        if Controls[i] is TEdit then
          (Controls[i] as TEdit).Text:= '';
    end;
     

     
    Добавлено:
    pakusya
    тут рабочий пример, где почти все что вам требовалось: Ссылка

    Всего записей: 438 | Зарегистр. 08-11-2005 | Отправлено: 18:11 21-10-2009 | Исправлено: psa1974, 18:19 21-10-2009
    pakusya

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    огромное спасибо!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

    Всего записей: 21 | Зарегистр. 17-10-2008 | Отправлено: 05:24 22-10-2009
    SerBUser

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Delphi и Active Directory. Такой вопрос - как узнать - принадлежит ли пользователь указанной группе. Пример - пользователь Vasya в домене Domen1 принадлежит глобальной группе DG Internet Company. В домене Domen2 есть локальная группа DL InternetUsers, в которую входит группа DG Internet Company из домена Domen1. Как определить, принадлежит ли пользователь Domen1\Vasya группе DL InternetUsers в домене Domen2?

    Всего записей: 123 | Зарегистр. 31-08-2009 | Отправлено: 08:34 22-10-2009 | Исправлено: SerBUser, 08:35 22-10-2009
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ppkp
    RTTI для рекордов генерируется только если они содержат некий объект с управляемым временем жизни. Например строку или интерфейс. То есть вам надо сделать приблизительно так: http://alex.ciobanu.org/?p=55 Ну или можно использовать Delphi2010 там очень большие улучшения в плане RTTI.

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 17:52 22-10-2009
    ppkp

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Frodo_Torbins
    Спасибо, хоть что-то подобное. Но даже если я захвалил запись как класс и элементы его как property , не достать мне до них, пока не зарегистрировал их через RegisterPropertyEditor. А для этого нужно ставить published. А тогда компилятор ругается. Такой замкнутый круг.

    Всего записей: 480 | Зарегистр. 13-04-2006 | Отправлено: 15:03 23-10-2009
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ppkp
    Думаю что в делфи до D2010 с рекордом такое провернуть просто не возможно.

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 20:14 23-10-2009
    ppkp

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Можно, конечно, вместо рекорда написать класс - только он должен быть наследником как минимум TComponent. А у меня рекорд - ну максимум от TList

    Всего записей: 480 | Зарегистр. 13-04-2006 | Отправлено: 00:40 24-10-2009
    psa1974



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

    Цитата:
    ...только он должен быть наследником как минимум TComponent

    Не обязательно! Достаточно обрамить объявление класса диррективами {$M+}... {$M-} и для такого класса будет генерироваться RTTI-информация в любой Дельфи. Само собой только для опубликованных свойств. Пример:

    Код:
     
    type
    {$M+}
      TMyClass = class(TObject)
      private
        fField1: boolean;
        fField2: double;
        fField3: string;
      published
        property Field1: boolean read fField1 write fField1;
        property Field2: double read fField2 write fField2;
        property Field3: string read fField3 write fField3;
      end;
    {$M-}
     

    Тогда в результате выполнения следующего кода вылезет мессага с текстом "3":

    Код:
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
      MyClass: TMyClass;
      PropCount: Integer;
    begin
      MyClass:= TMyClass.Create;
      try
        PropCount := GetPropList(MyClass.ClassInfo, tkProperties, nil);
        ShowMessage(IntToStr(PropCount));
      finally
        MyClass.Free;
      end;
    end;
     

    Всего записей: 438 | Зарегистр. 08-11-2005 | Отправлено: 04:21 24-10-2009 | Исправлено: psa1974, 04:33 24-10-2009
    ppkp

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    psa1974
    Спасибо, знал про эти директивы - а тут вышибло. Сейчас попробую. Спасибо.

    Всего записей: 480 | Зарегистр. 13-04-2006 | Отправлено: 12:48 24-10-2009
    GrHnd



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

    Всего записей: 865 | Зарегистр. 01-04-2005 | Отправлено: 10:28 26-10-2009
    data man



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    GrHnd
    Например, взять здесь http://gp.17slon.com/gp/dsiwin32.htm DSiWin32.pas
    Помимо кучи полезного, там есть функция DSiGetProcessOwnerInfo.


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

    Всего записей: 1696 | Зарегистр. 13-10-2005 | Отправлено: 10:45 26-10-2009
    psa1974



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

    Цитата:
    Подскажите как узнать имя и домен пользователя текущего процесса?

    Смотри за # (приведен пример заполнения листбокса инфориацией о имени и домене пользователя для каждого активного процесса в системе в момент вызова)

    Всего записей: 438 | Зарегистр. 08-11-2005 | Отправлено: 11:10 26-10-2009
    Maks150988



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Привествую. Подкиньте плиз кто-нибудь pas файлы из 2009 или 2010 версий, желательно модули с прототипами функций Windows (обычно в директории Win лежит это добро). Также особо интересует IP Helper модуль. Он там есть или опять использовать JEDI версию которая не обновлялась толком?

    Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 17:35 26-10-2009
    psa1974



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maks150988
    Держи папку win из Дельфи 2010, разбирайся:
    Ссылка

    Всего записей: 438 | Зарегистр. 08-11-2005 | Отправлено: 19:16 26-10-2009 | Исправлено: psa1974, 19:16 26-10-2009
    Maks150988



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    psa1974
    А можно на народ диск или другой файлообменник? А то там просят премиум аккаунт для закачки файла.
     
    This file can only be downloaded by becoming a Premium member  
     
    There are no more download slots available for free users right now. If you don't want to become a premium member, you might want to try again later.

    Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 19:51 26-10-2009
    psa1974



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maks150988
    Так бы сразу и сказал . Лови (от Дельфи 2010, повтор):
    ifolder.ru
    narod.ru
    Единственное что - не понятно что имелось ввиду под
    Цитата:
    IP Helper модуль
    ...

    Всего записей: 438 | Зарегистр. 08-11-2005 | Отправлено: 20:22 26-10-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