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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (до версии 2009) - часть 6

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125

Открыть новую тему     Написать ответ в эту тему

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Продолжение темы Вопросы по Delphi (до версии 2009) - часть 5

Познаем сами, помогаем другим...
Обсуждаем вопросы, не связанные с юникоидными версиями Delphi - для этого есть соответствующая тема (см. ссылки ниже).


 
Правила топика:
    Прежде чем спрашивать:
  1. Желательно изучить вопрос, попытаться найти ответ в прилагаемых мануалах, хелпах и анализируя исходники.
  2. Выполнить поиск по топику (открыть "Версия для печати" и поискать ответ там).
  3. Применить фильтр по разделу "Прикладное программирование". Ответы на многие старые вопросы могли быть даны в отдельных темах.
  4. Продумайте вопрос. На поверхностные вопросы вы получите поверхностные ответы, или вообще ответов не получите.
  5. Желательно указывать версии используемого компилятора и операционной системы.
    Прежде чем отвечать:
  1. Если не можете помочь, не мешайте.
  2. Если уж вы отвечаете на вопрос, давайте ответ по сути.
  3. Если вы не уверены, так и говорите! Ошибочный, но авторитетно звучащий ответ хуже, чем отсутствие ответа.
  4. Задавайте дополнительные вопросы, чтобы получить больше информации.
  • Отсутствие ответа не равносильно игнорированию - иногда участники форума просто не знают ответ. Повторная посылка вопроса не приветствуется. Посты типа "неужели никто не знает ответа..." или "может мне все-таки кто-нибудь ответит" недопустимы.  
  • Все большие куски кода (более 5 строк) оформляем в тег [morе] дабы уменьшить размер поста. FAQ по тегу [morе].


    Некоторые "родственные" топики:
     
  • Вопросы по Delphi (версии 2009-2010 Weaver)
  • Вопросы по компонентам для Delphi, C++ Builder
  • Использование DevExpress
  • Вопросы по Ehlib
  • Компоненты и утилиты для Delphi/BCB/FreePascal/Lazarus - только Open Source
  • Коммерческие компоненты и утилиты для Delphi/BCB
  • кабак программистов :)
     
    См. также: Некоторые полезные ресурсы о Delphi
     
    И старайтесь, чтобы ваш код не попал сюда :)

  • Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 05:13 19-05-2010 | Исправлено: akaGM, 02:33 15-07-2020
    Man_Without_Face



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всем привет. Есть форма на ней две кнопки: первая запускает процедуру формирования, вторая закрывает форму (Close;). При формировании, кнопка закрытия формы не работает (как бы сделать отмену формирования и закрыть форму). Подскажите как сделать (что то слышал про потоки, но не думаю что разберусь).

    Всего записей: 381 | Зарегистр. 25-01-2010 | Отправлено: 15:16 30-06-2010
    volser

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Man_Without_Face
    Можно сделать с помощью флага. Кнопка закрытия устанавливает какой то флаг. Процедура формирования проверяет этот флаг, если установлен прервать выполнение процедуры. Для того что бы нажималась сама кнопка закрытия нужно в цикле процедуры формирования писать Application.ProcessMessages.

    Всего записей: 713 | Зарегистр. 31-03-2006 | Отправлено: 16:36 30-06-2010
    Man_Without_Face



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

    Цитата:
    Application.ProcessMessages.

    Это есть...
    А про флаги если можно поподробнее как сделать или где можно прочитать? Спасибо.
     
     
    Добавлено:
    Сделал так: на отмену присваиваю переменной значение, напр. 1. При формировании в цикле проверяю переменную, если =1 тогда exit. Вроде работает, но правильно ли это?

    Всего записей: 381 | Зарегистр. 25-01-2010 | Отправлено: 16:50 30-06-2010
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Man_Without_Face
    Все правильно, volser вам как раз об этом варианте и говорил. Только проследите, чтобы никакие левые кнопки нажать нельзя было, например кнопку закрытия формы.

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 22:15 30-06-2010
    Sashunya79

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ребят помогите! Веб серверу методом POST нужно послать высылать файл yyy.gz .  
    Т.е. структура POST запроса должна быть вида:

    Код:
     
    -----------------------------15890672924370
    Content-Disposition: form-data; name="backup"; filename="yyy.gz"
    Content-Type: application/x-tar
     
    <сам файл>
     
    -----------------------------15890672924370--
     

     
    Т.К. опыта в программировании такого рода не имею, почитал на форумах, что можно использовать INDY. Попытался отправить следующее:
     

    Код:
     
    procedure TForm1.Button3Click(Sender: TObject);
    var
    Stream: TStringStream;
    Params: TIdMultipartFormDataStream;
    begin
    try
    Stream := TStringStream.Create('');
    try
    Params := TIdMultipartFormDataStream.Create;
    try
    Params.AddFile('mos.gz', 'C:\yyy.gz','application/octet-stream');
     
    try
    idHttp1.Post('http://192.168.1.4/cgi-bin/services.cgi?action=restore&mod=core',Params, Stream);
    Memo1.Lines.Text:=Stream.DataString;
    except
    on E: Exception do
    ShowMessage('Error encountered during POST: ' + E.Message);
    end;
    //ShowMessage(Stream.DataString);
    finally
    Params.Free;
    end;
    finally
    Stream.Free;
    end;
    except
    end;
    end;
     

     
    В результате файл не загружается. Хоть ткните где почитать можно.

    Всего записей: 59 | Зарегистр. 02-08-2009 | Отправлено: 15:40 03-07-2010 | Исправлено: Sashunya79, 15:40 03-07-2010
    SIgor33

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

    Всего записей: 652 | Зарегистр. 03-03-2009 | Отправлено: 17:13 05-07-2010
    Frodo_Torbins

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

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 17:29 05-07-2010
    Bonivur



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Есть форма, на ней компонент PageControl. На первой Page - Image. Надо сделать так, чтобы при нажатии на остальные вкладки этот Image на них присутствовал. Делать копии этого компонента и пихать на каждую вкладку - не вариант. Пробовал делать  
     
    Image1.Parent := PageControl1.ActivePage;
     
    работает, но при переходе между вкладками периодически изображение "моргает". Есть ли способ избавиться от этого артефакта?

    ----------
    Что будет стоить тысяча слов когда важна будет крепость руки? (В.Цой)

    Всего записей: 655 | Зарегистр. 22-06-2003 | Отправлено: 18:53 05-07-2010
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Bonivur
    Установите каждому табшиту DoubleBuffered=True (оно public).
    Цитата:
    Делать копии этого компонента и пихать на каждую вкладку - не вариант.
    Это из за расхода ресурсов? Так ведь почти все классы, реализующие поддержку графических форматов, используют наследников TSharedImage. Другое дело, что мигать все равно будет.

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 20:52 05-07-2010 | Исправлено: Frodo_Torbins, 20:53 05-07-2010
    Bonivur



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

    Цитата:
    Установите каждому табшиту DoubleBuffered=True (оно public).

    Установил. Если не применять темы, то помогает. С темами - нет, только чуть уменьшает мигание. Причем как-то странно все это - 5 раз понажимаешь вкладки - мерцания нет, а потом - РАЗ! и моргнет. Почему тогда каждый раз не мигает? Где собака порылась?

    ----------
    Что будет стоить тысяча слов когда важна будет крепость руки? (В.Цой)

    Всего записей: 655 | Зарегистр. 22-06-2003 | Отправлено: 23:00 05-07-2010 | Исправлено: Bonivur, 23:06 05-07-2010
    SIgor33

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

    Цитата:
    Создать базовый класс дочернего окна и наследовать остальные от него?

    Примером не богат, чтобы посмотреть как грамотно сделать

    Всего записей: 652 | Зарегистр. 03-03-2009 | Отправлено: 09:43 06-07-2010
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Bonivur
    Цитата:
    С темами - нет, только чуть уменьшает мигание.
    Тогда в дополнение к DoubleBuffered еще уберите стиль csParentBackground у каждого табшита:
    Код:
    TabSheet1.ControlStyle := TabSheet1.ControlStyle - [csParentBackground];

    Цитата:
    Причем как-то странно все это - 5 раз понажимаешь вкладки - мерцания нет, а потом - РАЗ! и моргнет. Почему тогда каждый раз не мигает? Где собака порылась?
    Добро пожаловать в мир многопоточных операционных систем
     
    SIgor33
    Приблизительно так: http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1375

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 13:32 06-07-2010 | Исправлено: Frodo_Torbins, 13:32 06-07-2010
    Bonivur



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

    Цитата:
    Тогда в дополнение к DoubleBuffered еще уберите стиль csParentBackground у каждого табшита:  
    Код:TabSheet1.ControlStyle := TabSheet1.ControlStyle - [csParentBackground];

    Я так понял, что это надо в Create формы вставить?  

    Код:
     
    for i := 0 to PageControl.PageCount - 1 do
        PageControl.Pages[i].ControlStyle := PageControl.Pages[i].ControlStyle - [csParentBackground];
     

    Правильно? Все равно не помогает. Может как-нибудь Invalidate присобачить? Я пробовал вызывать его при смене активной вкладки - результата ноль.

    ----------
    Что будет стоить тысяча слов когда важна будет крепость руки? (В.Цой)

    Всего записей: 655 | Зарегистр. 22-06-2003 | Отправлено: 01:11 07-07-2010
    Man_Without_Face



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Доброго времени суток. Есть переменная с суммой (например 2552) и переменная с минимальной купюрой (например 10). Нужно в Delphi или в Sql запросе округлить сумму до минимальной купюры (итог 2550).

    Всего записей: 381 | Зарегистр. 25-01-2010 | Отправлено: 11:55 07-07-2010
    ShIvADeSt



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

    Цитата:
    Доброго времени суток. Есть переменная с суммой (например 2552) и переменная с минимальной купюрой (например 10). Нужно в Delphi или в Sql запросе округлить сумму до минимальной купюры (итог 2550).  

    Div тебе в помощь, что то типа
    y = (Sum div MinCupura) * MinCupura;


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

    Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 12:00 07-07-2010
    Man_Without_Face



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ShIvADeSt
    ок, спасибо. Но а если сумма будет 12,126; мин. купюра 0.01. Тогда получаем 12,12, а не нужные 12,13? Может какие-нибудь функции есть?
     
     
    Добавлено:
    округление должно быть или в большую или в меньшую сторону

    Всего записей: 381 | Зарегистр. 25-01-2010 | Отправлено: 12:12 07-07-2010
    greenpc

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Man_Without_Face
    Trunc((sum/mincup)) * mincup
    или Trunc((sum/mincup)+0.5) * mincup // для ваших примеров
    както так (см. так же ф-ция round, math.roundto)
    ну и в качестве дополнения  
    _http://www.delphikingdom.com/asp/viewitem.asp?catalogID=1217
    _http://www.sql.ru/forum/actualthread.aspx?tid=412838

    Всего записей: 401 | Зарегистр. 18-04-2003 | Отправлено: 14:33 07-07-2010 | Исправлено: greenpc, 15:04 07-07-2010
    Man_Without_Face



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

    Цитата:
    Trunc((sum/mincup)+0.5) * mincup
    Так правильно.
    Вроде все нормально работает, но статейки тоже почитаю.
     

    Всего записей: 381 | Зарегистр. 25-01-2010 | Отправлено: 15:13 07-07-2010
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Bonivur
    На счет OnCreate не уверен, на всякий случай проверьте в рантайме вдруг сбрасывается. Вообще демку бы, так как у меня все работает без мелькания.

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 19:49 07-07-2010
    Maks150988



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

    Код:
     
    if ((hToolTip <> 0) and IsWindowVisible(hToolTip)) then
     

     
    Соответсвенно интересует последовательость выполнения его. Я так понимаю сначала выполнится проверка на нуль, дальше в дело пойдет функция IsWindowVisible. Но... Может быть корректнее код такой?
     

    Код:
     
    if ((hToolTip <> 0) then
      if IsWindowVisible(hToolTip)) then
     

     
    Здесь вроде как точно понятно что если hToolTip будет равен нулю - дальше не пойдем, а там ведь я так понял задействованы 2 проверки сразу на успешность. Все-таки как правильнее писать код?

    Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 22:22 07-07-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 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (до версии 2009) - часть 6


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru