IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Программирование (https://www.imho.ws/forumdisplay.php?f=40)
-   -   Опять Delphi (https://www.imho.ws/showthread.php?t=29153)

nikoTEEN 09.05.2003 16:00

Опять Delphi
 
Есть ли такой progressbar у которого два параметра цвета. Один до какого то значения другой дальше.

ну например вот progressbar ----------=======

там где минусы, там красный, а где равно, там зеленый.

если есть, то скажите pliz как называется.

nikoTEEN 09.05.2003 16:03

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

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

donatas 10.05.2003 20:08

1е - помоему в RxLib ест ьтакой прогрессбар,там типа стартколор и ендколор
а насчет инета - в реестре есть скорость коннекта...если еще надо - могу поискать...

nikoTEEN 10.05.2003 20:29

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

спасибо. а насчет передано, отправлено ?

nikoTEEN 10.05.2003 20:51

фигвам. нету там такого компонента :(

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

ну да ладно с прогресс баром. скажите мне теперь про инет, а именно transmit(bytes), recv(bytes), speed(bit/sec) текущего инет соединения. как это узнать, каким компонентом или ещё как нибудь.

donatas 10.05.2003 22:10

насчет бара - делаешь
progressbar1.onchange:
progressbar2.left:=progressbar1.left+progressbar1.width
и усе :)

donatas 10.05.2003 22:14

насчет инета то:
ShellExecute(Application.Handle, 'open', 'rascpl.cpl', nil, nil,sw_Shownormal);
это окошко с мониторчиками стандартными....
или
http://msdn.microsoft.com -> Perfomance Monitoring
или ручками в реестре - ключ: HKEY_PERFORMANCE_DATA

nikoTEEN 11.05.2003 09:25

нее. там с этим прогрессбаром все намного геморройнее, но все равно спасибо.

а в реестре ты где такой ключ нашел ??

donatas 11.05.2003 16:05

http://msdn.microsoft.com/library/de...e_data_key.asp
;)
но у меня такого ключа тоже нет :)

donatas 11.05.2003 17:23

дело пошло на принцип :)
Код:

procedure TForm1.Button1Click(Sender: TObject);
var
Registry:TRegistry;
Buf:array[0..3]of byte;
ST:TStringList;
I,Y:integer;
begin
Registry:=TRegistry.Create;
ST:=TStringList.Create;

Registry.RootKey:=HKEY_DYN_DATA;
Registry.OpenKeyReadOnly('PerfStats\StatData');
Registry.GetValueNames(ST);

for I:=0 to ST.Count -1 do begin
        if (Pos('ConnectSpeed',ST.Strings[I])<> 0)then begin
            Registry.ReadBinaryData(ST.Strings[I],Buf,Sizeof(Buf));
            Y:=Buf[0] + (256*Buf[1]) + (4096*Buf[2]) + (65536*Buf[3]);
            Memo1.Lines.Add('ConnectSpeed: ' + inttostr(Y));
            end;
  end;

ST.Free;
Registry.free;
end;


nikoTEEN 11.05.2003 19:05

закатал в пятак, тоесть пятак

nikoTEEN 11.05.2003 19:20

Фигфам. =((

не работает. ничего не пишет

vadian 12.05.2003 01:57

Может, у вас версии разные? Шестая не все поддерживает, что пятая держала... Или операционки разные...

ReapeR 12.05.2003 08:38

У меня на седьмых тоже не пашет.

nikoTEEN 12.05.2003 09:21

у меня 5 Enterprise.

ReapeR 12.05.2003 11:22

nikoTEEN
а соединение с инетом какое?

donatas 12.05.2003 11:48

эта......тестировалось под 98SE/5я дельфя(хотя без разницы)
естьпредположение,что под просто 98м или кривым СЕ - надо диалап апгрейдить.... под ХП/НТ не проверялось....
под какую ось надо?
упссс..... стоп,а че я за диалап зацеплися? тебе под диал ап или сетку?

nikoTEEN 12.05.2003 20:35

значит так. поставил вторую ось 98ую. там есть такой раздел в реестре HKEY_DYN_DATA
я аж удивился =))

дак вот, то, что donatas мне дал это все работает в 98ом, а в XP 2k нет.

вопрос остается. как узнать скорость коннекта и кол-во переданных, полученных байт.

donatas 12.05.2003 22:18

ты не сказал,тебе под мамед или сетку?
если под сеть - то держи:
Код:

var
                GetIfTable:function(        pIfTable: PMibIfTable;
                                        pdwSize        : PULONG; 
                                        bOrder        : Boolean ): DWORD; stdcall;

type
 TMibIfTable = packed record
  dwNumEntries        : DWORD;
  Table            : TMibIfArray;
 end;
 PMibIfTable = ^ TMibIfTable;

type 
  TMibIfRow = packed record
    wszName                : array[0..255] of WideChar;
    dwIndex                : DWORD;
    dwType                : DWORD;
    dwMtu                : DWORD;
    dwSpeed                : DWORD;
    dwPhysAddrLen        : DWORD;
    bPhysAddr                : array[0..7] of Byte;
    dwAdminStatus        : DWORD;
    dwOperStatus        : DWORD;
    dwLastChange        : DWORD;
    dwInOctets                : DWORD;
    dwInUcastPkts        : DWORD;
    dwInNUCastPkts        : DWORD;
    dwInDiscards        : DWORD;
    dwInErrors                : DWORD;
    dwInUnknownProtos        : DWORD;
    dwOutOctets                : DWORD;
    dwOutUCastPkts        : DWORD;
    dwOutNUCastPkts        : DWORD;
    dwOutDiscards        : DWORD;
    dwOutErrors                : DWORD;
    dwOutQLen                : DWORD;
    dwDescrLen                : DWORD;
    bDescr                : array[0..255] of Char;
  end;
  TMibIfArray = array [0..512] of TMibIfRow;
  PMibIfRow = ^TMibIfRow;
  PmibIfArray = ^TmibIfArray;


