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

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



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    EugeneBoss3
    Думаю, не ошибусь, если скажу, что все были бы рады, если бы ты скрывал такие длинные "излияния мыслей" под more или #.  Если не затруднит Ибо твой пост длиной в пару экранов - это перебор.

    Всего записей: 438 | Зарегистр. 08-11-2005 | Отправлено: 11:26 07-12-2009 | Исправлено: psa1974, 14:02 07-12-2009
    SIgor33

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите, пожалуйста, как отследить момент, когда в CD/DVD-ROM вставили диск? Если привода установлено 2,3... как заодно можно получить букву диска?

    Всего записей: 652 | Зарегистр. 03-03-2009 | Отправлено: 13:22 07-12-2009
    greenpc

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SIgor33
    так же как и момент вставки дискеты в флоппик, т.е никак.
    а наличие диска рекомендуют проверять с помощью свободного места на диске
    (GetDiskFreeSpace)
    хотя _http://www.delphisources.ru/pages/faq/base/cd_insert_notify.html

    Всего записей: 401 | Зарегистр. 18-04-2003 | Отправлено: 15:20 07-12-2009 | Исправлено: greenpc, 15:26 07-12-2009
    Delta RuBoard



    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    ребят, подскажите плиз как вот эти 2 куска кода

    Код:
    repeat  
    //Ожидаем подключения.  
    vsocket := accept(vlistensocket,nil,nil);  
    //Клиент подключился, запускаем новый процесс на соединение.  
    createthread(nil,0,@socketthread,0,0,trid);  
    until false;
     


    Код:
    repeat  
    readln(buf);  
    if send(vsocket,buf[1],length(buf),0) = socket_error then break;  
    until buf = csigexit;

    сделать корректно рабочими в делфи 7 форм апликейшн
     
     
    оригинальный пост

    ----------
    мой маленький блог
    Создание on-line игр

    Всего записей: 382 | Зарегистр. 21-06-2005 | Отправлено: 15:22 07-12-2009
    SIgor33

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

    Всего записей: 652 | Зарегистр. 03-03-2009 | Отправлено: 17:32 07-12-2009
    snike555



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Допустим есть объявление указателя вот такого
     
    var
      Form1 : TForm1;
     
    Как от Form1 добиться TForm1 пока не создан объект?
     
    Пробовал Form1.ClassName и Form1.ClassType, но пока объект не создан выдает AV.

    Всего записей: 380 | Зарегистр. 02-10-2009 | Отправлено: 18:05 07-12-2009
    psa1974



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    snike555
    Ясное дело, что будет AV при вызове Form1.ClassName когда сам Form1 еще не существует, я  бы на месте компилятора еще и цветасто выругался и по голове настучал...  
    ClassName  - метод, объявленный как class function и может вызываться применительно к типу класса (когда сам класс еще не создан):

    Код:
    TForm1.ClassName

    ClassType - обычный метод и может вызываться только применительно к существующему объекту. Без вариантов.
     
    А вообще - это азбука. Учи матчасть. Возьми какой-нибудь учебник типа Дельфи для чайников... Пожалуйста, не стоит топик захламлять такими вопросами.

    Всего записей: 438 | Зарегистр. 08-11-2005 | Отправлено: 20:11 07-12-2009
    snike555



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

    Цитата:
    А вообще - это азбука. Учи матчасть. Возьми какой-нибудь учебник типа Дельфи для чайников... Пожалуйста, не стоит топик захламлять такими вопросами.

     
    Поверь я не мало книжек прочитал по делфи и ответ не знаю, просто скажи ответ на мой вопрос без лишней воды, пожалуйста.

    Всего записей: 380 | Зарегистр. 02-10-2009 | Отправлено: 21:32 07-12-2009
    delover

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    snike555
    Тута смотря чё Вы хочите от компьютера, то он Вам и будет показывать, чаще нам хочется AV. Имхо. Теперь по существу.
    >Form1.ClassName  
    А что было перед этим оператором? Может быть Form1:=TForm1Predok84Potomok92.Create? И тогда какое имя хочется увидеть по правде? TForm1 или TForm1Predok84Potomok92?
    Получается дилема - Form1 это переменная, говоря классическим языком. А мы хотим чтобы она была не переменной а телепатом. К сожалению компьютер максимум может подвиснуть. Если мы хотим узнать тип этой переменной, то можно написать
    TForm1.ClassName.

    Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 21:47 07-12-2009
    psa1974



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    snike555
    Именно ответ я тебе и дал перед тем как высказал пожелание насчет самообразования - читай внимательно:  
     
    TForm1.ClassName  // буква Т в начале, я ее даже жирной сделал! Она говорит о том, что манипулировать надо с классом а не с переменной
     
    ЗЫ: delover тебе дал точно такой же совет. Других вариантов определения имени класса без создания объекта не существует.
     
    Добавлено
    Книга Тейксейра, Пачеко: "Borland Delphi 6. Руководство разработчика", глава "Глава 2. Язык программирования Object Pascal", раздел "Использование объектов Delphi", подраздел "Базовый класс — TObject", цитата:

    Цитата:
    Бла-бла-бла...(приведено описание методов класса)... Обратите внимание на методы, объявление которых начинается со слова class. Это означает, что метод может быть вызван как обычная процедура или функция без создания экземпляра класса, членом которого является данный метод. Бла-бла-бла...

    Книгу взял наугад.

    Всего записей: 438 | Зарегистр. 08-11-2005 | Отправлено: 21:55 07-12-2009 | Исправлено: psa1974, 22:09 07-12-2009
    snike555



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

    Цитата:
    TForm1.ClassName.

     
    Где вы тут переменную увидели?(и я знаю что так можно), подчеркиваю, мне требуется класс от переменной до создания объекта.
     
    Я задал конкретный вопрос, можно или нельзя, и если можно то как?
     
    Когда объект создан в переменную, я согласен, что можно получить только то что там создали.  
    Я ведь объявляю переменную не как Form1 : TForm; и поэтому мне кажется логичным какой-то способ получения TForm1 из Form1, даже пока объект не создан. Если это невозможно то так и скажите.

    Всего записей: 380 | Зарегистр. 02-10-2009 | Отправлено: 22:22 07-12-2009
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    snike555
    Невозможно. psa1974 и delover вам об этом уже несколько постов подряд пишут.

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 22:50 07-12-2009
    EugeneBoss3



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

    Всего записей: 247 | Зарегистр. 15-09-2009 | Отправлено: 03:20 08-12-2009
    andrewtishkin



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

    Цитата:
    так же как и момент вставки дискеты в флоппик, т.е никак.

    Ха, а чем же плохо сообщение WM_DEVICECHANGE для отслеживания поялвения CD/DVD-диска? Или это уже неактуально для новых ОС?..

    ----------
    111 222 [u]333[/u] [strike]епра[/strike] [size=3]пвр[/size] [sub]енн[/sub] [sup]ррр[/sup] :biggrin: [hr] [url=:javascript:alert("qwe")]ппп[/color]v 123 Мелкий шрифт

    Всего записей: 781 | Зарегистр. 28-08-2008 | Отправлено: 03:56 08-12-2009
    delover

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    snike555
    Вы, простите (из аськи немного слэнг вылез), из чего Вы хотите извлечь тип? Вырианты:
    1) Идентификатор типа.
    2) Идентификатор переменной объявленного типа.
     
    Вот варианты ответов:
    1) ShowMessage(PTypeInfo(TForm1.ClassInfo).Name);
    2) ShowMessage(PTypeInfo(Form1.ClassInfo).Name);
     
    В результате мы будем иметь только замену Form1.ClassName. Или PTypeInfo(TypeInfo(Integer)).Name. Функцию TypeInfo можно применять только с идентификатором типа, идентификатор переменной не является идентификатором типа. Любая переменная может быть равна NIL. Но принято что:
     
    Form1 := nil;
    if not (Form1 is TForm1) then
    raise Exception.Create('неправильный паскаль для оператора is');
     
    центральным инструментом логики ООП можно считать операторы AS и IS. Мне кажется Вы немного отвлеклись от их логики и хотите противореия.
     
    наилучшие пожелания

    Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 07:29 08-12-2009
    Delta RuBoard



    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Q_Q попробывал сделать процедуру при создании формы с кодом примерно следующим

    Код:
    repeat  
       i:=i+1;
       memo1.text := memo1.text + '1';
       sleep(100);
    untill i<5;

    получаю зависание делфи... вазап?

    ----------
    мой маленький блог
    Создание on-line игр

    Всего записей: 382 | Зарегистр. 21-06-2005 | Отправлено: 08:25 08-12-2009 | Исправлено: Delta RuBoard, 09:51 08-12-2009
    snike555



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Delta RuBoard
    http://www.weblibrary.biz/delphi/control/repeat
    untill i<5; - тут наоборот условие
    Кстати i не забудь явно объявить

    Всего записей: 380 | Зарегистр. 02-10-2009 | Отправлено: 08:58 08-12-2009
    greenpc

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    andrewtishkin
    WM_DEVICECHANGE не работает при выключеном авторане

    Всего записей: 401 | Зарегистр. 18-04-2003 | Отправлено: 09:46 08-12-2009
    Delta RuBoard



    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    да с обьявлением все нормально.. про условие не знал... еще вопрос такой sleep(1000) как я понял это задержка в 1 секнду. спать будет вся прога или же оно будет работать в фоне? ну тоесть если я сделаю sleep(10000000) то программа начнет работу после слипа, или она начнет работать, но слип будет спать в фоне?

    ----------
    мой маленький блог
    Создание on-line игр

    Всего записей: 382 | Зарегистр. 21-06-2005 | Отправлено: 09:47 08-12-2009
    snike555



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

    Цитата:
    ну тоесть если я сделаю sleep(10000000) то программа начнет работу после слипа, или она начнет работать, но слип будет спать в фоне?

     
    Полностью программа будет спать, начнет работать после слипа.

    Всего записей: 380 | Зарегистр. 02-10-2009 | Отправлено: 10:28 08-12-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