Последние записи
- Как в Delphi XE обнулить таймер?
- Изменить цвет шрифта TextBox на форме
- Ресайз PNG без потери прозрачности
- Вывод на печать графического файла
- Взаимодействие через командную строку
- Перенести программу из Delphi в Lazarus
- Определить текущую ОС
- Автоматическая смена языка (раскладки клавиатуры)
- Сравнение языков на массивах. Часть 2
- wprintf как напечатать кириллицу
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
2nd
Сен
Чтение данных с COM порта 232
#include <vcl.h>
#pragma hdrstop
#include <windows.h>
//---------------------------------------------------------------------------
/*
ZeroMemory (&dcb, sizeof (DCB));// не знает что ето такое
*/
//объявим структуру для асинхронной работы порта
OVERLAPPED over;
//для выделения сигнала
DWORD dwSignal;
//объявим структуру для конфигурации СОМ порта
DCB dcb;
//дескриптор порта
HANDLE hPortDat = NULL;
//переменная для чтения
char Data;
//==================================
//---------------------------------------------------------------------------
class MuClDataOutPort
{
private:
//пишим функцию инициализации порта
bool InnitPort ()
{
//открываем порт СОМ 1
hPortDat = CreateFile ("COM1", GENERIC_READ|GENERIC_WRITE,
0,NULL, OPEN_EXISTING,
FILE_FLAG_OVERLAPPED, NULL);
if (hPortDat == INVALID_HANDLE_VALUE)//если порт не удалось открыть
{
CloseHandle (hPortDat);
return false;//выходим из функции с ошибкой
}
//настраиваем параметры порта
dcb.BaudRate = CBR_19200;//скорость передачи
dcb.ByteSize = 8;//размер передачи
dcb.StopBits = ONESTOPBIT;//один стоповый бит
dcb.Parity = NULL;
//проверяем на правильность настройки
if ( !SetCommState ( hPortDat, &dcb)) //тоже не работает....
{
CloseHandle (hPortDat);
return false;//выходим из функции с ошибкой
}
//если все выполнилось то возвращаем положительный результат
return true;
}
//----------------------------------------------------
//функция чтения одного байта данных
BYTE ReadByteCOM ()
{
if (InnitPort ())
{
BYTE read = 0;
DWORD dwByteRead = 0;
do
{//читаем байт из порта
if (!ReadFile (hPortDat, &read, sizeof (BYTE), &dwByteRead, NULL))
{return 0xFF;}
} while (!dwByteRead);
return read;//возвращаем данные
}
else
{
return 0xFF;
}
}
//------------------------------------------------------
//функция чтения одного байта данных
bool WriteByteCOM (char bufer)
{
if (InnitPort ())
{
DWORD dwByteWrite = 0;
if (!WriteFile(hPortDat, &bufer, sizeof(char), &dwByteWrite, NULL))
{return false;}
return true;//возвращаем сведение о выполнении
}
else
{
return false;
}
}
//=============================================
//функция чтения массива данных
//=============================================
//=============================================
//=============================================
public:
//общая функция для работы с портом
void GeneralCOMRead ()
{
//проверяем сигнал в линии
if (dwSignal & EV_DSR)//данные готовы для чтения
{
//читаем байт из порта
Data = ReadByteCOM ();
//сохраняем байт куда-либо
}
}
//---------------------------------------------------------
void GeneralCOMWrite (char InData)
{
//проверяем сигнал в линии
if (dwSignal & EV_CTS)//данные готовы для записи
{
//пердаем байт из вне и записываем его в порт
WriteByteCOM (InData);
}
}
//---------------------------------------------------------
void CloseCOM ()
{
if (over.hEvent)
{
CloseHandle (over.hEvent);//закрываем объект событие
}
if (hPortDat)
{
CloseHandle (hPortDat);
hPortDat = NULL;
}
}
};
#pragma package(smart_init)
1st
Сен
Как убрать Access Violation при Destroy компонента?
var
i: integer; //создавал "левую" переменную, которая ничего не делает
begin
try
... //тут выполнялся мой код какой-то
except
{далее идет обработка ошибки. Помести то что идет после
except в код туда, что "провоцирует" ошибку}
on EAccessViolation do
//блок begin...end в данном случае необязателен. Это у меня просто
привычка после do писать его
begin
i:=1;
end;
end;
Тогда в среде разработки появление ошибки будет продолжаться, однако, когда запустишь ехе-шник отдельно, то ошибки не будет. По крайней мере у меня не появляется она больше. Удачи!
Я пишу:
unit Unit1;
interface
uses ThdTimer,
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private t:TThreadedTimer;
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
t:=TThreadedTimer.Create(self);
t.Interval:=1000;
t.OnTimer:=Timer1Timer;
t.Enabled:=true;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Caption:=TimeToStr(now);
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
t.Enabled:=false;
end;
end.
Запускаю. часики тикают. Я закрываю форму и не вижу никакого AV. (D6)
Так шо все там ок.
На всякий случай подозрение что поправить нужно в деструкторе так:
if FOwner<>nil then
FOwner.FOnTimer := nil; // AV
31st
Авг
Получить длительномть трека. Bass.dll
function QBass_GetTime(const Channel: DWORD): DWORD; stdcall;
var
pPos: Cardinal;
AllTime: Cardinal;
begin
result := 0;
pPos := BASS_ChannelGetLength(Channel, BASS_POS_BYTE);
if (pPos > 0) then
begin
Alltime := Trunc(BASS_ChannelBytes2Seconds(Channel, pPos));
Result := Alltime;
end;
end;
вот так получай длину трека
30th
Авг
Конвертирование utf-8 в windows-1251
string Utf8_to_cp1251(const char *str)
{
string res;
int result_u, result_c;
result_u = MultiByteToWideChar(CP_UTF8,
0,
str,
-1,
0,
0);
if (!result_u)
return 0;
wchar_t *ures = new wchar_t[result_u];
if(!MultiByteToWideChar(CP_UTF8,
0,
str,
-1,
ures,
result_u))
{
delete[] ures;
return 0;
}
result_c = WideCharToMultiByte(
1251,
0,
ures,
-1,
0,
0,
0, 0);
if(!result_c)
{
delete [] ures;
return 0;
}
char *cres = new char[result_c];
if(!WideCharToMultiByte(
1251,
0,
ures,
-1,
cres,
result_c,
0, 0))
{
delete[] cres;
return 0;
}
delete[] ures;
res.append(cres);
delete[] cres;
return res;
}
24th
Как в WebBrowser выбрать из списка и нажать на кнопку?
Posted by Chas under Пост-обзор
Нажатие на кнопку:
код:
var HtmlDocument : IHtmlDocument2;
i : integer;
HtmlCollection : IHtmlElementCollection;
HtmlElement : IHtmlElement;
spisok : string;
begin
HtmlDocument := BrowserMain.Document as IHtmlDocument2;
HtmlCollection := HtmlDocument.All;
for i := 0 to HtmlCollection.length – 1 do
begin
if stop = 1 then Exit;
HtmlElement := HtmlCollection.Item(i, 1) as IHtmlElement;
spisok := HtmlElement.InnerText;
Trim(spisok);
if spisok = ‘список’ then
begin
HtmlElement.click;
Exit;
end;
end;
end;
выбор из открывающегося списка:
код:
const fieldName, newValue: string; const instance: integer);
var
field: IHTMLElement;
inputField: IHTMLInputElement;
selectField: IHTMLSelectElement;
textField: IHTMLTextAreaElement;
begin
field := theForm.Item(fieldName,instance) as IHTMLElement;
if Assigned(field) then
begin
if field.tagName = ‘INPUT’ then
begin
inputField := field as IHTMLInputElement;
if (inputField.type_ ‘radio’) and (inputField.type_ ‘checkbox’)
then inputField.value := newValue
else inputField.checked := (newValue = ‘checked’);
end
else if field.tagName = ‘SELECT’ then
begin
selectField := field as IHTMLSelectElement;
selectField.value := newValue;
end
else if field.tagName = ‘TEXTAREA’ then
begin
textField := field as IHTMLTextAreaElement;
textField.value := newValue;
end;
end;
end;
вызов процедуры:
код:
SetFieldValue(theForm,’type’,переменная);
23rd
Авг
Получить идентификатор процесса и узнать полуный путь до файла этого процесса. c/c++
Пишу небольшую программу, мне нужно чтобы она искала заданный мною выполняемый процесс. Подскажите какая это функция может сделать, быть может это win api функция?
Sazary:
код:
#include <stdio.h>
#include <TlHelp32.h>
#include <conio.h>
#include <string.h>
#include <psapi.h>
using namespace std;
int main()
{
HANDLE h,hp;
PROCESSENTRY32 pe;
int id;
bool bl,flag=false;
char name[256],str[256];
char path[MAX_PATH];
DWORD dw;
HMODULE hmod;
scanf(”%s”,name);
h = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS|TH32CS_SNAPMODULE,0);
for(bl = Process32First(h, &pe); bl; bl = Process32Next(h, &pe))
{
strcpy(str,pe.szExeFile);
if(strcmp(str,name)==0)
{
printf(”Process found: %s\n”,str);
hp = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,false,pe.th32ProcessID);
EnumProcessModules(hp, &hmod,sizeof(hmod),&dw); // получаем первый модуль, связанный с процессом, то есть сам exe-файл
GetModuleFileNameEx(hp, hmod, path, MAX_PATH); // получаем путь к модулю
printf(”path: %s\n”,path);
CloseHandle(hp);
CloseHandle(h);
flag = true;
break;
}
}
CloseHandle(h);
if(!flag) printf(”Process not found”);
getch();
return 0;
}
Нужно прилинковать модуль psapi.
23rd
Как узнать количество строк в memo?
У новичков может возникнуть такой вопрос.
код:
Нумерация строк начинается с нуля.
23rd
Определить нажата правая клавиша мыши?
Событие OnMouseDown у формы, проверяя таким макаром:
код:
23rd
Как развернуть flash-приложение во весь экран?
Kotofff:
Компонент которым показываешь (проигрываешь) флеш-ролик в программе выравнивай на всю форму, а с самой формой можно так :
код:
var
HTaskbar: HWND;
OldVal: LongInt;
begin
try
HTaskBar := FindWindow(’Shell_TrayWnd’, nil);
SystemParametersInfo(97, Word(True), @OldVal, 0);
EnableWindow(HTaskBar, False);
ShowWindow(HTaskbar, SW_HIDE);
finally
with Form1 do
begin
BorderStyle := bsNone;
FormStyle := fsStayOnTop;
Left := 0;
Top := 0;
Height := Screen.Height;
Width := Screen.Width;
end;
end
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
HTaskbar: HWND;
OldVal: LongInt;
begin
HTaskBar := FindWindow(’Shell_TrayWnd’, nil);
SystemParametersInfo(97, Word(False), @OldVal, 0);
EnableWindow(HTaskBar, True);
ShowWindow(HTaskbar, SW_SHOW);
end;
Облако меток
css реестр ассемблер timer SaveToFile ShellExecute программы массив советы word MySQL SQL ListView pos random компоненты дата LoadFromFile form база данных сеть html php RichEdit indy строки Win Api tstringlist Image мысли макросы Edit ListBox office C/C++ memo графика StringGrid canvas поиск файл Pascal форма Файлы интернет Microsoft Office Excel excel winapi журнал ПРОграммист DelphiКупить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
пеллетные котлы
Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)