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

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

    Joined:
    19 Jul 2005
    Messages:
    778
    Likes Received:
    324
    Reputations:
    83
    Имеем 2 переменные с временем к примеру
    12:21:15 и 15:26:30
    Есть ли готовая функция которая покажет сколько времени осталось от одного до второго?
     
  2. AtomoS

    AtomoS New Member

    Joined:
    17 Feb 2010
    Messages:
    88
    Likes Received:
    1
    Reputations:
    0
    создаю динамически форму Form1 и пытаюсь отловить нажатие на кнопку ? чтобы вывести сообщение.
    странно но не работает, хотя если создавать полное приложение - пашет. код программы help:

    PHP:
    program help;

    uses
      Windows
    MessagesSysUtilsVariantsClassesGraphicsControlsForms,
      
    DialogsStdCtrlsExtCtrlsXPman;

    type
      TForm1 
    = class(TComponent)
        
    constructor Create(AOwnerTComponent); override;
        
    destructor Destroyoverride;
      private
        
    procedure wmNCLButtonDown(var Msg TWMNCLButtonDown); message WM_NCLBUTTONDOWN;
        
    procedure wmNCLButtonUp(var Msg TWMNCLButtonUp); message WM_NCLBUTTONUP;
      
    end;

    var
      
    Form1TForm;

    constructor TForm1.Create(AOwnerTComponent);
    begin
      inherited
    ;
      
    Form1 := TForm(AOwner);

      
    with Form1 do
      
    begin
        Caption 
    := 'help button';
        
    Height := 100;
        
    Width := 250;
        
    Position := poDesktopCenter;
        
    BorderStyle := bsDialog;
        
    BorderIcons := [biSystemMenubiHelp];
      
    end;
    end;

    destructor TForm1.Destroy;
    begin
      inherited
    ;
    end;

    procedure TForm1.wmNCLButtonDown(var Msg TWMNCLButtonDown);
    begin
      
    if Msg.HitTest HTHELP then
      begin
        Msg
    .Result := 0;
      
    end
      
    else inherited;
    end;

    procedure TForm1.wmNCLButtonUp(var Msg TWMNCLButtonUp);
    begin
      
    if Msg.HitTest HTHELP then
      begin
        Msg
    .Result := 0;
        
    ShowMessage('сообщение');
      
    end
      
    else inherited;
    end;

    begin
      Application
    .Initialize;
      
    Application.CreateForm(TFormForm1);
      
    TForm1.Create(Form1);
      
    Application.Run;
    end.
     
  3. AtomoS

    AtomoS New Member

    Joined:
    17 Feb 2010
    Messages:
    88
    Likes Received:
    1
    Reputations:
    0
    функции вроде нету) но можно написать:

    PHP:
    function DateDiff(d1d2string): string;
    begin
      Result 
    := TimeToStr(StrToTime(d1) - StrToTime(d2));
    end;
    используем к примеру так:

    PHP:
    procedure TForm1.Button1Click(SenderTObject);
    begin
      Button1
    .Caption := DateDiff('12:21:15''15:26:30');
    end;
    ps: не самое элегантное исполнение
     
  4. AtomoS

    AtomoS New Member

    Joined:
    17 Feb 2010
    Messages:
    88
    Likes Received:
    1
    Reputations:
    0
    не знаю) недавно начал изучать этот подход.
    в php тоже просто есть конструктур и диструктор, которые вызываются первей всех и в последнию очередь соотвественно.
     
  5. AtomoS

    AtomoS New Member

    Joined:
    17 Feb 2010
    Messages:
    88
    Likes Received:
    1
    Reputations:
    0
    вижу вы не работали с help кнопкой.
    создавать никаких кнопок не нужно.

    я указал в создании формы - biHelp
    осталось отловить нажатие на неё.

    для этого используются 2 процедуры, описанные в private.
    в обычном варианте, это работает. при динамическом - нет.

    пример 1: стандартный проект | biHelp работает
    пример 2: динамическое создание формы | biHelp не работает
     
    #8725 AtomoS, 30 Dec 2011
    Last edited: 30 Dec 2011
  6. DooD

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

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    450
    Reputations:
    288
    проверяй-ка
    Code:
    procedure TForm1.wmNCLButtonDown(var Msg : TWMNCLButtonDown);
    begin
      if Msg.HitTest = HTHELP then
      begin
        Msg.Result := 0;
      end
      else inherited;
    end;
    
    procedure Tform1.wmNCLButtonUp(var Msg : TWMNCLButtonUp);
    begin
      if Msg.HitTest = HTHELP then
      begin
        Msg.Result := 0;
        ShowMessage('ñîîáùåíèå');
      end
      end;
    
    procedure TForm1.Button1Click(Sender: TObject);
    var
    f2: TForm1;
    begin
    f2 := tform1.Create(application);
    f2.Caption := 'help button';
    f2.Height := 100;
    f2.Width := 250;
    f2.Position := poDesktopCenter;
    f2.BorderStyle := bsDialog;
    f2.BorderIcons := [biSystemMenu, biHelp];
    
    f2.Show;
     
  7. AtomoS

    AtomoS New Member

    Joined:
    17 Feb 2010
    Messages:
    88
    Likes Received:
    1
    Reputations:
    0
    ничего не понял(
     
  8. DooD

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

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    450
    Reputations:
    288
    что не понял?возьми и проверь код,так ли он работает как ты хочешь..
     
    1 person likes this.
  9. Cherep

    Cherep New Member

    Joined:
    30 May 2010
    Messages:
    158
    Likes Received:
    1
    Reputations:
    -10
    Есть такая проблема. Шлю Post запрос, результат запроса идет в Memo1.
    Теперь собственно суть проблемы: Как сделать так, чтобы при последующем запросе
    Memo1 не перезагружался, а просто дополнялся следующим результатом запроса
     
  10. shadowrun

    shadowrun Banned

    Joined:
    29 Aug 2010
    Messages:
    842
    Likes Received:
    170
    Reputations:
    84
    Код в студию...
    Осмелюсь предположить, что вы используете следующий способ получения кода страницы...
    PHP:
    Memo.Text := IdHTTP.Post('http://krivieruki.ru'ParamData);
    А нужно использовать метод Memo.Lines.Add...
     
  11. Cherep

    Cherep New Member

    Joined:
    30 May 2010
    Messages:
    158
    Likes Received:
    1
    Reputations:
    -10
    возник ещё вопрос, в Memo висит текст, что-то типо:
    123456;qwerty
    и так очень много раз
    надо удалить все символы до двоеточия
    чтобы осталось онли:
    qwerty
     
  12. shadowrun

    shadowrun Banned

    Joined:
    29 Aug 2010
    Messages:
    842
    Likes Received:
    170
    Reputations:
    84
    Цикл, Delete(), Pos().
     
  13. Cherep

    Cherep New Member

    Joined:
    30 May 2010
    Messages:
    158
    Likes Received:
    1
    Reputations:
    -10
    можно код попобробнее?)
     
  14. alexey-m

    alexey-m Elder - Старейшина

    Joined:
    15 Jul 2009
    Messages:
    518
    Likes Received:
    100
    Reputations:
    37
    а может лучше подучить основы, тогда подобных вопросов будет меньше.
    по теме: delete, pos; Циклы: repeat, for, while
     
  15. Cherep

    Cherep New Member

    Joined:
    30 May 2010
    Messages:
    158
    Likes Received:
    1
    Reputations:
    -10
    вот сам код кнопки:
    [​IMG]
    результ:
    [​IMG]
    может кто помочь с этим? Или в коде что то не так?
     
  16. shadowrun

    shadowrun Banned

    Joined:
    29 Aug 2010
    Messages:
    842
    Likes Received:
    170
    Reputations:
    84
    for i := 0 to Memo1.Lines.Count - 1 do
    delete...
     
  17. alexey-m

    alexey-m Elder - Старейшина

    Joined:
    15 Jul 2009
    Messages:
    518
    Likes Received:
    100
    Reputations:
    37
    1) компилятор сообщает, что константа не может быть передана как параметр-переменная
    2) Memo1.Lines - это не тип string
    Code:
    procedure Delete([B]var Source: string[/B]; StartChar: Integer; Count: Integer);
    Code:
    procedure XYZ(S: TStrings);
    var
      i: Integer;
      sTmp: String;
    begin
      for i:= 0 to S.Count - 1 do begin
        sTmp:= S.Strings[i];
        delete(sTmp, 1, pos(':', sTmp));
        S.Strings[i]:= sTmp;
      end;
    end;
    
    ...........
    XYZ(Memo.Lines)
    ...........
     
  18. qaKEP

    qaKEP Banned

    Joined:
    25 Sep 2008
    Messages:
    22
    Likes Received:
    20
    Reputations:
    0
    Code:
    procedure TForm1.btn1Click(Sender: TObject);
    var n,i:integer;
    log, pas: string;
    pole:variant;
    Begin
    n:=mmo1.Lines.Count;
    for i:= 0 to n-1 do
    Begin
    Form1.tmr1.Enabled:=False;
    log:=copy(Mmo1.Lines[i],1, pos(';',Mmo1.Lines[i])-1);
    pas:=copy(Mmo1.Lines[i], pos(';',Mmo1.Lines[i])+1, length(Mmo1.Lines[i]));
    Form1.Wb1.OleObject.Document.getelementbyid('login').Value:=log;
    Form1.Wb1.OleObject.Document.getelementbyid('passwd').Value:=pas;
    Form1.tmr1.Enabled:=True;
    end;
    end;
    
    Значит вот на форме мемо гружу туда список login;pass, через webbrowser пытаюсь авторизоваться на яндексе и не могу нажать на кнопку. У не нет ID. Подскажите как быть?

    Второй вопрос - как вытащить кусок кода (html) например <b></b>? (без цикла ибо там тегов много.

    Спасибо большое.
     
  19. Timon132009

    Timon132009 Member

    Joined:
    7 Jun 2009
    Messages:
    137
    Likes Received:
    19
    Reputations:
    0

    Code:
    uses StrUtils;
    
    function parse(str, str2, ob: string): string;
    var
      res, s1, s2: string;
    begin
      s1 := Copy(ob, pos(str, ob) + length(str), length(ob));
      s2 := Copy(s1, 1, pos(str2, s1) - 1);
      result := s2;
    end;
    
    string := parse('<b>', '</b>', string);
    
     
    #8739 Timon132009, 2 Jan 2012
    Last edited: 2 Jan 2012
  20. cardons

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

    Joined:
    19 Jul 2005
    Messages:
    778
    Likes Received:
    324
    Reputations:
    83
    Имеем StringGrid с 3 колонками. Всего около 300 строк.
    В первой колонке имя оно не изменяется. Во второй фамилия. И в третей которая изменяется время до определенного момента в часах:минутах:секундах, то есть оно каждую секунду отсчитывается в обратную сторону. Задача сделать сортировку по 3 колонке чтобы первым стояло значение которое ближе всего к нужной дате.
    К примеру есть 3 строки в них
    1)0:24:54
    2)27:13:43
    3)0:26:34
    Задача выстроить все колонки исходя из времени то есть чтобы было.
    1)0:24:54
    2)0:26:34
    3)27:13:43
     
    1 person likes this.
Thread Status:
Not open for further replies.