Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по Delphi (все версии) - часть 3

Автор: RostY
Дата сообщения: 24.05.2007 08:35
MAXAOH
наверно, плохо прописал путь. А еще ты написал
Цитата:
Создал новый Table
и
Цитата:
При запуске запроса
из чего я не понял-- ты используешь ТТабле или TQuery.
Еще я б советовал устанавливать пути к таблицам программно

DatabaseName:=ExtractFilePath(paramstr(0))+'Data\';

а потом делать им Open
Автор: ParisKozlov
Дата сообщения: 24.05.2007 10:27
Stas001
а пустые между пустыми удалять? )))
Автор: rs
Дата сообщения: 25.05.2007 07:19
вопрос такой - написал простейший win-hook, перехватывающий и протоколирующий клавиатурный ввод

если после установки этого общесистемного хука запустить одновременно пару приложений - одно win-приложение, другое dos-приложение, то под WXP проблем нет никаких, а под W95/98 имеет место следующее:

а)после нескольких переключений между dos и win приложениями (в каждом из приложений выполняется клавитурный ввод) через какое-то время при вводе c клавиатуры в win-приложении символа 'F' (или 'А' на кириллице) выскакивает виндовое окно поиска (как если бы были нажаты клавиши <Win><F>), то же самое с 'D'('В') - открывается десктоп (как будто нажаты <Win><D>) и т.п.

б)кроме того в W98 в dos-окне ни одно нажатие клавиши вообще не регистрируется (в WXP регистрация клавиатуры в dos-окне проходит без проблем)

подскажите, пожалуйста, как решить вопросы а) и б)

в)можно ли в W98 исключить перехват клавиатуры dos-приложений, для предотвращения ситуации а)?

--
tnx
--

зы
хук ставится так:

// pdd.kHook - находится в файле отображения (MapViewOfFile)
pdd.kHook := SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, Hinstance, 0);

метод хука:
function KeyboardProc(Code: Longint; wParam: WParam; lParam: LParam): LResult; stdcall;
Result := CallNextHookEx(pdd.kHook, Code, WParam, LParam);

if (Code = HC_ACTION) and (((lParam shr 16) and KF_UP) = 0) then
begin
// нотифицируем наше приложение о нажатии клавиши
...
end;
end;


Добавлено:
и еще вопрос - в разных источниках указываются разные варианты - так:

function KeyboardProc(...);
Result := CallNextHookEx(pdd.kHook, Code, WParam, LParam);

if (Code = HC_ACTION) and (((lParam shr 16) and KF_UP) = 0) then
begin
// нотифицируем наше приложение о нажатии клавиши
...
end;
end;

или так:

function KeyboardProc(...);

if (Code = HC_ACTION) and (((lParam shr 16) and KF_UP) = 0) then
begin
Result := 0;
// нотифицируем наше приложение о нажатии клавиши
...
end
else
Result := CallNextHookEx(pdd.kHook, Code, WParam, LParam);


в чём разница? как правильнее?

end;
Автор: ParisKozlov
Дата сообщения: 25.05.2007 12:07
Stas001
расскажи подробне что те нуна

я так понял что нужно удалить ВСЕ НЕ пустые строки?
Автор: MOO123
Дата сообщения: 25.05.2007 17:56
private
s:string;




begin
s:=edit1.text;
if opendialog1.Execute then
WinExec('1.exe' + s, 1) ;


выдает такую ошибку

Incompatible types: 'String' and 'PChar'

курсор перед "1" но после "запятой"
Автор: andead
Дата сообщения: 25.05.2007 18:14
MOO123
WinExec(PChar('1.exe' + s), 1);
но лучше использовать ShellExecute
Автор: nuker2015
Дата сообщения: 26.05.2007 00:11
Здравствуйте!
Кто-нибудь знает как включить сглаживание ClearType только для одной формы, или контрола, не меняя при этом SystemParametersInfo как в примере:

Код: var MType: cardinal;
begin
MType:=FE_FONTSMOOTHINGCLEARTYPE;
SystemParametersInfo(spi_SetFontSmoothingType, 0, Pointer(MType),
spif_UpdateINIFile or spif_SendChange);
end;
Автор: MOO123
Дата сообщения: 28.05.2007 15:13
Короч нужно с помощью openPictureDialog нужно узнать размеры изображения в пикс. как это можно сделать......????
Автор: OdesitVadim
Дата сообщения: 28.05.2007 20:08
MOO123
с помощью openPictureDialog никак. Он предназначен только для выбора файла/файлов

Учимся ставить правильно вопросы
Автор: MOO123
Дата сообщения: 28.05.2007 23:11
Никто и не сомневался)))

Хорошо......... как у файла выбранного в openPictureDialog можно узнать размер?
Чем подробней, тем лучше для понимания.
Автор: Solnake
Дата сообщения: 29.05.2007 08:08
MOO123
[more=Можна так ]unit ImgSize;

interface

uses
Classes;

procedure GetJPGSize(const sFile: string; var wWidth, wHeight: word);
procedure GetPNGSize(const sFile: string; var wWidth, wHeight: word);
procedure GetGIFSize(const sGIFFile: string; var wWidth, wHeight: word);

implementation

uses
SysUtils;

function ReadMWord(f: TFileStream): word;
type TMotorolaWord = record
case byte of
0: (Value: word);
1: (Byte1, Byte2: byte);
end;
var
MW: TMotorolaWord;
begin
{ It would probably be better to just read these two bytes in normally }
{ and then do a small ASM routine to swap them. But we aren't talking }
{ about reading entire files, so I doubt the performance gain would be }
{ worth the trouble.}
f.read(MW.Byte2, SizeOf(Byte));
f.read(MW.Byte1, SizeOf(Byte));
Result := MW.Value;
end;

procedure GetJPGSize(const sFile: string; var wWidth, wHeight: word);
const
ValidSig : array[0..1] of byte = ($FF, $D8);
Parameterless = [$01, $D0, $D1, $D2, $D3, $D4, $D5, $D6, $D7];
var
Sig: array[0..1] of byte;
f: TFileStream;
x: integer;
Seg: byte;
Dummy: array[0..15] of byte;
Len: word;
ReadLen: LongInt;
begin
FillChar(Sig, SizeOf(Sig), #0);
f := TFileStream.Create(sFile, fmOpenRead);
try
ReadLen := f.read(Sig[0], SizeOf(Sig));
for x := Low(Sig) to High(Sig) do
if Sig[x] <> ValidSig[x] then
ReadLen := 0;
if ReadLen > 0 then
begin
ReadLen := f.read(Seg, 1);
while (Seg = $FF) and (ReadLen > 0) do
begin
ReadLen := f.read(Seg, 1);
if Seg <> $FF then
begin
if (Seg = $C0) or (Seg = $C1) then
begin
ReadLen := f.read(Dummy[0], 3);
{ don't need these bytes }
wHeight := ReadMWord(f);
wWidth := ReadMWord(f);
end
else
begin
if not (Seg in Parameterless) then
begin
Len := ReadMWord(f);
f.Seek(Len-2, 1);
f.read(Seg, 1);
end
else
Seg := $FF;
{ Fake it to keep looping. }
end;
end;
end;
end;
finally
f.Free;
end;
end;

procedure GetPNGSize(const sFile: string; var wWidth, wHeight: word);
type TPNGSig = array[0..7] of byte;
const
ValidSig: TPNGSig = (137,80,78,71,13,10,26,10);
var
Sig: TPNGSig;
f: tFileStream;
x: integer;
begin
FillChar(Sig, SizeOf(Sig), #0);
f := TFileStream.Create(sFile, fmOpenRead);
try
f.read(Sig[0], SizeOf(Sig));
for x := Low(Sig) to High(Sig) do
if Sig[x] <> ValidSig[x] then
exit;
f.Seek(18, 0);
wWidth := ReadMWord(f);
f.Seek(22, 0);
wHeight := ReadMWord(f);
finally
f.Free;
end;
end;

procedure GetGIFSize(const sGIFFile: string; var wWidth, wHeight: word);
type
TGIFHeader = record
Sig: array[0..5] of char;
ScreenWidth, ScreenHeight: word;
Flags, Background, Aspect: byte;
end;
TGIFImageBlock = record
Left, Top, Width, Height: word;
Flags: byte;
end;
var
f: file;
Header: TGifHeader;
ImageBlock: TGifImageBlock;
nResult: integer;
x: integer;
c: char;
DimensionsFound: boolean;
begin
wWidth := 0;
wHeight := 0;
if sGifFile = '' then
exit;
{$I-}
FileMode := 0; { read-only }
AssignFile(f, sGifFile);
reset(f, 1);
if IOResult <> 0 then {Could not open file }
exit; { Read header and ensure valid file. }
BlockRead(f, Header, SizeOf(TGifHeader), nResult);
if (nResult <> SizeOf(TGifHeader)) or (IOResult <> 0)
or (StrLComp('GIF', Header.Sig, 3) <> 0) then
begin { Image file invalid }
close(f);
exit;
end; { Skip color map, if there is one }
if (Header.Flags and $80) > 0 then
begin
x := 3 * (1 shl ((Header.Flags and 7) + 1));
Seek(f, x);
if IOResult <> 0 then
begin { Color map thrashed }
close(f);
exit;
end;
end;
DimensionsFound := False;
FillChar(ImageBlock, SizeOf(TGIFImageBlock), #0);
{ Step through blocks. }
BlockRead(f, c, 1, nResult);
while (not EOF(f)) and (not DimensionsFound) do
begin
case c of
',': { Found image }
begin
BlockRead(f, ImageBlock, SizeOf(TGIFImageBlock), nResult);
if nResult <> SizeOf(TGIFImageBlock) then
begin { Invalid image block encountered }
close(f);
exit;
end;
wWidth := ImageBlock.Width;
wHeight := ImageBlock.Height;
DimensionsFound := True;
end;
'y' : { Skip }
begin
{ NOP }
end;
{ nothing else. just ignore }
end;
BlockRead(f, c, 1, nResult);
end;
close(f);
{$I+}
end;

end.

[/more]
Автор: AFT
Дата сообщения: 29.05.2007 08:32
Подскажите плиз, как в делфе проверить имя текущего пользователя винды? Т.е. мне надо перед выполнением функции проверить имя текущего пользователя, как это сделать? как определить это имя?
Автор: vserd
Дата сообщения: 29.05.2007 09:44
AFT

Цитата:
как определить это имя?

uses sysutils;
UserName := GetEnvironmentVariable('USERNAME');
Автор: RomanTim
Дата сообщения: 29.05.2007 10:49
AFT
Ну или
GetUserName - просто имя юзера или
GetUserNameEx - во всяких разных видах

Вторая работает начиная с Вин2000, в делфячих заголовочных файлах не прописана, описывается так:

Код: type
EXTENDED_NAME_FORMAT = (
NameUnknown, NameFullyQualifiedDN, NameSamCompatible, NameDisplay,
NameUniqueId, NameCanonical, NameUserPrincipal, NameCanonicalEx,
NameServicePrincipal, NameDnsDomain );

function GetUserNameEx(NameFormat: EXTENDED_NAME_FORMAT; lpNameBuffer: PChar;
var nSize: Cardinal): Boolean; stdcall; external 'secur32.dll' name 'GetUserNameExA';
Автор: AFT
Дата сообщения: 29.05.2007 11:41
RomanTim
спасибо
Автор: MOO123
Дата сообщения: 29.05.2007 11:50
Solnake
мне нужно у бмп
Автор: Ang
Дата сообщения: 29.05.2007 13:08
MOO123
procedure GetBMPSize(const sBmpStr: string; var wWidth, wHeight: integer);
var
ww : WordRec;
begin
ww.Lo := Ord(sBmpStr[19]);
ww.Hi := Ord(sBmpStr[20]);
Move(ww, wWidth, SizeOf(ww));

ww.Lo := Ord(sBmpStr[23]);
ww.Hi := Ord(sBmpStr[24]);
Move(ww, wHeight, SizeOf(ww));
end;

В sBmpStr грузишь BMP-файл. Можно не весь, а только первые 25 байт. Заголовок BMP-файла можно найти во многих местах. Например: _http://www.fastgraph.com/help/bmp_header_format.html
Автор: MOO123
Дата сообщения: 29.05.2007 13:39
Ang
пасиб
Автор: stealthstas
Дата сообщения: 29.05.2007 15:08
Всем привет, такой вопрос. Нужно на делфи отпарсить txt файл, а конкретно допустим есть содержимое файла:
d:\All BUILTIN\AdministratorsOI)(CI)F
CREATOR OWNEROI)(CI)(IO)F
NT AUTHORITY\SYSTEMOI)(CI)F
BUILTIN\UsersOI)(CI)F
нужно сделать так чтобы d:\All записывалось в одну колонку, а BUILTIN\AdministratorsOI)(CI)F в другую и так весь файл, что посоветуете? Я делаю через VBScrip RegExp, только пока несильно получается )), но какие-то продвижения есть.
Автор: MOO123
Дата сообщения: 29.05.2007 18:48
Ang
Он выдает какие то большие и левые числа, мож я что нить не так сделал?
Автор: RomanTim
Дата сообщения: 29.05.2007 21:17
MOO123
Ang
Вообще использовать стринг для работы с бинарным файлом - как-то очень своеобразно...
Можно сделать так:
Код: fs := TFileStream.Create(ImagePath, fmOpenRead);
fs.Seek(18, soFromBeginning);
fs.Read(ImageWidth, 4);
fs.Read(ImageHeight, 4);
fs.Free;
Автор: MOO123
Дата сообщения: 30.05.2007 12:56
RomanTim
Пасиб
Автор: ParisKozlov
Дата сообщения: 30.05.2007 15:49
MOO123

попробуй проще
может медленней и память сожрет - но точно работает
var
BMP:TBitmap;

......

BMP:=TBitmap.Create;
BMP.LoadFromFile(FileName);
Width := BMP.Width;
Height := BMP.Height;
BMP.Free;

Автор: MOO123
Дата сообщения: 30.05.2007 17:08
ParisKozlov
Учту
Автор: SERGE_BLIZNUK
Дата сообщения: 30.05.2007 19:01
MOO123
не хочу влазить в чужой умный разговор... но, учтите, что если работает вариант от RomanTim, то лучше использовать его - он быстрее в десятки раз и не требует ни памяти, ни других ресурсов...
Автор: MOO123
Дата сообщения: 31.05.2007 13:18
SERGE_BLIZNUK
Я уже понял, когда все пробовал версии. Такое решение мне и нужно было,
Автор: ParisKozlov
Дата сообщения: 31.05.2007 14:28
SERGE_BLIZNUK
согласен что быстрее и памяти не жрет

но иногда ето не критично
Автор: RostY
Дата сообщения: 31.05.2007 14:58
подскажите компонент который позволял бы использовать анимационные GIF, так как при использовании RXGifAnimator + AlphaControls 5.06 наблюдаются тормоза. А если ГИФ прозрачный то Delphi вообще тихонько вылетает.
Автор: sharik88
Дата сообщения: 31.05.2007 22:02
здравствуйте
подскажите пожалуйста как можно скобки реализовать в калькуляторе?
у меня есть мысль сделать с помощью двух-трех констант, но тогда не имею представления как он будет синусы и косинусы считать

заранее благодарю
Автор: Mandor Sawall
Дата сообщения: 01.06.2007 08:27
RostY
Anders Melander's TGIFImage?
Есть "клонинг" - http://finn.mobilixnet.dk/delphi/

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: 1С: Конвертация данных 2.0


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.