[ Delphi / Pascal ] — начинающим: задаем вопросы (архивная - 2015)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by banned, 6 May 2007.

Thread Status:
Not open for further replies.
  1. RumShun

    RumShun Member

    Joined:
    27 Oct 2008
    Messages:
    283
    Likes Received:
    75
    Reputations:
    6
    SHAXID в
    dt:TdateTime;
    ...
    dt:=strtodate(edit1.text);
    ...
    dt уже заносишь в базу, вообще посмотри функции пераобразования типов в справочнике делфи.
     
  2. SHAXID

    SHAXID Elder - Старейшина

    Joined:
    13 Dec 2007
    Messages:
    24
    Likes Received:
    17
    Reputations:
    -6
    бле, что-то не до конца недопонял..можно, плиз, поподробнее описать?)
     
  3. patcher

    patcher Banned

    Joined:
    15 Dec 2009
    Messages:
    190
    Likes Received:
    37
    Reputations:
    10
    пробуй это:
    http://www.delphipages.com/comp/idrunner-987.html
     
  4. 0ldbi4

    0ldbi4 Elder - Старейшина

    Joined:
    14 Apr 2008
    Messages:
    264
    Likes Received:
    51
    Reputations:
    10
    Доброго времени
    Делаю фильтрацию поля ввода на числа, отфильтровал по аски кодам числа, еще возник вопрос какая запятая используется там их 2 или 3 и одна из них не численная какую фильтровать??
    Или может более рациональное решение подскажите
     
  5. StealthMaster

    StealthMaster Member

    Joined:
    3 Dec 2008
    Messages:
    52
    Likes Received:
    11
    Reputations:
    0
    Что ж так сложно то... Так не проще?

    Code:
    procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
    begin
      case Key of
        '0'..'9',',',#8:;
      else
        Key := #0;
      end;
    end;
    
     
  6. maks2012

    maks2012 New Member

    Joined:
    4 Dec 2009
    Messages:
    1
    Likes Received:
    0
    Reputations:
    0
    как в проге получить права для записи себя на диск, точнее в папку Programm Files в Windows 7, Vista
     
  7. =Zeus=

    =Zeus= Member

    Joined:
    10 Aug 2009
    Messages:
    213
    Likes Received:
    54
    Reputations:
    5
    Если нужно ТОЛЬКО для цифр, то этот код поможет:
    Code:
      SetWindowLong(Edit1.Handle, GWL_STYLE,
        GetWindowLong(Edit1.Handle, GWL_STYLE) or ES_NUMBER);
     
  8. 0ldbi4

    0ldbi4 Elder - Старейшина

    Joined:
    14 Apr 2008
    Messages:
    264
    Likes Received:
    51
    Reputations:
    10
    Зевс шикарно, но вот еще проблемка нужно еще точку подставить туда с нум пада, там флот значения могут быть.
     
    #5028 0ldbi4, 23 Dec 2009
    Last edited: 23 Dec 2009
  9. TrueBit

    TrueBit Member

    Joined:
    21 Nov 2009
    Messages:
    71
    Likes Received:
    19
    Reputations:
    4
    Пытаюсь разобраться в winsock.
    Возникла такая проблемка
    есть кусок кода:
    PHP:
    addr.sin_family:=AF_Inet;    
    addr.sin_port:=htons(80);   
    addr.sin_addr.S_addr:=inet_addr('127.0.0.1');
    Err(Connect(S,addr,SizeOf(TSockAddr)));
    этот код работает когда на одном ip один сайт,
    а как быть если на одном ip не один сайт?
    ведь при заходе на этот ip на сайт не попадаешь
     
  10. НTL

    НTL Elder - Старейшина

    Joined:
    26 Jan 2008
    Messages:
    715
    Likes Received:
    205
    Reputations:
    -26
    TrueBit, Посмотри это:
    http://www.sources.ru/delphi/internet/resolve_ip_to_host.shtml
    или это:
    http://www.sources.ru/delphi/delphi_resolve_host_to_ip.shtml
    Одно из них рабочие, а вот какое не помню...

    -------------------------------------------

    Как мне на Delphi сделать прогу которая бы висела в процессах (То есть без формы) и спокойно выполняла свою дела? Если создать Console Application, то будет висеть окно терменала...

    ПС, пока писал пост, подумал что если в Console Application запустить поток, то может быть терминальное окно уйдет?
     
  11. 0ldbi4

    0ldbi4 Elder - Старейшина

    Joined:
    14 Apr 2008
    Messages:
    264
    Likes Received:
    51
    Reputations:
    10
    Вот тут есть это
    _http://www.realcoding.net/article/view/250
     
  12. -CEREBRUM-

    -CEREBRUM- New Member

    Joined:
    20 Nov 2009
    Messages:
    8
    Likes Received:
    0
    Reputations:
    0
    Привет всем! Всех с наступающим новым годом!!! Задача: некоторая программа должна реагировать на события от мыши, глобально, например, при передвижении мыши по экрану (или клике в любой области экрана) должно происходить какое-либо действие (например, запись координат в файл или т.п.). Как это реализовать на с++ winapi? обязательно ли нужен хук или есть другие варианты? может, у кого-то кусочки кода есть? (событие может быть и от клавы, например, нажатие любой клавиши!)
     
    #5032 -CEREBRUM-, 24 Dec 2009
    Last edited: 24 Dec 2009
  13. patcher

    patcher Banned

    Joined:
    15 Dec 2009
    Messages:
    190
    Likes Received:
    37
    Reputations:
    10
    На мой взгляд у тебя два выхода - либо прятать форму, либо создавать приложение без форм.

    В первом случае производим такие действия с фомой:
    >BorderStyle = bsNone
    >Color = clSkyBlue
    >TransparentColor = True
    >TransparentColorValue = clSkyBlue>
    >На событие OnShow пишем такой код:
    Code:
    ShowWindow(Application.Handle, sw_Hide);
    Во втором случае:
    >Создаем ConsoleApplication
    >Удаляем (Стираем после program Project1) директиву {$APPTYPE CONSOLE}
     
  14. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    2 -CEREBRUM-
    <brainfuck>
    ты читать умеешь?
    >>> Как это реализовать на с++ winapi? <<
    Нахера ты это кинул в теме про делфи и паскаль? Если есть прекрепленная тема для этих языков.
    </brainfuck>

    Вообще такие вещи делаются через установку ловушек (SetWindowsHookEx )
    Но если тебе нужны координаты, то через определенное время просто получай координаты мышки (GetCursorPos). К примеру через цикл с паузой с маленьким интервалом ожидания или через таймер. И если координаты изменились, то сохрани их в файл.

    Если юзать SetWindowsHookEx то можно заюзать ловушку WH_JOURNALRECORD - для ней даже DLL писать не надо.
    Если юзать ловушку WH_MOUSE то нужна DLL.

    в 5005 статей по делфи есть статья - Создание мышиного перехватчика
    и там всё написано на winapi так что написать это на С++ несоставит труда
     
  15. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    2 patcher ппц ты жжеш. Если нужно скрыть форму, то ты выбрал самый жестокий вариант, который дает наибольшую нагрузку на ОС (за счет прозрачности)
    Такие вищи решаются намного проще.
    в файле проекта (*.dpr) нужно дописать Application.ShowMainForm := false; перед Application.Run;

    пример :
    Code:
      Application.Initialize;
      Application.CreateForm(TForm1, Form1);
      Application.ShowMainForm := false; // ВОТ ЭТО НУЖНО ВПИСАТЬ 
      Application.Run;
    
    Ну а если форма не нужна, то можно или консольный проект с убранной директивой что это консольная прога. Или создать обычный проект, удалить все формы и в dpr файле убрать всё лишнее. Но первый вариант проще )
     
    #5035 slesh, 24 Dec 2009
    Last edited: 24 Dec 2009
  16. a1ertso

    a1ertso New Member

    Joined:
    16 Dec 2009
    Messages:
    35
    Likes Received:
    0
    Reputations:
    0
    почти всю программу написал, осталось только заменить минимальное значение каждой строки матрици, на номер столбца в котором оно находится.

    Code:
    PROGRAM Project1; 
    {$APPTYPE CONSOLE} 
    uses 
    SysUtils; 
    
    CONST 
    n=9; // количество элементов массива 
    label prog1,prog2,ASD ; 
    
    TYPE 
    ar=array[1..n] of real; // объявление типа массива 
    VAR 
    a:ar; // исходный массив А 
    s:real; // сумма отрицательных элементов 
    i,ppp,m:integer; // счетчик элементов 
    begin 
    
    Writeln('Press 1 to program #1'); 
    Writeln('Press 2 to program #2'); 
    readln(ppp); 
    if ppp=1 then goto ASD; 
    begin 
    if ppp=2 then goto prog2; 
    // Ввод исходных данных 
    ASD: WriteLn('Type ', n, ' real elements of array:'); 
    for i:=1 to n do 
    Read(a); 
    writeln; 
    // Выполнение задачи 
    s:=0; m:=0; // начальное значение суммы 
    for i:=1 to n do // цикл перебора элементов массива 
    if (a>0) and (m<5) 
    then // выборка отрицательных элементов 
    begin 
    s:=s+a; // суммирование 
    m:=m+1; 
    end; 
    // Вывод результата 
    if s=0 then 
    WriteLn('Нет положительніх єлементов') 
    else 
    WriteLn(' S=',s:8:4); 
    WriteLn('***** Press <enter> to finish *****'); 
    Readln; // задержка экрана 
    Readln; 
    end; 
    end.
    
     
    #5036 a1ertso, 24 Dec 2009
    Last edited by a moderator: 24 Dec 2009
  17. n1ghtstalker

    n1ghtstalker Elder - Старейшина

    Joined:
    28 Sep 2008
    Messages:
    59
    Likes Received:
    3
    Reputations:
    0
    Эм товарищ массив тогда по задаче должен быть двумерный,а у вас одномерный.
    Для нахождения мин элемента сравниваете по строчно элементы,а потом в новый одномерный массив записывайте мин элемент.
    В новом цикле если a[i,j]=b then a[i,j]:=j; где j соответственно столбец.
     
  18. wolmer

    wolmer Member

    Joined:
    12 May 2009
    Messages:
    438
    Likes Received:
    97
    Reputations:
    9
    Во первых, мы соед. с сервером но не с сайтом, т.е. производится функция коннекта к серверу (а именно к порту сервера)(но не к сайту), к примеру мы приконнектились и хотим чтобы сервер нам выдал содержимое определенной страницы (в html виде естественно :) ), определенного сайта.
    Тогда пишем так (я забежал чуть вперед чтобы было понятно):
    Code:
    procedure TForm1.Button1Click(Sender: TObject);
    var
     sock:tsocket;
     addr:sockaddr_in;
    
     sendstring:string;
     sendbuffer, recvbuffer:array [0..4095] of char;
    
     dsize:dword;
    begin
     sock:=socket(af_inet, SOCK_STREAM, 0); //Указываем что хотим работать с TCP
     addr.sin_family:=af_inet;
     addr.sin_addr.S_addr:=inet_addr('81.177.9.119');//Ip тачки где расположен сайт gamecs.net
     addr.sin_port:=htons(80);
     if connect(sock, addr, sizeof(addr))=0 then //В случае если успешно подкл. к порту то...
      begin
        Showmessage('Соед. есть! Посылаем данные');
        sendstring:='GET http://gamecs.net/forum/index.php? HTTP/1.0'+#13#10+
                    //Говорим мол нам нужна страница broadcast.xml
    //Тут даем знать серверу какой нам нужен сайт
    'User-Agent: Opera/9.80 (Windows NT 5.1; U; en) Presto/2.2.15 Version/10.20'+#13#10+
    'Host: gamecs.net'+#13#10+
    'Cookie: pass_hash=aa1b56893b171c26e306a653c4074af1; session_id=6535fe43f9b89af027382d5c00ff2790; __utma=172773923.'+
    '2094703955.1261652832.1261652832.1261652832.1; __utmb=142773923; __utmc=142773923; __utmz=142773923.1261652832.1.1.utmccn=(direct)|utmcsr=(direct)|utmcmd=(none)'+#13#10+
    'Cookie2: $Version=1'+#13#10+
    'Connection: Keep-Alive'+#13#10+#13#10;
        CopyMemory(@sendbuffer, pchar(sendstring), length(sendstring));
        send(sock, sendbuffer, sizeof(sendbuffer), 0);
    
        repeat
          dsize:=recv(sock, recvbuffer, 4095, 0);
          memo1.lines.text:=memo1.lines.text+recvbuffer;
        until (dSize = 0) or (dSize = SOCKET_ERROR);
        //Принимаем полный HTML пакет
        //Правда там всякая фигня в конец дописывается но лень сейчас дореализовывать этот момент
      end
     else
      begin
        Showmessage('Соед. нету!');
      end;
    end;
    
    procedure TForm1.FormCreate(Sender: TObject);
    var
     ws:wsadata;
    begin
     WSAStartup($101, ws);
    end;
    Если что не понятно -> спрашивай
    (у gamecs.net тоже есть соседнии сайты)
     
  19. Thenno

    Thenno Member

    Joined:
    3 Jul 2009
    Messages:
    77
    Likes Received:
    21
    Reputations:
    0
    Собственно, как и говорил slesh. File->new->other->console application.
    Удаляем строчку {$APPTYPE CONSOLE} - так не будет показываться черное окно. Далее организуем бесконечный цикл, чтобы программа висела в памяти. Фленов в "Delphi глазами хакера" приводил такой вариант:

    Code:
    while GetMessage (Msg, HInstance, 0, 0) do
        begin
          TranslateMessage(msg);
          DispatchMessage(msg);
          //где-нибудь тут пишется свой код
        end;
    Но у меня на машине этот способ безбожно тормозил и грузил процессор на 100%, поэтому я делаю так:

    Code:
    while GetMessage (Msg, HInstance, 0, 0) do
        begin
          TranslateMessage(msg);
          DispatchMessage(msg);
          //где-нибудь тут пишется свой код
          Sleep(100);
        end;
    Может, можно делать как-то более правильно, но я честно не знаю как. Да и в принципе, меня так вроде устраивает.
     
  20. Vasek13

    Vasek13 Banned

    Joined:
    13 May 2009
    Messages:
    0
    Likes Received:
    2
    Reputations:
    -5
    Помогите с задачкой
    Вводить числа с клавиатуры пока их не станет больше пяти и не попадётся число 100

    Вот написал но что то ошибку пишет
    Program x3;
    VAR
    integer:x,i;
    Begin
    i:=0;
    while( i>=5) and (x=100) do
    begin
    readln(x);
    inc(i);
    end;
    end.

    В чем ошибка подскажите плз
     
Thread Status:
Not open for further replies.