в TPageControl все страници - это компоненты типа TTabSheet , а у них как и у всех компонентов есть свойство Tag, и им можно воспользоваться. При создании нового экземпляра TWebBrowser присваиваем этот экземпляр свойству Tag той вкладки на которой TWebBrowser и создаётся, например:
var NewTab:TTabSheet;
...
NewTab:=TTabSheet.Create(PageControl1)
NewTab.PageControl := PageControl1;
NewTab.Tag := integer(TWebBrowser.Create(Self));
with TWebBrowser(NewTab.Tag) do begin
Parent:=NewTab;
{здесь устанавливаем остальные свойства компонента TWebBrowser}
end;
...
with TWebBrowser(PageControl1.ActivePage.Tag) do begin
{здесь обращение в TWebBrowser активной вкладки}
end;
Во второй части примера ActivePage можно заменить на Pages[Index] для доступа по индексу вкладки.
Меня можно найти в IRC на каналах #programmers, #delphimaster, #delphiintru @ irc.tlt.ru (Dalnet.Ru), ник - Amidamaru
Может кому-нибудь интересно. Пример кода для отображения температуры графического процессора видеокарт nVidia.
Ага, мне было интересно. Во первых твоя процедура не возвращает значения. А во вторых, те три переменных, которые заполняются температурами в твоей процедуре у меня заполняются нулями. Если ты там что-то сам редактировал, то выложи полностью. Проверь вобщем.
Ага, мне было интересно. Во первых твоя процедура не возвращает значения. А во вторых, те три переменных, которые заполняются температурами в твоей процедуре у меня заполняются нулями. Если ты там что-то сам редактировал, то выложи полностью. Проверь вобщем.
У меня все работает. Вот пример (извиняюсь, только на api, так как на vcl разучился).
program tempstatus;
uses
Windows, Messages;
{$R resourse.res}
const
IDD_DIALOG = 101;
IDC_STATIC = 100;
IDC_TIMER = 1;
var
Timer: Cardinal = 0;
function IntToStr(Int : Int64) : String;
begin
Str(Int, Result);
end;
function GetTempCard : Cardinal;
type
NvCplGetThermalSettings = function(WindowsMonitorNumber : UINT; pGpuTemp, pUmgebTemp, pSlowDownTemp : Pointer) : BOOL; stdcall;
var
hInstNvcpl : THandle;
GetThermalSettings : NvCplGetThermalSettings;
UmgebTemp, SlowDownTemp : Cardinal;
begin
Result := 0;
UmgebTemp := 0;
SlowDownTemp := 0;
hInstNvcpl := LoadLibrary('nvcpl.dll');
if hInstNvcpl <> 0 then
try
GetThermalSettings := GetProcAddress(hInstNvcpl, 'NvCplGetThermalSettings');
if Assigned(GetThermalSettings) then
GetThermalSettings(0, Addr(Result), Addr(UmgebTemp), Addr(SlowDownTemp));
finally
FreeLibrary(hInstNvcpl);
end;
end;
function DlgFunc(hWnd: HWND; uMsg: Cardinal; wParam: wParam; lParam: lParam) : Bool; stdcall;
begin
Result := TRUE;
case umsg of
WM_INITDIALOG : Timer := SetTimer(hWnd, IDC_TIMER, 500, nil);
WM_CLOSE:
begin
if Timer <> 0 then KillTimer(hWnd, Timer);
EndDialog(hwnd, 0);
end;
WM_LBUTTONDOWN : SendMessage(hWnd, WM_NCLBUTTONDOWN, HTCAPTION, lParam);
WM_TIMER : SetDlgItemText(hWnd,IDC_STATIC, PChar(IntToStr(GetTempCard)));
else Result := FALSE;
end;
end;
begin
DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG), 0, @DlgFunc);
end.
Народ подскажите, как микрофон включить/выключить (или сбросить его громкость на 0%). Ну аналогия снять или поставить галочку "Выкл" в микшере Windows. Только осуществить это нужно из программы не открывая микшер.
В инете почитал про:
uses
MMSystem;
и функции:
waveOutSetVolume()
waveInStart()
waveInStop()
но что-то с ними неполучилось, может подскажет кто?
Народ подскажите, как микрофон включить/выключить (или сбросить его громкость на 0%). Ну аналогия снять или поставить галочку "Выкл" в микшере Windows. Только осуществить это нужно из программы не открывая микшер.
В инете почитал про:
uses
MMSystem;
и функции:
waveOutSetVolume()
waveInStart()
waveInStop()
но что-то с ними неполучилось, может подскажет кто?
procedure OutSetVolume;
var
newvolume:word;
begin
newvolume:= TtrackBar1.Position;
WaveOutSetVolume(wave_mapper, NewVolume or (NewVolume shl 16));
end;
или
procedure SetVolume(const volL, volR: Word);
var
hWO: HWAVEOUT;
waveF: TWAVEFORMATEX;
vol: DWORD;
begin
// init TWAVEFORMATEX
FillChar(waveF, SizeOf(waveF), 0);
// open WaveMapper = std output of playsound
waveOutOpen(@hWO, WAVE_MAPPER, @waveF, 0, 0, 0);
vol:= volL + volR shl 16;
// set volume
waveOutSetVolume(hWO, vol);
waveOutClose(hWO);
end;
Несовсем то, мне нужно регулировать громкомть микрофона, а не всей системы.
Может вместо "wave_mapper" подставить какую-нибудь переменную указывающую на канал микрофона?
как сделать чтобы программу нельзя было запустить еще раз, если она уже запущена?
uses syncobjs;
var
CheckEvent: TEvent;
//---
procedure TfmMain.FormCreate(Sender: TObject);
begin
CheckEvent:= TEvent.Create( nil, false, true, 'MYPROGRAM_CHECKEXIST' );
if CheckEvent.WaitFor( 10 ) <> wrSignaled then
begin
Application.MessageBox('Программа уже запущена','Ошибка!',MB_IConerror);
halt;
end
end;
Если женщина не права, нужно извиниться и замолчать.
CreateSemaphore(nil, 0, 1, 'Название любое');
if (GetLastError = ERROR_ALREADY_EXISTS) then MessageBox(Handle, 'ЫЫЫ... Уже есть запущенная копия...', 'Сообщение', MB_IConstop);
народ подскажите плз быстренько функцию вызова диалога открытия файла в восьмом делфи, а то я что-то забыл...
Вебмастер: продвижение, разработка, дизайн, верстка и др. контакты в профиле. Люблю советские электрогитары, куплю или приму в дар электрогитары или запчасти от них. Интересуют все модели с этого сайта: http://oecc.ru/