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

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

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Продублирую здесь.
    Для блокировки прорисовки клиентской области родительской формы в MDI приложении использую конструкцию:  
     
      WindowLocked := LockWindowUpdate(ClientHandle);  
      try  
       Child := TEditForm.Create(Application);  
       ......  
      finally  
       if WindowLocked then  
        LockWindowUpdate(0);  
       Repaint;  
      end;  
     
    Но при этом блокировка происходит странно. В клиентской области всё-же прорисовывается рамка дочерней формы, затем прорисовка блокируется, затем появляется уже дочерняя форма.  
    Вопрос:  
    Как можно сделать чтобы в клиентской области ничего не происходило до момента полной загрузки дочерней формы (не прорисовывалась рамка дочерней формы)?

    Всего записей: 1665 | Зарегистр. 25-02-2008 | Отправлено: 14:38 28-06-2009
    Maks150988



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Aleksandr_N
     
    Возможно подойдет:

    Код:
    SendMessage(Handle, WM_SETREDRAW, Integer(FALSE), 0);

     
    А вообще где-то в поисковике попадалась какая-то еще функция по блокировке содержимого окна помимо LockWindowUpdate.

    Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 03:47 29-06-2009
    Aleksandr_N

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maks150988
    В связи с перерывом в работе форума не успел дописать, что использование WM_SETREDRAW не подходит т.к. при этом используемые панели TBX на основе Toolbar2000 начинают по непонятной причине лихорадочно дёргаться.  

    Цитата:
    помимо LockWindowUpdate

    попробуй вспомнить на досуге, я что-то не нашёл.

    Всего записей: 1665 | Зарегистр. 25-02-2008 | Отправлено: 12:00 29-06-2009
    delover

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

    Цитата:
    Ну, если он не может разобраться даже в моем коде, а ему надо дешево, надежно и сердито, тогда ему прямой путь к обычному калькулятору. Чем плох такой вариант? Но это уже не относится к теме - "Вопросы по Дельфи"!!!

    Хочу заметить, что некоторые вещи лучше не делать самостоятельно, ибо даже "Вопросы по Дельфи" очень широкий набор специальных знаний - специализаций. Я бы калькулятор не отважился написать.

    Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 14:27 29-06-2009
    ShIvADeSt



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

    Цитата:
    В связи с перерывом в работе форума не успел дописать, что использование WM_SETREDRAW не подходит т.к. при этом используемые панели TBX на основе Toolbar2000 начинают по непонятной причине лихорадочно дёргаться.  

    Погугли немного, может быть подойдет - вобщем окно делают минимизированным(может и не надо) и перемещают далеко за пределы родительского окна. После отрисовок (создания) возвращают на прежнее место.
    Во всех остальных случаях только WM_SETREDRAW видел.
    Вот тут кое что возможно поможет, другие хэндлы юзаются
    http://forum.vingrad.ru/forum/topic-123328.html

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

    Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 14:49 29-06-2009
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Aleksandr_N
    А кому вы WM_SETREDRAW посылаете? Надо его посылать самой MDI-области, то есть ClientHandle.
    ShIvADeSt
    А можно описание темы немного поправить:
    Цитата:
    Общие вопросы по дельфи, не связанные с узкой направленность

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 15:49 29-06-2009 | Исправлено: Frodo_Torbins, 15:56 29-06-2009
    Aleksandr_N

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ShIvADeSt
    Оригинальный способ, поищу, а

    Цитата:
    http://forum.vingrad.ru/forum/topic-123328.html

    возможно и прокатит.
    Frodo_Torbins
    WM_SETREDRAW естественно посылаю родительской форме. В данном случае это не главное по вышеуказанной причине.

    Всего записей: 1665 | Зарегистр. 25-02-2008 | Отправлено: 17:16 29-06-2009
    Maks150988



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Aleksandr_N
    Да что-то не получается найти. Я тогда случайно набрел на какой-то забугорный форум. =)
     
    Может кто поможет перевести вот этот код
     
    MenuBarXP
     
    для проекта
     
    iemenurebar3.rar
     
    Что еще за g_pMenuBar в функции MenuInputFilter

    Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 01:50 30-06-2009
    ShIvADeSt



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

    Цитата:
    А можно описание темы немного поправить:
    Цитата:
    Общие вопросы по дельфи, не связанные с узкой направленность

    Неа, число символов ограничено


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

    Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 04:53 30-06-2009
    Aleksandr_N

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maks150988
    Ладно, спасибо за труды. Попробую как-нибудь выкрутиться.

    Всего записей: 1665 | Зарегистр. 25-02-2008 | Отправлено: 11:41 30-06-2009
    ShIvADeSt



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

    Цитата:
    Что еще за g_pMenuBar в функции MenuInputFilter

    Это вот эта фигня
    # CMenuBarXP*     g_pMenuBar  = NULL;  
    судя по всему хэндл класса CMenuBarXP.

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

    Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 11:52 30-06-2009
    Maks150988



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ShIvADeSt
    Понятно. Все еще не теряю надежды в создании меню на ребаре. Смотрел исходный код Windows 2000, а именно Explorer и Internet Explorer и толком не нашел ничего, там вообще все на взаимодействии интерфейсов чтоли, ахтунг сплошной. И MSDN походу врет насчет стилей контролов - там некоторые вообще не используются. А ловушку для отлова показа меню так вообще непонятно где искать.
    Я вот все доделываю контрол гиперссылки и все интересно узнать как самому у себя в контроле отлавливать сообщение от WM_COMMAND. Ну что-то типа от обычной кнопки мы обрабатываем так:
     

    Код:
        WM_COMMAND:
          begin
            if (HiWord(wParam) = BN_CLICKED) then
              begin
                case LoWord(wParam) of
                  идентификатор:
                    действие;
                end;
              end;
          end;
     

     
    Тут мы ловим еще BN_CLICKED сообщение в сообщении WM_COMMAND. Так вот я  хочу в своем контроле перехватывать вот это все.
     
    Сейчас у меня просто выполняется ShellExecute по WM_LBUTTONUP, но это сулшком просто и непрактично. А данные об открываемой ссылке я храню в переменной типа string, котоая заполняется строкой другим сообщением.
     
    Итак, вот собственно я хочу , например, не только браузер открывать, но и вызывать другие функции, ну например, в своей программе я хочу открыть диалоговое окошко - что-то типа такой кнопки, но перерисовывать обычную кнопку неохота для таких целей чтобы просто что-то выполнить - заколебешься забклассить если их много, да и отрисовывать опять надо состояния, да и непрактично. Тут уже приходит на помощь свой контрол. И дешево и сердито и выполняет все что от него требуется.
     
    Смотрел я исходные коды тулбара. что-то связанное с GetWindowPtr. А дальше в сообщениях типа WM_CREATE там обрабатываются значения из специльной структуры.
    Но как таковых WM_COMMAND не нашел, а ведь он выполняет действие, точнее его кнопки при нажатии на них.
     
     
    Может кто знает в какую сторону копать...

    Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 12:48 30-06-2009
    ShIvADeSt



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

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

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



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ShIvADeSt
    Сорри, все, нашел. В функции контрола делаем так:

    Код:
        WM_LBUTTONUP:
          begin
            ReleaseCapture;
            SendMessage(hWnd, WM_KILLFOCUS, 0, 0);
            SendMessage(GetParent(hWnd), WM_COMMAND, GetDlgCtrlID(hWnd), 0);
          end;
     

    Я просто хочу сделать BltBtn полноценный - на основе исходников других контролов чего-то прицепляя к этому. Осталось только корректно соспоставить события для кнопки (наведение/отведение/нажатость) и все. А пример я чего-то потерял ваш.

    Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 15:26 30-06-2009
    IndII

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте!
    Все никак не могу разобраться с этими деструкторами в Delphi...  Надеюсь на вашу помощь...
    Есть несколько вопросов:
    1. Что делает метод Free? Как я понимаю, он вызывает деструктор, но кроме этого что-то еще... а что именно до меня не доходит...
    2. Вопрос уже по самим деструкторам...
    Допустим есть класс:

    Код:
    Test = class
        Label1 : TLabel;
        tst    : string;
     
        constructor Create;
        destructor  Destroy; override;
    end;
        
     
    В конструкторе происходит создание объекта Label1.
    Код деструктора:

    Код:
    inherited Destroy;
    Label1.Free;
        
     
    Тут я вызывал родительский (получается TObject) деструктор. Нужно ли это делать для нормального удаления объекта моего класса Test?
    И как вызывать этот мой деструктор? Если просто Free, то потом обращение к полю tst не вызовет никаких ошибок, то есть, как я понимаю, объект не совсем удалился...)
    Заранее спасибо...

    Всего записей: 5 | Зарегистр. 30-06-2009 | Отправлено: 16:41 30-06-2009 | Исправлено: IndII, 16:42 30-06-2009
    delover

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    IndII
    1. Метод Tst.Free; заменяет конструкцию типа:
    >    if  ( Tst<>nil )  then  Tst.Destroy;
    Писать Free получается короче.
     
    2. Объект удалился совсем, это точно. Но переменная Tst будет иметь то же самое значение, так как она будет указывать на кусок освобождённой памяти. Эту память ранее занимал объект класса Test. По нормальному inherited Destroy; надо писать всегда. Так как через пол года кто-нибудь может просто дописать:
    > Test = class   ( TForm )
    Да и в dotNet без inherited; нельзя.
     
    ps
    Вот бы калькулятор со скобками и не позволяющий вводить лишнюю закрывающую скобку. )

    Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 17:41 30-06-2009
    IndII

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    delover
    Ясно, большое спасибо...  
     
    И появилась еще одна проблемка... В одном проекте есть две формы. Вторая показывается как модальное окно при клике, допустим на кнопку первой формы.  
    Нужно, что бы при закрытии второй формы, первая обновилась (метод Refresh). Вроде бы просто, а как сделать не могу понять
    Пробывал просто прописать при клике на кнопку первой формы формы:

    Код:
    Forma2.ShowModal;
    Refresh;

    Не работает... Каким-нибудь образом еще это можно сделать?

    Всего записей: 5 | Зарегистр. 30-06-2009 | Отправлено: 17:59 30-06-2009
    volser

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    IndII
     
    Что значить обновилась? Перерисовалась или что бы обновились какие то данные?

    Всего записей: 713 | Зарегистр. 31-03-2006 | Отправлено: 22:10 30-06-2009
    gogaman



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    volser
    а если мне к примеру надо 2 сохранить и токо 1 запустить
    пробывал по анологии не получаеться сохраняет файлы с размером последнего сохраненого
    при некоторых манипуляциях ругаеться на некий поинтер

    Всего записей: 583 | Зарегистр. 22-06-2005 | Отправлено: 22:17 30-06-2009 | Исправлено: gogaman, 22:19 30-06-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