[ 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. blednii

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

    Joined:
    12 Jun 2007
    Messages:
    160
    Likes Received:
    23
    Reputations:
    -7
    Подскажите как в таком коде сделать чтоб было возможно вводить только целые числа больше 0

    Code:
    procedure TMainForm.Button1Click(Sender: TObject);
    begin
    if Length(Edit1.Text) = 0 then
    begin
    ShowMessage('Надо ввести состояние нового предмета');
    exit;
    end;
    kachestvo1:=StrToInt(Edit1.Text);
    if Length(Edit2.Text) = 0 then
    begin
    ShowMessage('Надо ввести состояние предмета по факту');
    exit;
    end;
    kachestvo2:=StrToInt(Edit2.Text);
    if Length(Edit3.Text) = 0 then
    begin
    ShowMessage('Надо ввести цену нового изделия');
    exit;
    end;
    cenanovogo:=StrToInt(Edit3.Text);
    if Length(Edit4.Text) = 0 then
    begin
    ShowMessage('Надо ввести размер комисcии');
    exit;
    end;
    komissija:=StrToInt(Edit4.Text);
    cenapokupki:=kachestvo1 / kachestvo2 * cenanovogo * (1-komissija/100);
    Label6.Caption:=FloatToStr(cenapokupki);
    cenaprodagi:=kachestvo1 / kachestvo2 * cenanovogo;
    Label8.Caption:=FloatToStr(cenaprodagi);
    end;
    
    
    с меня +
    =)
     
  2. МongBa†

    МongBa† Member

    Joined:
    12 May 2009
    Messages:
    66
    Likes Received:
    12
    Reputations:
    0
    Code:
    if Length(Edit1.Text) = 0 then
    begin
    ShowMessage(Надо ввести состояние нового предмета');
    exit;
    nd;
    
    try
    if strtoint(Edit1.Text)<=0 then
    begin
    ShowMessage('Надо ввести число больше 0');
    Exit;
    end;
    except
    ShowMessage('Надо ввести целое число!');
    Exit;
    end;
     
  3. blednii

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

    Joined:
    12 Jun 2007
    Messages:
    160
    Likes Received:
    23
    Reputations:
    -7
    Нето немножко, необходимо чтоб вводились только цифры
     
  4. cremator (c)

    cremator (c) Elder - Старейшина

    Joined:
    20 Jun 2008
    Messages:
    258
    Likes Received:
    72
    Reputations:
    0
    blednii, тебе всё правильно написали! Если будет введено не число то вылезет ошибка ShowMessage('Надо ввести целое число!');
     
  5. МongBa†

    МongBa† Member

    Joined:
    12 May 2009
    Messages:
    66
    Likes Received:
    12
    Reputations:
    0
    Понял что имеетсо =)
    в евенте эдита:
    Code:
    procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
    begin
     if (Key<'0') or (Key>'9') then Key:=chr(0);
    end;
    Чуть не забыл, держи с бекспейсом: if ((Key<'0') or (Key>'9')) and (ord(Key)<>8) then Key:=chr(0); :p
     
    #3585 МongBa†, 8 Jun 2009
    Last edited: 8 Jun 2009
    1 person likes this.
  6. #Wolf#

    #Wolf# Elder - Старейшина

    Joined:
    26 Mar 2008
    Messages:
    375
    Likes Received:
    166
    Reputations:
    16
    pascal нужно несколько задач простых
    case a of
    1, 21, 31, 41, 51, 61, 71, 81, 91: write ('рубль');
    2..4, 22..24, 32..34, 42..44, 52..54, 62..64, 72..74, 82..84, 92..94: write ('рубля');
    5..20, 25..30, 35..40, 45..50, 55..60, 65..70, 75..80, 85..90, 95..99: write ('рублей');
    end;
    вот придумал только так...но это нерационально очень..... и тем более до 999
    Вобще хз. Вот вся задача.
    За каждую +5 :) :rolleyes:
     
  7. slesh

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

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    2 МongBa† забыл проверять еще на знак минуса )
     
  8. iGlass

    iGlass New Member

    Joined:
    14 May 2009
    Messages:
    86
    Likes Received:
    1
    Reputations:
    0
    Всем доброго времени суток =)
    Ещё назрел вопросик -)

    Есть приложени и web-страница на которой нужно пройти авторизацию чтобы поучить Инфо о сетевом балансе. Если прошла авторизация то программа должна отобразить состояние баланса...

    Вот вопрос : Через что лучше реализовать и как примерно действовать ?

    Всем спасибо за ранее =)
     
  9. slesh

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

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    через wininet быстро и просто делается. Удобство в том, что поддержка SSL.
    А некоторые сайты какраз и юзаеют SSL при авторизации.
     
  10. iGlass

    iGlass New Member

    Joined:
    14 May 2009
    Messages:
    86
    Likes Received:
    1
    Reputations:
    0
    Я уж за Indy Взялся хотел через HTTP реализовать, но что то мутарно...
    Спасибо за совет =)

    Можно ещё немного помощи ? ;) А то я в wininet не особо рулю...
    Или хотя бы линк на справку по нему =)
    Заранее благодарен =)
     
    #3590 iGlass, 8 Jun 2009
    Last edited: 8 Jun 2009
  11. МongBa†

    МongBa† Member

    Joined:
    12 May 2009
    Messages:
    66
    Likes Received:
    12
    Reputations:
    0
    Неа, разве что проверку первого нуля, но эт так, для красоты... :p >>


    Вопросец... имеем уже авторизированное окно деда (mstsc) , ищем его
    Code:
    ter:=FindWindow(nil,pchar(host+' - Удаленный рабочий стол'));
    if ter<>0 then
    begin
     okno:=FindWindowEx(ter,0,nil,nil);
     while okno<>0 do
     begin
      GetClassName(okno,s,100);
      Form1.Memo1.Lines.Add(s);
      okno:=GetNextWindow(okno,GW_HWNDNEXT);
     end;
    Имеем основное окно ter и дочернее okno с классом TSCAXHOST , нужно послать нажатие Esc , пробую:
    PostMessage(ter,WM_SYSKEYDOWN,VK_ESCAPE,0);
    PostMessage(okno,WM_SYSKEYDOWN,VK_ESCAPE,0);
    не жмет.. (

    Как и какому именно окну в данном случае нужно слать нажатие кнопки?
     
  12. Nullsleep

    Nullsleep Member

    Joined:
    2 Jun 2009
    Messages:
    67
    Likes Received:
    26
    Reputations:
    0
    #Wolf#
    Code:
    var
      r: string;
      s: Char;
    begin
      Readln(r);
      s := r[Length(r)];
      if r[Length(r)-1] = '1' then Writeln(r+' рублей') else
      if s = '1' then Writeln(r+' рубль') else
      if (s = '2') or (s = '3') or (s = '4') then Writeln(r+' рубля') else
      Writeln(r+' рублей');
    end;
    
     
    #3592 Nullsleep, 8 Jun 2009
    Last edited: 8 Jun 2009
    1 person likes this.
  13. Nullsleep

    Nullsleep Member

    Joined:
    2 Jun 2009
    Messages:
    67
    Likes Received:
    26
    Reputations:
    0
    blednii
    Code:
    procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
    begin
      if not (Key in ['0'..'9']) then
      if Key <> #8 then Key := #0;
    end;
    
     
  14. Nullsleep

    Nullsleep Member

    Joined:
    2 Jun 2009
    Messages:
    67
    Likes Received:
    26
    Reputations:
    0
    МongBa†, попробуй SetForegroundWindow(okno), а потом:
    keybd_event(27, 0, 0, 0);
    keybd_event(27, 0, KEYEVENTF_KEYUP, 0);
     
  15. МongBa†

    МongBa† Member

    Joined:
    12 May 2009
    Messages:
    66
    Likes Received:
    12
    Reputations:
    0
    Не катит, окно становится активным но без нажатий... с другими окнами все проходит... видать здесь каверз непосредственно с Удаленным рабочим столом , мож кто сталкивался?
     
  16. Nullsleep

    Nullsleep Member

    Joined:
    2 Jun 2009
    Messages:
    67
    Likes Received:
    26
    Reputations:
    0
    ShowWindow(okno, SW_HIDE) тоже не катит?
     
  17. blednii

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

    Joined:
    12 Jun 2007
    Messages:
    160
    Likes Received:
    23
    Reputations:
    -7

    Это для целых, а как сделать чтоб еще и дробные можно было вводить?
     
  18. Nullsleep

    Nullsleep Member

    Joined:
    2 Jun 2009
    Messages:
    67
    Likes Received:
    26
    Reputations:
    0
    замени ['0'..'9'] на ['0'..'9', '.']
     
    2 people like this.
  19. МongBa†

    МongBa† Member

    Joined:
    12 May 2009
    Messages:
    66
    Likes Received:
    12
    Reputations:
    0
    Канает только для ter, кстати его класс TSSHELLWND
    В предыдущем варианте
    SetForegroundWindow(ter);
    keybd_event(27, 0, 0, 0);
    keybd_event(27, 0, KEYEVENTF_KEYUP, 0);
    И задержки расставлял, и кнопки менял - безуспешно, при чем сразу после выполнения кода я вручную нажал Esc и он сканал
     
  20. МongBa†

    МongBa† Member

    Joined:
    12 May 2009
    Messages:
    66
    Likes Received:
    12
    Reputations:
    0
    ВиньХР СП2
    выполнить - mstsc (mstsc.exe mstscax.dll версии 6.0.6000.16386)
    сервера:
    Code:
    202.171.79.128:3389
    62.208.74.243:3389
    216.139.166.111:3389
    200.14.52.87:3389
    210.7.7.84:3389
    114.129.25.212:3389
    88.83.0.226:3389
    216.139.166.81:3389
    195.219.65.148:3389
    202.3.242.196:3389
    81.18.226.126:3389
    123.50.85.52:3389
    123.50.85.1:3389
    202.3.245.61:3389
    115.84.65.112:3389
    208.66.48.194:3389
    41.202.167.24:3389
    Логинов пассов не знаю, собсно и состоит задача в том чтоб написать свежий многопотоковый брут на новом клиенте, заметил что актуальный на данный момент tss-brute - частенько пропускает верные пароли.
    Логинимся, и требуется в появившемся окне "127.11.22.33 - Подлючение к удаленному рабочему столу" нажать 2 раза Esc .
     
Thread Status:
Not open for further replies.