Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   [Delphi]/[Pascal] Задай вопрос, получи ответ (https://forum.antichat.xyz/showthread.php?t=39636)

Isis 06.05.2007 17:23

[Delphi]/[Pascal] Задай вопрос, получи ответ
 
Задаем Вопросы,получаем ответы.
Отвечают на ваши вопросы все хек кодеры ачата :)
Задаем вопрос и ждем ответа.

-------------------------------------------------------
by jes
Навигация по разделу:

Продолжение:

Isis 06.05.2007 17:26

Ну я пожалуй начну :)
Интересует.....
Как сделать действия закрятия формы(программы), сворачивания и развертывания её !!!
Пытался сделать
Код:

Form1.Close := true;
не получилось т.к. бред :)

И еще...сделал форму свой с бордером bsNone т.е. убрал стандартные виндоус бока..Так вот..как теперь сделать так, чтобы мою форму можно было перетаскивать??А то н сдвинуть теперь с места никуда :)

l-l00K 06.05.2007 17:32

Form1.Close; - закрытие
Application.Minimize; - сворачивание
ShowWindow(Form1.Handle,SW_MAXIMIZE); - развертывание


Чтобы можно было перетаскивать форму за любую точку, нужно добавить вот эту процедуру:

Код:

public
    procedure WMNChitTest(var M:TWMNCHitTest);message wm_NchitTest;
end;

Код:

procedure TForm1.WMNChitTest(var M: TWMNCHitTest);
begin
inherited ;
if M.Result=htClient then M.Result:=HTCAPTION;
end;


Isis 06.05.2007 18:20

Следующий вопрос..
Можно ли как-нибудь на mainMenu( выпадющий список) наложить панельку ...
Или может как-то MainMenu спустить пониже, а сверху панельку..
Вот как такое сделать

GlooK 06.05.2007 20:01

Решил не создавать новую тему, а просто попросить выложить линки на материал по поводу ручногоо изменения Pe загловков, для того чтобы не палился пинч.

mr.The 06.05.2007 21:37

Цитата:

Решил не создавать новую тему, а просто попросить выложить линки на материал по поводу ручногоо изменения Pe загловков, для того чтобы не палился пинч.
поищи на xakep.ru. в статьях. там было

xaker-boss 06.05.2007 22:43

Люди кото может памоч? у меня чёта непалучается органезовать выключение и перезагрузку компа.
Я хочю чтоб при на жатии кнопки на Button1 комп выключался,а при нажатии на кнопку Button2 совершалась перезагрузка...Кто может скинте код,или исходник,ПЛИЗ..

Isis 06.05.2007 22:54

Эм...ну думаю сложного ничего нету.....
Просто открыть смд и прописать команды.........
Хм..а зачем это...не легче просто выключить или ребутнуть?

l-l00K 06.05.2007 23:04

Выключение:
Код:

var
  downQuick: Boolean = False;
  powerOff: Boolean = False;
  logoff: Boolean = False;
  reboot: Boolean = False;

...

procedure DoShutdown;
var
  rl, flgs: Cardinal;
  hToken: Cardinal;
  tkp: TOKEN_PRIVILEGES;
begin
  flgs := 0;
  if downQuick then flgs := flgs or EWX_FORCE;
  if not reboot then flgs := flgs or EWX_SHUTDOWN;
  if reboot then flgs := flgs or EWX_REBOOT;
  if poweroff and (not reboot) then flgs := flgs or EWX_POWEROFF;
  if logoff then flgs := (flgs and (not (EWX_REBOOT or EWX_SHUTDOWN or EWX_POWEROFF))) or
      EWX_LOGOFF;
  if Win32Platform = VER_PLATFORM_WIN32_NT then
  begin
    if not OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,
      hToken) then
      exit
    else
    begin
      if LookupPrivilegeValue(nil, 'SeShutdownPrivilege', tkp.Privileges[0].Luid) then
      begin
        tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
        tkp.PrivilegeCount          := 1;
        AdjustTokenPrivileges(hToken, False, tkp, 0, nil, rl);
        if GetLastError <> ERROR_SUCCESS then
          Writeln('Error adjusting process privileges.');
      end
      else
        exit;
    end;

  end;

  ExitWindowsEx(flgs, 0);

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
DoShutdown;
end;