procedure TMainForm.tmrTrafficTimer(Sender: TObject);
  // Вспомогательная функция, преобразующая МАС адрес к "нормальному" виду
  //Определяем специальный тип, чтобы можно было передать в функцию массив
  type TMAC = array [0..7] of Byte;
  //В качестве первого значения массив, второе значение, размер данных в массиве
  function GetMAC(Value: TMAC; Length: DWORD): String;
  var
    i: Integer;
  begin
    if Length = 0 then Result := '00-00-00-00-00-00' else
    begin
      Result := '';
      for i:= 0 to Length -2 do
        Result := Result + IntToHex(Value[i],2)+'-';
      Result := Result + IntToHex(Value[Length-1],2);
    end;
  end;

//Сама процедура
var
  FLibHandle        : THandle;
  Table                : TMibIfTable;
  i                : Integer;
  Size          : Integer;
begin
  tmrTraffic.Enabled := False; //Приостанавливаем на всякий случай таймер
  lvTraffic.Items.BeginUpdate;
  lvTraffic.Items.Clear;  //Очищаем список
  FLibHandle := LoadLibrary('IPHLPAPI.DLL'); //Загружаем библиотеку
  if FLibHandle = 0 then Exit;
  @GetIfTable := GetProcAddress(FLibHandle, 'GetIfTable');
  if not Assigned(GetIfTable) then
  begin
    FreeLibrary(FLibHandle);
    Close;
  end;

  Size := SizeOf(Table);
  if GetIfTable(@Table, @Size, False ) = 0 then //Выполняем функцию
    for i:= 0 to Table.dwNumEntries-1 do begin
      with lvTraffic.Items.Add do begin //Выводим результаты
        Caption := String(Table.Table[i].bDescr); //Наименование интерфейса
        SubItems.Add(GetMAC(TMAC(Table.Table[i].bPhysAddr),
          Table.Table[i].dwPhysAddrLen)); //MAC адрес
        SubItems.Add(IntToStr(Table.Table[i].dwInOctets)); //Всего принято байт
        SubItems.Add(IntToStr(Table.Table[i].dwOutOctets)); //Всего отправлено байт
      end;
    end;
  lvTraffic.Items.EndUpdate;
  FreeLibrary(FLibHandle);
  tmrTraffic.Enabled := True; //Не забываем активировать таймер
end;

ой и чего это я такой добрый? :)

nikoTEEN 14.05.2003 19:42

Цитата:

вопрос остается. как узнать скорость коннекта и кол-во переданных, полученных байт.
ну вроде как момеда =)) а не локалки

donatas 14.05.2003 22:00

самое простое - findwondow/getwindowtext :)
т.к. по другому в ХР незнаю как(у меня 98) но в реестр она 100% пишет! просто поищи ключ!

nikoTEEN 15.05.2003 09:42

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

а ключ поищу. о результатах скажу.

donatas 15.05.2003 11:38

так весь этот тред только для того,чтоб убрать 2 компа??? :eek:
так это как 2 байта отослать....
зы поищи тут:
HKEY_CURRENT_USER\Software\Microsoft\WindowsNT\CurrentVersion\PerfLib\ <ID
языка>\

nikoTEEN 06.07.2003 23:11

опять нужна помощь =)

есть memo в нем на каждой строчке какое-нибудь слово. нужно, чтобы слово из каждой строчки, по нажатию кнопки, переходило в label.caption например или в edit.text. проще говоря, чтобы каждая строка из memo вставлялась туда, куда я захочу.

как это осуществить ??

aleh 07.07.2003 09:53

TMemo.Lines.*

Count : Integer -- количество строк
Items[i] : String -- каждая строка, нумерация с 0

В самаом Memo должно быть что-то типа select[ed] item/line/index -- это если тебе захочется использовать выделенную строку (или строки)

Только как 10 строк из memo впихнуть в одну label? Уточни задачу...

nikoTEEN 07.07.2003 11:06

aleh
пасибо. выручил =)) пятак твой ;)

это не 10 строк в одну label. это каждую строку в каждый label например, но мне надо не в label. это я так, для примера.

infoline 21.07.2003 19:56

Дружище, в библеотеке indy есть все что тебе нужно. Хотя это есть и в FastNet, да и во многих других. Events типа onWorkBegin и onWorkEnd ...

infoline 21.07.2003 20:02

Дружище, в библеотеке indy есть все что тебе нужно. Хотя это есть и в FastNet, да и во многих других. Events типа onWorkBegin и onWorkEnd ...

nikoTEEN 19.09.2003 15:19

Такая ситуевниа. Нужно запустить прогу(например winamp) через свою программу, а потом послать ему мессагу, чтоб оно закрылось, это так к примеру. А ещё мне нужны линки(inet) про дескрипторы или потоки или handle.

Handle := Winexec('winamp.exe', 0);

такая штука не фурычит, для всех процессов handle пишется 33 (если его inttostr(Handle)). как надо понастоящему ??

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

ReapeR 22.09.2003 10:03

там есть такое вот:

HWND FindWindow(

LPCTSTR lpClassName, // pointer to class name
LPCTSTR lpWindowName // pointer to window name
);

handle := FindWindow("winamp v1.0", nil); //если я не путаю, то у винампа класс окна вроде так называется


Часовой пояс GMT +4, время: 17:28.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.