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

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

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

    pira New Member

    Joined:
    8 Dec 2008
    Messages:
    7
    Likes Received:
    0
    Reputations:
    0
    Помогите упростить исходник пожалуйста. Программка у меня работает, но написано по-нубовски. :)
    Можно же что-то из этого переписать на function

    Code:
    unit auth;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
      IdHTTP, ExtCtrls, RXShell, RXClock, ComCtrls;
    
    type
      TForm5 = class(TForm)
        http1: TIdHTTP;
        Button1: TButton;
        Button2: TButton;
        Edit1: TEdit;
        Edit2: TEdit;
        Label1: TLabel;
        Label2: TLabel;
        Timer1: TTimer;
        RxTrayIcon1: TRxTrayIcon;
        Memo1: TMemo;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure RxTrayIcon1DblClick(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure Timer1Timer(Sender: TObject);
      private
        { Private declarations }
      public
      procedure OnMinimize(Sender: TObject);
        { Public declarations }
      end;
    
    var
      Form5: TForm5;
    
    implementation
    
    {$R *.dfm}
    // Сворачивание в трей.
    procedure TForm5.FormCreate(Sender: TObject);
    begin
    Application.onMinimize:=OnMinimize;
    end;
    
    procedure TForm5.OnMinimize(Sender: TObject);
    begin
    RxTrayIcon1.Show; //Показываем иконку в трее
     ShowWindow(Application.Handle,SW_HIDE); //Скрываем окно приложения
      end;
    
    procedure TForm5.RxTrayIcon1DblClick(Sender: TObject);
    begin
     Application.Restore; //Восстанавливаем окно
     SetForeGroundWindow(Application.MainForm.Handle); //Активизируем окно
      RxTrayIcon1.Hide; //Прячем иконку из трея
    end;
    
    // Запуск висения.
    procedure TForm5.Timer1Timer(Sender: TObject);
    var params,responseres:tstringlist;
    begin
    params:=TStringList.Create;
    responseres:=TStringList.Create;
    try
    responseres.Text:=http1.Post('http://www.dmbchat.ru/refresh.php?say=aoaiaa&addr=Aey',params);
    if Pos('refresh.php',responseres.Text)>0 then Memo1.Lines.Add('Вы успешно написали фразу.')
    else Memo1.Lines.Add('Вы не в чате. Перезаходим.');
    while Pos('refresh.php',responseres.Text)<=0 do begin
    Button1.Click;
    Exit;
    end;
    finally
    params.free;
    responseres.free;
    end;
    end;
    
    // Вход в чат.
    procedure TForm5.Button1Click(Sender: TObject);
    var params,responseres:tstringlist;
    Login, Password: string;
    begin
    params:=TStringList.Create;
    responseres:=TStringList.Create;
    try
    Login:= Edit1.Text;
    Password:= Edit2.Text;
    params.Add('login='+Login);
    params.Add('password='+Password);
    responseres.Text:=http1.Post('http://www.dmbchat.ru/login.php',params);
    if Pos('refresh.php',responseres.Text)>0 then
    Memo1.Lines.Add('Вы успешно вошли в чат.')
    else Memo1.Lines.Add('Ошибка! Вы не вошли в чат.');
    finally
    params.free;
    responseres.free;
    end;
    while (Edit1.Text='') or (Edit2.Text='') or (Length(Edit1.Text) < 2) or (Length(Edit2.Text) < 5) do begin
    ShowMessage ('     Логин или Пароль введён неверно.');
    Exit;
    end;
    Edit1.Enabled:=False;
    Edit2.Enabled:=False;
    Button2.Enabled:=True;
    Timer1.Enabled:=True;
    end;
    
    // Выход из чата.
    procedure TForm5.Button2Click(Sender: TObject);
    var params,responseres:tstringlist;
    begin
    params:=TStringList.Create;
    responseres:=TStringList.Create;
    try
    params.Add('exit');
    responseres.Text:=http1.Post('http://www.dmbchat.ru/logout.php',params);
    finally
    params.free;
    responseres.free;
    end;
    Timer1.Enabled:=False;
    Edit1.Enabled:=True;
    Edit2.Enabled:=True;
    Button2.Enabled:=False;
    end;
    
    end.
     
  2. Chaak

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

    Joined:
    1 Jun 2008
    Messages:
    1,059
    Likes Received:
    1,067
    Reputations:
    80
    это delphi а не c++
     
    1 person likes this.
  3. pira

    pira New Member

    Joined:
    8 Dec 2008
    Messages:
    7
    Likes Received:
    0
    Reputations:
    0
    Так это общая ветка "С/С++, C#, Delphi, .NET, Asm".
     
  4. ph1l1ster

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

    Joined:
    11 Mar 2008
    Messages:
    396
    Likes Received:
    153
    Reputations:
    19
    нет. читать умееш? [c/c++] Новичкам: задаем вопросы
    http://forum.antichat.ru/thread39636.html
     
    1 person likes this.
  5. gyunter

    gyunter New Member

    Joined:
    7 May 2008
    Messages:
    1
    Likes Received:
    3
    Reputations:
    0
    Как можно в графическом режиме вевести некоторое числовое значение?
    Пробовал функцию outtextxy как в паскале, но значение перменной с её помощью вывести не получается...

    Заранее благодарю :)

    Вот тут я пытаюсь вывести координаты на экран, чтобы получилось что-то вроде числовой линии.
    Code:
    for (dx=0;dx<=maxx;)
    	{
    	 outtextxy(dx,y2-30,"здесь_надо_вывести_значение_dx");
    	 dx=dx+40;
    	}
    
     
    #2645 gyunter, 8 Apr 2009
    Last edited: 8 Apr 2009
  6. razb

    razb Active Member

    Joined:
    24 Mar 2009
    Messages:
    658
    Likes Received:
    133
    Reputations:
    18
    Code:
    char buffer[20];
    
    sprintf(buffer, "%d", 12345);
    outtextxy(x, y, buffer);
    
    устроит?)
     
    #2646 razb, 8 Apr 2009
    Last edited: 8 Apr 2009
  7. gyunter

    gyunter New Member

    Joined:
    7 May 2008
    Messages:
    1
    Likes Received:
    3
    Reputations:
    0
    razb, большое спасибо! Все заработало, как нужно :)
     
  8. _nic

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

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    Вот такой код
    Code:
    hh=HeapCreate(0,0x01000,0);
    char *buf=(char*)HeapAlloc(hh,0,1024*1024);
    strcpy(buf,"sdjbksadbvkjlbsdkvljbsdkjbvkjsdabvkjasdbkvjbasdkjvbsakjbvkjslb");
    buf+=1024*1024;
    strcpy(buf,"sdjbksadbvkjlbsdkvljbsdkjbvkjsdabvkjasdbkvjbasdkjvbsakjbvkjslb");
    MessageBox(0,buf,"!",MB_OK);
    HeapFree(hh,0,buf);	
    
    Тут конечно же на последней строке идет вылет в отладчик с матюком что в rtlfreeheap был передан кривой указатель на блок памяти.
    А теперь такой вот код
    Code:
    hh=HeapCreate(0,0x01000,0);
    char *buf=(char*)HeapAlloc(hh,0,1024*1024);
    strcpy(buf,"sdjbksadbvkjlbsdkvljbsdkjbvkjsdabvkjasdbkvjbasdkjvbsakjbvkjslb");
    buf+=1024*1024;
    buf=(char*)HeapAlloc(hh,0,1024*1024);
    strcpy(buf,"sdjbksadbvkjlbsdkvljbsdkjbvkjsdabvkjasdbkvjbasdkjvbsakjbvkjslb");
    MessageBox(0,buf,"!",MB_OK);
    HeapFree(hh,0,buf);	
    
    В это случае вылетов нет.НО через диспетчер задач наблюдается утечка памяти.
    Вопрос:как в таком случае надо правильно освобождать память?
     
  9. razb

    razb Active Member

    Joined:
    24 Mar 2009
    Messages:
    658
    Likes Received:
    133
    Reputations:
    18
    Ты два раза выделяешь память на один указатель в следствии этого первый блок памяти теряется.
     
  10. _nic

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

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    Читай внимательно, я немогу освободить 1й блок.
     
  11. razb

    razb Active Member

    Joined:
    24 Mar 2009
    Messages:
    658
    Likes Received:
    133
    Reputations:
    18
    Знач. используй два буфера. В переменную buf присваивается адрес начала выделенной памяти, а предыдущее значение теряется и его уже не вернуть поэтому и будет утечка памяти.
     
  12. _nic

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

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    Что значить используй два.Мне надо освободить область памяти после операции += .Если нечего по делу ответить то лутчше вообще молчать.
     
  13. BlackSilver

    BlackSilver New Member

    Joined:
    30 Jan 2009
    Messages:
    28
    Likes Received:
    4
    Reputations:
    0
    или засунь
    Code:
    buf-=1024*1024;
    перед освобождением или используй бва указателя на буфер. А так ты портишь указатель на буфер, ясен пень, что оно ругается.
     
  14. _nic

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

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    А как продублировать указатель?И неподпортит ли это кучю?
     
  15. criz

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

    Joined:
    4 Nov 2007
    Messages:
    293
    Likes Received:
    40
    Reputations:
    6
    без привилегий вроде только в 98ой получится выключить/перезагрузить :)
     
  16. criz

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

    Joined:
    4 Nov 2007
    Messages:
    293
    Likes Received:
    40
    Reputations:
    6
    не много :)
    Code:
    void enablepriv(int fEn)
    {
    	HANDLE hToken;
    	if(OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken))
        {
    	        TOKEN_PRIVILEGES tp;
            	tp.PrivilegeCount = 1;
            	LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tp.Privileges[0].Luid);
    	        tp.Privileges[0].Attributes = fEn ? SE_PRIVILEGE_ENABLED : 0;
            	AdjustTokenPrivileges(hToken, 0, &tp, sizeof(tp), NULL, NULL);
    	        CloseHandle(hToken);
    	}
    }
    
    Для работы с приводом копай в сторону mciSendString
     
  17. KaZ@NoVa

    KaZ@NoVa Elder - Старейшина

    Joined:
    5 Jul 2008
    Messages:
    368
    Likes Received:
    438
    Reputations:
    -16
    ......
     
  18. 0x0c0de

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

    Joined:
    25 May 2007
    Messages:
    441
    Likes Received:
    396
    Reputations:
    297

    вот уже хз сколько постов написали ответов. а все потому, что никто не дал ссылки на первоисточник.

    http://msdn.microsoft.com/en-us/library/aa376868(VS.85).aspx

    В эту тему заходишь и все время одни и те же вопросы в разных формулировках. когда уже люди осознают, что мсдн это круто
     
    1 person likes this.
  19. s_p_a_m

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

    Joined:
    8 Feb 2008
    Messages:
    100
    Likes Received:
    58
    Reputations:
    4
    как отправить это на С++

    Code:
    http://forum.antichat.ru/search.php
    
    Host: forum.antichat.ru
    User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.0.8) Gecko/2009032609 MRA 5.4 (build 02647) Firefox/3.0.8 (.NET CLR 3.5.30729)
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: ru,en-us;q=0.7,en;q=0.3
    Accept-Encoding: gzip,deflate
    Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
    Keep-Alive: 300
    Connection: keep-alive
    Referer: http://forum.antichat.ru/index.php?
    Cookie: *****
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 58
    
    
    s=&do=process&sortby=lastpost&forumchoice=0&query=antichat
     
  20. FoV

    FoV New Member

    Joined:
    27 Sep 2008
    Messages:
    15
    Likes Received:
    3
    Reputations:
    0
Thread Status:
Not open for further replies.