Вот еще варианты:

Код:

ExitWindowsEx(EWX_SHUTDOWN or ewx_force,0);


останавливает работу системы в безопасный момент времени. Все буферы очищаются с сохранением данных на диске, все процессы останавливаются


Код:

ExitWindowsEx(EWX_REBOOT or ewx_force,0);


перезагрузка системы


Код:

ExitWindowsEx(EWX_FORCE or ewx_force,0);


завершает работу всех запущенных в системе приложений, не посылая им сообщения WM_QUERYENDSESSION и WM_ENDSESSIO. Это может вызвать потерю не сохраненных данных


Код:

ExitWindowsEx(EWX_POWEROFF or ewx_force,0);

завершает работу компьютера с выключением питания, если система поддерживает автоуправление питанием


Код:

ExitWindowsEx(EWX_FORCEIFHUNG or ewx_force,0);


завершает работу всех запущенных в системе приложений если система висит

Ещё вариант перезагрузки:


Код:

mov  al,0F0h 
out  64h,al


Isis 07.05.2007 12:29

Пара нубских вопросов:
Как добавлять запись в файл?
Дропустим нужно все время дописывать в конец файл номера..
ПО 1 номеру на строку..
А потом какой функцией сделать поиск поф файлу?если ли такой номер

l-l00K 07.05.2007 15:52

Добавляет запись в файл
Код:

var
 SL: TStringList;
begin
 Sl:=TStringList.Create;
 if FileExists('myfile.txt') then SL.LoadFromFile('myfile.txt');
 SL.Add('Text');
 SL.SaveToFile('myfile.txt');
 SL.Free;
end;

Чтобы сделать поиск, нужно просто загружать весь файл в
переменую
Код:


SL.LoadFromFile('myfile.txt');

и потом проверять наличие нужного тебе номера в каждой строчке
Код:


if SL.Strings[nomerstroki]='Text' then...;


Isis 07.05.2007 17:10

Код:

if SL.Strings[nomerstroki]='Text' then...;
Не понятно......как я узнаю номер строки??
Ищем текст Text в файле...что за номер строки?:)

l-l00K 07.05.2007 17:23

Код:

var
 i:integer
begin
 for i:=0 to Sl.Count-1 do
 if Sl.Strings[i] = 'Text' then ...


Isis 07.05.2007 18:17

Спс...
Теперь проблема с иконкой...
пытаюсь поставить иконку на прогу.....вроде ставлю, она высвечивается в заголовке программы., а сам значок проги не делается :(

l-l00K 07.05.2007 18:20

"Projects -> Options -> Application" и там жми Load Icon...

Isis 07.05.2007 23:29

Super Puper вопрос:
Вообщем надо сделать так:
Есть файл uins.ini такого формата
Код:

3252436;passwr
236347;264sdg34

Nак вот.....надо как-то сделать так, чтобы номер до точки с запятой был переменной UIN, а после переменная PASSWORD

l-l00K 07.05.2007 23:38

Код:

UIN:= copy(SL.Strings[i],0,pos(';',SL.Strings[i])-1);
Pas:= copy(SL.Strings[i],pos(';',SL.Strings[i])+1,32);


Isis 08.05.2007 08:28

Сделал проще:
Код:

var
ss:Tstrings;
begin
      ss:=TStringList.Create;
ss.LoadFromFile('uins.txt');
ss.NameValueSeparator:=';';
ICQClient1.UIN := StrToInt(ss.Names[1]);
ICQClient1.Password := ss.ValueFromIndex[1];


Ci5 08.05.2007 13:56

Как проверить что:
1. интернет включен
2. Что данные не были заблочены FireWall'ом и успешно отправлены.

inSa(Ne)rd 08.05.2007 14:22

1.

Цитата:

Сообщение от wininet.h
BOOL WINAPI InternetGetConnectedState( OUT LPDWORD lpdwFlags, IN DWORD dwReserved);

// Flags for InternetGetConnectedState
#define INTERNET_CONNECTION_MODEM 1
#define INTERNET_CONNECTION_LAN 2
#define INTERNET_CONNECTION_PROXY 4
#define INTERNET_CONNECTION_MODEM_BUSY 8

Код:

#include <wininet.h>

...

DWORD dwFlags;
InternetGetConnectedState( &dwFlags, 0 );
if (dwFlags && INTERNET_CONNECTION_MODEM) printf( "модем подключен\n" );
if (dwFlags && INTERNET_CONNECTION_LAN) printf( "lan подключен\n" );

2.
Хех, если коннект к удаленному серверу прошел успешно, значит фаервол не заблочил данные)
Код:

if (connect( s, (struct sockaddr_in*)s_addr, sizeof( s_addr ) ) == SOCKET_ERROR)
printf( "заблочил)\n" ); else printf( "не заблочил)\n" );

чмок)

neji 08.05.2007 20:48

Код:

const INTERNET_CONNECTION_MODEM = 1;
INTERNET_CONNECTION_LAN  = 2;
INTERNET_CONNECTdState';
{$R *.DFM}
procedure TForm1.CheckState(Sender: TObject);
var    dwConnectionTypes: DWORD;
begin
dwConnectionTypes:=IC_MODEM+IC_LAN+IC_PROXY;
if InternetGetConnectedState(@dwConnectionTypes,0)
then
      ShowMessage('Youa connected')
else
      ShowMessage('No Connection');
end;


Ch3ck 08.05.2007 20:59

Цитата:

Как проверить что:
1. интернет включен
Код:

function InetIsOffline(Flag: Integer): Boolean;
stdcall; external 'URL.DLL';
if InetIsOffline(0) then
  ShowMessage('This computer is not connected to Internet!')
else
  ShowMessage('You are connected to Internet!');


neji 08.05.2007 21:41

Я канешна извеняюсь но я написал тоже самое толька оформил хренова иба малый опыт писатьни в форумах)))

Brun 09.05.2007 13:53

Прежде чем задавать здесь вопрос стоит посмотреть, а нет ли его сдесь -> http://forum.antichat.ru/showthread.php?p=325627#post325627 . Это хорошая тема, но интересно было бы усышать какую то интересную проблему (вопрос). Ведь спрашивать на счёт строк, которые проходят в школе это не очень серьёзно. ИМХО.

Go0o$E 09.05.2007 14:59

2 Brun
Ладно, попробую задать вопрос немного поинтереснее...

Как реализовать отправку писем через Socks5, допустим, используя компоненты Indy - IdSMTP и TidMessage?

neji 10.05.2007 20:24

Код:

idSmtp.Host:=<smtp>;    // smtp.mail.ru
idSmtp.UserName:=<user name>;
idSmtp.Password :=<password>;
// если не надо авторизации на смтп сервере
idSmtp.AuthenticationType:=atNone
// если надо
idSmtp.AuthenticationType:=atLogin
......
if not idSmtp.Connected then idSmtp.Connect;
idMess.Body.Clear;
idMess.Body.Add('ТЕКСТ')
idMess.From.Address:=<отправитель>;
idMess.Subject:='тема';
idMess.Recipients.EMailAddresses:=<получатель>;
idSmtp.Send(idMess);
idSmtp.Disconnect;

Удачи!!

Go0o$E 11.05.2007 20:50

2 neji

Не плохо... Осталось лишь дописать главную часть заданного мной вопроса, а именно поддержку Socks5...

Isis 13.05.2007 19:24

У меня такой вопрос не простой....
Вообщем по TICQClient'y :)
У меня в файле допустим 15 номеров формата uins;pass
Вообщем надо сделать чтобы все эти 15 номеров подконнектились....и не выключались :)
Пытасюь сделать типа этого:
Код:

