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

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

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

    Всего записей: 3142 | Зарегистр. 29-09-2005 | Отправлено: 13:42 01-12-2009
    ppkp

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите, пожалуйста, по TStringGrid
    OnSelectCell - Occurs before a cell in the grid is selected.
     
    А какой обработчик Occurs AFTER a cell in the grid is selected ?
    (Нужно выделить участок таблицы и запомнить его для последующих действий - удалить, вставить и т.д.). Спасибо.

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

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

    Цитата:
    OnSelectCell - Occurs before a cell in the grid is selected

    Насколько я помню, это говорит о том что, можно проверить, а может ли быть ячейка выбрана (т.е. можно запретить выделение определенных ячеек). Используя это событие можно узнать какая ячейка выделена.

    Всего записей: 4 | Зарегистр. 11-07-2006 | Отправлено: 02:09 02-12-2009
    snike555



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

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

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

    Всего записей: 652 | Зарегистр. 03-03-2009 | Отправлено: 09:15 02-12-2009
    ppkp

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

    Цитата:
    Определяйте выделенную область во время действий "удалить, вставить итд", а не после выделения

    Спасибо, действительно, так все получается.

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



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ситуация такая:
    Есть форма, на ней MDIChild окна, когда нажимаешь "свернуть" у MDIChild форма сворачивается к левому краю главного окна, мне нужно чтобы это было не так, а форма вовсе становилась невидимой. Решал эту проблему так:
     
    procedure TMDIchildForm.WMSize(var Msg: TWMSize);
    begin
      if Visible then
        begin
          if Msg.SizeType = SIZE_MINIMIZED then
            ShowWindow(Handle, SW_HIDE);
          inherited;
          if (Msg.SizeType = SIZE_MINIMIZED) and (ListIndex = form1.Tabs.TabIndex) then
            form1.Tabs.TabIndex := -1;
        end
      else
        inherited;
    end;
     
    Не знаю других вариантов, если они есть просьба подсказать их, потому что мой вариант в некоторых случаях вызывает AV екзепшен (при Destroy в непонятных мне случаях вызывается ресайз).
    Сейчас переношу проект на Delphi2010, возможно там появились какие-то возможности сделать это по другому.
     
    ЗЫ все посты типа "этот парень нафлудил" - являются флудом

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

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте. Пожалуйста помогите создать приложение , в котором по нажатию кнопки "шар" в клиентской области формы случайным образом периодически появляются и исчезают разноцветные окружности(выбор цвета случаен). Через каждые 30 секунд раздается звуковой сигнал. Форма меняет цвет. Через две минуты появляется вопрос о продолжении работы.  

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

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    pakusya
    Это задачка явно на работу с таймером TTimer.

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 19:46 02-12-2009
    V1s1ter



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

    Код:
     
    begin
      if Visible and (Msg.SizeType = SIZE_MINIMIZED) then
        begin
           ShowWindow(Handle, SW_HIDE);
           if Assigned(form1) and (ListIndex = form1.Tabs.TabIndex) then form1.Tabs.TabIndex := -1;
        end
      else
        inherited;
    end;  
     

     
     
    Добавлено:
    pakusya
    Вот рабочий код ля окружностей, а все остальное сам ручками...

    Всего записей: 948 | Зарегистр. 06-02-2007 | Отправлено: 20:51 02-12-2009
    psa1974



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

    Всего записей: 438 | Зарегистр. 08-11-2005 | Отправлено: 22:09 02-12-2009
    EugeneBoss3



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

    Всего записей: 247 | Зарегистр. 15-09-2009 | Отправлено: 02:53 04-12-2009
    Tantos



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

    ----------
    Чем больше узнаю людей, тем больше люблю компьютеры.

    Всего записей: 1038 | Зарегистр. 31-05-2005 | Отправлено: 04:55 04-12-2009
    Delta RuBoard



    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    всем снова привет. есть консольное приложение на winsock на подобии чата
    http://articles.org.ru/cfaq/index.php?qid=2207

    Код:
    program winsock_server;  
    //Простейшее приложение-сервер.
    //Сокеты работают в блокирующем режиме.
    //На каждое соединение создается отдельный поток.
    {$apptype console}
    uses
    sysutils,
    winsock,
    windows;
    var
    vwsadata : twsadata;
    vlistensocket,vsocket : tsocket;
    vsockaddr : tsockaddr;
    trid : thandle;
    const
    cport = word(33);
    csigexit = 'q';
    //Процедура отдельного потока для каждого клиента.
    procedure socketthread;
    var sockname : tsockaddr;
    abuf : array of char;
    vbuf : string;
    vsize : integer;
    s :tsocket;
    bufsize : integer;
    begin
    s := vsocket;
    if s = invalid_socket then exit;
    vsize := sizeof(tsockaddr);
    getpeername(s, sockname, vsize);
    writeln(format('client accepted, remote address [%s].',[inet_ntoa (sockname.sin_addr)]));
    //Определяем размер буфера чтения для сокета
    vsize := sizeof(bufsize);
    getsockopt(s,sol_socket,so_rcvbuf,pchar(@
    bufsize),vsize);
    writeln(format('receive buffer size [%d]',[bufsize]));
    setlength(abuf,bufsize);
    repeat
    //Получаем данные. Процедура работает в блокирующем режиме,
    //таким образом следующая строка кода не получит управление,
    //пока не поступят данные от клиента.
    vsize := recv(s,abuf[0],bufsize,0);
    if vsize<=0 then break;
    setlength(vbuf,vsize);
    lstrcpyn(@vbuf[1],@abuf[0],vsize);
    writeln(format('received from cleint: %s',[vbuf]));
    until vbuf = 'q';
    writeln(format('client disconnected, remote address [%s].',[inet_ntoa(sockname.sin_addr)]));
    setlength(abuf,0);
    closesocket(s);
    end;
     
    begin
    writeln('starting application...');
    //Объявляем, что программа будет использовать windows sockets.
    if wsastartup($101,vwsadata)<>0 then halt(1);
    writeln('using windows sockets.');
    //Создаем прослушивающий сокет.
    vlistensocket := socket(af_inet,sock_stream,ipproto_ip);
    writeln(format('creating socket on port [%d].',[cport]));
    if vlistensocket = invalid_socket then halt(1);
    fillchar(vsockaddr,sizeof(tsockaddr),0);
    vsockaddr.sin_family := af_inet;
    vsockaddr.sin_port := htons(cport);
    vsockaddr.sin_addr.s_addr := inaddr_any;
    writeln('binding socket...');
    //Привязываем адрес и порт к сокету.
    if bind(vlistensocket,vsockaddr,sizeof(tsockaddr)) <> 0
    then halt(1);
    //Начинаем прослушивать.
    if listen(vlistensocket,somaxconn) <> 0
    then halt(1);
    writeln('socket status: listening.');
    repeat
    //Ожидаем подключения.
    vsocket := accept(vlistensocket,nil,nil);
    //Клиент подключился, запускаем новый процесс на соединение.
    createthread(nil,0,@socketthread,0,0,trid);
    until false;
    closesocket(vlistensocket);
    wsacleanup;
    end.

     
     

    Код:
    {$apptype console}
     
    uses
    sysutils,
    winsock;
    const
    cport = 33;
    csigexit = 'q';
    var
    vwsadata : twsadata;
    vsocket : tsocket;
    vsockaddr : tsockaddr;
    buf : string;
    begin
    if wsastartup($101,vwsadata)<>0 then halt(1);
    vsocket := socket(af_inet,sock_stream,ipproto_ip);
    if vsocket = invalid_socket then halt(1);
    fillchar(vsockaddr,sizeof(tsockaddr),0);
    vsockaddr.sin_family := af_inet;
    vsockaddr.sin_port := htons(cport);
    vsockaddr.sin_addr.s_addr := inet_addr('127.0.0.1');
    if connect(vsocket,vsockaddr,sizeof(tsockaddr)) = socket_error then halt(1);
    repeat
    readln(buf);
    if send(vsocket,buf[1],length(buf),0) = socket_error then break;
    until buf = csigexit;
    closesocket(vsocket);
    wsacleanup;
    end.

    тоесть есть сервер, и есть клиент. при отправке сообщения от клиента оно выводится в консоле на сервере.
     
    вопрос.. как можно эту консоль перегнать в обычное приложение с формой?  
    я попробывал код с серверного скрипта загнать в функу онклик на буттон, назвав ее Start. дошел до
     

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

    и оно просто подвисает.. можно ли его сделать что бы оно обрабатывалось без кнопки? просто если я вместо writeln тупо вставляю Obj.Caption оно начинает ругатся на то что не знает что такое Obj

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

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

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

    Код:
     
    For I := 0 to Screen.FormCount - 1 do
      if Screen.Forms[I].Visible then
        memo2.Lines.Add(Screen.Forms[I].Caption);
     

    тоесть сделать внизу что то типа PageControl и каждую секунду проверять наличие окон?или можно как то по другому?

    Всего записей: 1298 | Зарегистр. 13-02-2006 | Отправлено: 10:10 04-12-2009
    greenpc

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    mdid
    не проще на форму в момент visible (invisible)
    добавлять/удалять в мемо?

    Всего записей: 401 | Зарегистр. 18-04-2003 | Отправлено: 10:53 04-12-2009
    mdid

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

    Всего записей: 1298 | Зарегистр. 13-02-2006 | Отправлено: 11:00 04-12-2009
    SIgor33

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как run-time определить версию Windows Installer и Net Framework

    Всего записей: 652 | Зарегистр. 03-03-2009 | Отправлено: 14:56 04-12-2009
    data man



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SIgor33
     
    В MiTeC System Information Component Suite версии определяются чтением из реестра путей к файлам msi.dll и mscorlib.tlb и получением их версий файлов.
    Только файлов mscorlib.tlb может быть несколько, поэтому нужно получать версию из них всех, и брать наиболее старшую версию.

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

    Всего записей: 1696 | Зарегистр. 13-10-2005 | Отправлено: 15:47 04-12-2009
    Frodo_Torbins

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    mdid
    В Screen.OnActiveFormChange можно ловить появление новых форм и навешивать им обработчик OnDestroy.
    Delta RuBoard
    То, что вы хотели повесить на кнопку, лучше впихнуть в отдельный поток.

    Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 17:31 04-12-2009 | Исправлено: Frodo_Torbins, 17:35 04-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