Uins.LoadFromFile('uins.txt');
Uins.LoadFromFile('uins.txt');
Uins.NameValueSeparator := ';';
for i := 0 to Uins.Count - 1 do
begin
      ICQClient1.UIN := StrToInt(copy(Uins.Strings[i],0,pos(';',Uins.Strings[i])-1));
      ICQClient1.Password := copy(Uins.Strings[i],pos(';',Uins.Strings[i])+1,32);
      ICQClient1.Login();
end;

Этим способом выводит в онлайн только 1 номер(последний в файле),а мне надо чтобы все номера выводились..
Так вот мне сказали что надо использовать не 1 ICQClient, а столько, сколько надо номеров вывести вонлайн...

Так вот скажите пожалуйста как мне это сделать правильно и чтобы эти номера вывелись в онлайн одновременно, то бишь потоки...
Пожалуйста поподробнее...:)Надо вникнуть.
За эту задачу дам +18, только объясните подробненько каждую функцию которую будете делать...

l-l00K 13.05.2007 23:25

Так ты выведешь только 1 номер в онлайн, так как у тебя только 1 ICQClient, а их должно быть столько же сколько и уинов, я тебе по асе кидал почти весь код своего флудера, советую немного подучить Delphi, тогда ты сможешь воспользоваться моим кодом

slesh 14.05.2007 00:04

Можно еще попробывать создавать потоки и потом в Runtime создавать TICQClient.

Вот пример создания в рунтайме n-го колва кнопок и присвоение им обработчика клика. Также можно и создать скока хошь TICQClient'ов
Код:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
s:array of tbutton;
const
b_c=4;

implementation

{$R *.dfm}
procedure my_click(Self: pointer; Sender: TObject);
begin
showmessage(inttostr(Tbutton(sender).Tag));
end;

procedure TForm1.Button1Click(Sender: TObject);
var
x:integer;
begin
setlength(s,b_c);
for x:=0 to b_c-1 do begin
s[x]:=tbutton.Create(self);
s[x].ParentWindow:=form1.Handle;
s[x].Caption:=inttostr(x);
s[x].Left:=10;
s[x].Top:=40*x;
s[x].Tag:=x;
@s[x].OnClick:=@my_click;
end;
end;

end.


slesh 14.05.2007 00:09

2 Go0o$E На счет писам - дык можно запросто юзать обычные сокеты :)
И через почтовые шлюзы отправлять письма. А там какой хошь такой и пиши адрес отправителя. Если заюзать сокеты то запросто можно всё переложить на socks5
Я себе для теста писал модуль дельфяный который сам создавал соединение с сокс5 прокси и возвращал дескптор сокета. модуль конечно сырой. (т.е. можно юзать тока IP и только TCP Connect). Если нужен, то могу выложить

tip4il 15.05.2007 22:50

вообшем вопрос как создать сторожа, который "наблюдает" за сайтом т.е. заходит на сайт каждые 20 минут и проверяет изменилось ли что-нибудь или нет.
мнеб какой-нибудь сорц или хотяб примерно как это это осушествить

begin_end 16.05.2007 00:42

tip4il, я похожего сторожа писал, но он оказался не сильно эффективен. На таком крупном и активном форуме каждые 20 минут гарантированно происходят изменения. К тому же имеются возможности для этого у самого форума.
Вообще сначала определи требования к сторожу: что именно надо - обнаруживать любые изменения в конкретных разделах, просто создание новых тем или пр. В лучшем варианте это съест 75 Кб траффика (загрузка главной страницы форума), а если что-то посложнее - нужно будет тратить ещё больше.
Реализация возможна следующими средствами: использовать idHTTP или использовать WebBrowser. В всяком случае грузим html и производим выборочные сравнения с ранее загруженным, замечая отличия.

slesh 16.05.2007 23:08

Почему все так и лезук к визуальным компонентам?
Если легче юзать напрямую сокеты.
Вот я написал парочку функций для работы с сокетами и всё время их юзаю.
К примеруЖ функции передаешь адрес буфера где содержится HTTP-заголовки, адрес буфера куда будет помещан ответ, IP сервака и порт куда нужно подсоедениться. И всё пашет запросто. Даже Time-out есть :)
Особенно удобно юзать если юзаются потоки

Piflit 17.05.2007 02:09

дайте плиз учебник или статьи по сетевым компонентам (Indy), или статьи на эту тему. или сорцы с большим количеством комментов.
http://www.programmersclub.ru/book тут я уже был.
я начинающий, так что особо не понайте :)
всем заранее очень благодарен!))

begin_end 17.05.2007 04:24

Я как раз занимаюсь подобной тематикой.
Вот статьи, из написанных мной, где рассматривается работа с некоторыми INDY-компонентами:

Пишем простенький браузер
Простейший IRC-клиент на Delphi, средствами INDY
Простой веб-сервер на Дельфи
Пишем быстро простой бэкдор на основе idHTTPServer
Бесформенное использование INDY на примере Id http ProxyServer


К статьям обычно прилагается прокомментированный исходный код. Кроме самих статей, в теме после них, иногда бывают ещё указаны ссылки на полезные литературные источники.

PS: Всё это было на форуме и до этого поста :) . Рекомендую начать использовать поиск.

Astral_Master 18.05.2007 07:50

Люди, подскажите. Я не силен с работой с графикой в делфе.. не так давно один человечек попросил написать меня простенькие графические часики..
я сделал форму, которая рисуется по контуру загруженной картинки циферблата, сделал перетаскивание часов по экрану за любую их часть, расчитал попиксельно, куда должна с каждой новой секундой отклоняться стрелка в зависимости от начального положения.
Даже стрелку нарисовал стандартными MoveTo, LineTo. Вот тут загвоздочка и пошла... стрелка-то, конечно, рисуется, и отрисовывается куда надо, только звездочка получается, потому что рефреша нету. Делаю рефреш - обновляется и картинка циферблата, отображая только равномерный Color формы... искал помощи в разны местах - не нашел. Может кто сможет помочь?
Не стоит говорить в своих ответах что-то вроде "зачем тебе часы, если их сейчас можно найти и скачать навалом..." Если я задаю вопрос, значит мне действительно это нужно.
Спасибо заранее тем, кто сможет помочь разобраться!

Ник Ример

hidden 18.05.2007 08:22

Тебе нужна буфферизация(вспомогатель ая картинка), вот простенький пример набросал
Код:

var
  Form1: TForm1;
  bm : TBitmap;
  im : TBitmap;
  al : Integer;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  bm:=TBitmap.Create;
  bm.Width:=128;
  bm.Height:=128;
  im:=TBitmap.Create;
  im.LoadFromFile('D:\MyDocs\My Pictures\untitled.bmp');
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
  Form1.Canvas.Draw(0, 0, bm);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  bm.Canvas.Draw(0, 0, im);
  bm.Canvas.Pen.Color:=$00FF00;
  bm.Canvas.MoveTo(64, 64);
  bm.Canvas.LineTo(round(sin(al/60*pi*2)*64)+64, round(cos(al/60*pi*2)*64)+64);
  dec(al);
  Form1.Canvas.Draw(0, 0, bm);
end;


Piflit 18.05.2007 13:29

подскажите какие-нибудь проги для начинающих для самостоятельного написания. ведь теория без практики - это не есть гуд) просто подкиньте идей, а в процессе написания можно будет и теорию подучить, и в целом потренироваться.
заранее спасибо =)

begin_end 18.05.2007 13:56

О, вот возможно интересное задание - попробуй постепенно воспроизвести стандартный набор Windows: напиши блокнот, калькулятор, проводник, Интернет-браузер, редактор типа WordPad и медиаплеер в этой последовательности. Я начинал своё самообучение именно так.
В ходе создания программ тебе потребуется освоить работу с практически всеми визуальными компонентами. Причём, благодаря таким компонентам, само написание программ очень простое! А ещё есть исходники их (конечно на Делфи - можно подсмотреть). При возникновении конкретных проблем тебе всегда помогут здесь :)
Однако, если ещё ты не запускал Делфи, не видел "HelloWorld" и не знаешь, где пункт "Compile", то приступать к подобным заданиям не следует. Нужно хорошо освоить синтаксис языка и функционал среды разработки для того, чтобы хоть как то начать.


Время: 13:09