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

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

Автор: Jokerjar79
Дата сообщения: 19.03.2008 07:29

Цитата:
юзеру? -- не фиг ему там делать, для него гуй сделан...

Изначально, как я помню, проблема стояла в размещении комментариев в ini файле. Они то, скорей всего, как раз и нужны юзеру.
Автор: ILSOFT
Дата сообщения: 19.03.2008 07:31
akaGM

Цитата:
хмл -- давно стандарт, кросс-платформа, библиотек до фига, зачем? от добра добра не ищут...

предложил как вариант, не нравитсяя не ешь может кому пригодится
Автор: myxa0
Дата сообщения: 19.03.2008 07:35
Как узнать размер изображения в дюймах?
Автор: Jokerjar79
Дата сообщения: 19.03.2008 08:46
Как определить описание exe?

Автор: RostY
Дата сообщения: 19.03.2008 09:18
Jokerjar79
Project - Options - закладка Application - свойство Title

Добавлено:
myxa0
если есть в сантиметрах, то поделить на 2.54.
если в пикселях - то делить на dpi
Автор: Jokerjar79
Дата сообщения: 19.03.2008 09:31
RostY, это да. Я имею в виду определить данное описание у произвольного exe'шника. Сорри, что сразу не оконкретизировал свой вопрос
Автор: SERGE_BLIZNUK
Дата сообщения: 19.03.2008 10:53
Jokerjar79 очень рекомендую Delphi World цитата оттуда... [more=Получаем информацию о версии файла]

Получаем информацию о версии файла
--------------------------------------------------------------------------------

Код: [no]
uses ShellApi;

type
TFileVersionInfo = record
FileType,
CompanyName,
FileDescription,
FileVersion,
InternalName,
LegalCopyRight,
LegalTradeMarks,
OriginalFileName,
ProductName,
ProductVersion,
Comments,
SpecialBuildStr,
PrivateBuildStr,
FileFunction : string;
DebugBuild,
PreRelease,
SpecialBuild,
PrivateBuild,
Patched,
InfoInferred : Boolean;
end;

function FileVersionInfo(const sAppNamePath: TFileName): TFileVersionInfo;
var
rSHFI: TSHFileInfo;
iRet: Integer;
VerSize: Integer;
VerBuf: PChar;
VerBufValue: Pointer;
VerHandle: Cardinal;
VerBufLen: Cardinal;
VerKey: string;
FixedFileInfo: PVSFixedFileInfo;

// dwFileType, dwFileSubtype
function GetFileSubType(FixedFileInfo: PVSFixedFileInfo) : string;
begin
case FixedFileInfo.dwFileType of

VFT_UNKNOWN: Result := 'Unknown';
VFT_APP: Result := 'Application';
VFT_DLL: Result := 'DLL';
VFT_STATIC_LIB: Result := 'Static-link Library';

VFT_DRV:
case
FixedFileInfo.dwFileSubtype of
VFT2_UNKNOWN: Result := 'Unknown Driver';
VFT2_DRV_COMM: Result := 'Communications Driver';
VFT2_DRV_PRINTER: Result := 'Printer Driver';
VFT2_DRV_KEYBOARD: Result := 'Keyboard Driver';
VFT2_DRV_LANGUAGE: Result := 'Language Driver';
VFT2_DRV_DISPLAY: Result := 'Display Driver';
VFT2_DRV_MOUSE: Result := 'Mouse Driver';
VFT2_DRV_NETWORK: Result := 'Network Driver';
VFT2_DRV_SYSTEM: Result := 'System Driver';
VFT2_DRV_INSTALLABLE: Result := 'InstallableDriver';
VFT2_DRV_SOUND: Result := 'Sound Driver';
end;
VFT_FONT:
case FixedFileInfo.dwFileSubtype of
VFT2_UNKNOWN: Result := 'Unknown Font';
VFT2_FONT_RASTER: Result := 'Raster Font';
VFT2_FONT_VECTOR: Result := 'Vector Font';
VFT2_FONT_TRUETYPE: Result :='Truetype Font';
else;
end;
VFT_VXD: Result :='Virtual Defice Identifier = ' +
IntToHex(FixedFileInfo.dwFileSubtype, 8);
end;
end;


function HasdwFileFlags(FixedFileInfo: PVSFixedFileInfo;
Flag : Word) : Boolean;
begin
Result := (FixedFileInfo.dwFileFlagsMask and
FixedFileInfo.dwFileFlags and
Flag) = Flag;
end;

function GetFixedFileInfo: PVSFixedFileInfo;
begin
if not VerQueryValue(VerBuf, '', Pointer(Result), VerBufLen) then
Result := nil
end;

function GetInfo(const aKey: string): string;
begin
Result := '';
VerKey := Format('\StringFileInfo\%.4x%.4x\%s',
[LoWord(Integer(VerBufValue^)),
HiWord(Integer(VerBufValue^)), aKey]);
if VerQueryValue(VerBuf, PChar(VerKey),VerBufValue,VerBufLen) then
Result := StrPas(VerBufValue);
end;

function QueryValue(const aValue: string): string;
begin
Result := '';
// obtain version information about the specified file
if GetFileVersionInfo(PChar(sAppNamePath), VerHandle,
VerSize, VerBuf) and
// return selected version information
VerQueryValue(VerBuf, '\VarFileInfo\Translation',
VerBufValue, VerBufLen) then
Result := GetInfo(aValue);
end;


begin
// Initialize the Result
with Result do
begin
FileType := '';
CompanyName := '';
FileDescription := '';
FileVersion := '';
InternalName := '';
LegalCopyRight := '';
LegalTradeMarks := '';
OriginalFileName := '';
ProductName := '';
ProductVersion := '';
Comments := '';
SpecialBuildStr:= '';
PrivateBuildStr := '';
FileFunction := '';
DebugBuild := False;
Patched := False;
PreRelease:= False;
SpecialBuild:= False;
PrivateBuild:= False;
InfoInferred := False;
end;

// Get the file type
if SHGetFileInfo(PChar(sAppNamePath), 0, rSHFI, SizeOf(rSHFI),
SHGFI_TYPENAME) <> 0 then
begin
Result.FileType := rSHFI.szTypeName;
end;

iRet := SHGetFileInfo(PChar(sAppNamePath), 0, rSHFI,
SizeOf(rSHFI), SHGFI_EXETYPE);
if iRet <> 0 then
begin
// determine whether the OS can obtain version information
VerSize := GetFileVersionInfoSize(PChar(sAppNamePath), VerHandle);
if VerSize > 0 then
begin
VerBuf := AllocMem(VerSize);
try
with Result do
begin
CompanyName := QueryValue('CompanyName');
FileDescription := QueryValue('FileDescription');
FileVersion := QueryValue('FileVersion');
InternalName := QueryValue('InternalName');
LegalCopyRight := QueryValue('LegalCopyRight');
LegalTradeMarks := QueryValue('LegalTradeMarks');
OriginalFileName := QueryValue('OriginalFileName');
ProductName := QueryValue('ProductName');
ProductVersion := QueryValue('ProductVersion');
Comments := QueryValue('Comments');
SpecialBuildStr := QueryValue('SpecialBuild');
PrivateBuildStr := QueryValue('PrivateBuild');
// Fill the VS_FIXEDFILEINFO structure
FixedFileInfo := GetFixedFileInfo;
DebugBuild := HasdwFileFlags(FixedFileInfo,VS_FF_DEBUG);
PreRelease := HasdwFileFlags(FixedFileInfo,VS_FF_PRERELEASE);
PrivateBuild := HasdwFileFlags(FixedFileInfo,VS_FF_PRIVATEBUILD);
SpecialBuild := HasdwFileFlags(FixedFileInfo,VS_FF_SPECIALBUILD);
Patched := HasdwFileFlags(FixedFileInfo,VS_FF_PATCHED);
InfoInferred := HasdwFileFlags(FixedFileInfo,VS_FF_INFOINFERRED);
FileFunction := GetFileSubType(FixedFileInfo);
end;
finally
FreeMem(VerBuf, VerSize);
end
end;
end
end;

// Test it:

procedure TForm1.Button1Click(Sender: TObject);
var
FvI: TFileVersionInfo;
const
Tabulator: array[0..0] of Integer = (70);
BoolValues: array[Boolean] of string = ('No', 'Yes');
begin
FvI := FileVersionInfo('C:\FileName.exe');
ListBox1.TabWidth := 1;
SendMessage(ListBox1.Handle, LB_SETTABSTOPS, 1, Longint(@Tabulator));
with FvI, ListBox1.Items do
begin
Add('FileType:'#9 + FileType);
Add('CompanyName:'#9 + CompanyName);
Add('CompanyName:'#9 + FileDescription);
Add('FileVersion:'#9 + FileVersion);
Add('InternalName:'#9 + InternalName);
Add('LegalCopyRight:'#9 + LegalCopyRight);
Add('LegalTradeMarks:'#9 + LegalTradeMarks);
Add('OriginalFileName:'#9 + OriginalFileName);
Add('ProductName:'#9 + ProductName);
Add('ProductVersion:'#9 + ProductVersion);
Add('SpecialBuildStr:'#9 + SpecialBuildStr);
Add('PrivateBuildStr:'#9 + PrivateBuildStr);
Add('FileFunction:'#9 + FileFunction);
Add('DebugBuild:'#9 + BoolValues[DebugBuild]);
Add('PreRelease:'#9 + BoolValues[PreRelease]);
Add('PrivateBuild:'#9 + BoolValues[PrivateBuild]);
Add('SpecialBuild:'#9 + BoolValues[SpecialBuild]);
end;
end;
[/no]
Автор: xy
Дата сообщения: 19.03.2008 11:22
Jokerjar79
я использую http://www.delphidabbler.com/software/verinfo?mid=3.1
всё просто и лаконично работает ;)
Автор: akaGM
Дата сообщения: 19.03.2008 13:21
fcdobpiy
чтобы не прыгать с версии на версию, я использую встроенный родной, всё в сорсах, c хелпом, всё прозрачно...
../sources/win32/xml/
Автор: Diadema
Дата сообщения: 19.03.2008 15:50
В SQL есть таблица "Процедуры", где записаны ID и Name процедур
Есть таблица "Группы процедур", где записаны ID и Name групп процедур
И, наконец, есть третья таблица, которая связывает первую и вторую.
Как можно создать грид, который будет добавлять строки в третью группу?

Добавлено:
Т.е. третью таблицу
Автор: Jokerjar79
Дата сообщения: 19.03.2008 16:55
xy, я пользуюсь бесплатной Turbo Delphi

В общем, вот решение моей проблемы:


Код: function GetFileDescription(FileName: string): string;
var
szName: array[0..255] of Char;
P: Pointer;
Value: Pointer;
Len: UINT;
GetTranslationString:string;
FFileName: PChar;
FValid:boolean;
FSize: DWORD;
FHandle: DWORD;
FBuffer: PChar;
begin
try
FFileName := StrPCopy(StrAlloc(Length(FileName) + 1), FileName);
FValid := False;
FSize := GetFileVersionInfoSize(FFileName, FHandle);
if FSize > 0 then
try
GetMem(FBuffer, FSize);
FValid := GetFileVersionInfo(FFileName, FHandle, FSize, FBuffer);
except
FValid := False;
raise;
end;
Result := '';
if FValid then
VerQueryValue(FBuffer, '\VarFileInfo\Translation', p, Len)
else
p := nil;
if P <> nil then
GetTranslationString := IntToHex(MakeLong(HiWord(Longint(P^)), LoWord(Longint(P^))), 8);
if FValid then
begin
StrPCopy(szName, '\StringFileInfo\' + GetTranslationString + '\FileDescription');
if VerQueryValue(FBuffer, szName, Value, Len) then
Result := StrPas(PChar(Value));
end;
finally
try
if FBuffer <> nil then
FreeMem(FBuffer, FSize);
except
end;
try
StrDispose(FFileName);
except
end;
end;
end;
Автор: xy
Дата сообщения: 19.03.2008 22:00
Jokerjar79

Цитата:
я пользуюсь бесплатной Turbo Delphi

эту фразу не понял

в остальном вроде компактное решение, главное чтоб устраивало
Автор: Frodo_Torbins
Дата сообщения: 19.03.2008 22:05
xy
Turbo Delphi Explorer не позволяет ставить компоненты, но зато является бесплатной.
Автор: HellChild
Дата сообщения: 22.03.2008 23:38
Помогите, подскажите. Пишу прогу, которая создаёт текстовый файл, записывает в него
содержимое "Мемо" при нажатии кнопки. Но принажатии другой кнопки для открытия файла и помещения его содержимого обратно в "мемо" выдаёт ошибку "104 I/O....." что это может быть?
Автор: RomanTim
Дата сообщения: 23.03.2008 02:22
HellChild
А гугл уже отменили? Первая же ссылка по запросу "delphi error 104" - список кодов рантаймовых ошибок делфи, где написано: 104 File not open for input
Вообще то у Memo.Lines есть методы SaveToFile и LoadFromFile, зачем велосипед сочинять?
Автор: JasonX
Дата сообщения: 23.03.2008 10:54
Помогите разобраться почему эти два фрагмента не работают вместе.

Пардон муа, нашел ошибку. Можно удалить мой пост.

Автор: HalfLitre
Дата сообщения: 24.03.2008 19:29
Вопрос не по программированию, но может кто-нибудь сталкивался.
Есть куча проектов (Delphi-7) но только два из них ведут себя странно и
при этом только в этих проектах используется MyDAC от crlab.com.
Странность заключается в том что в IDE при открытом (не запущенном) проекте
даешь команду из меню "File -> Close All" и delphi вылетает c AV.
Все остальные проекты такой болезнью
не страдают. Делал и Repair и ReInstall delphi, ничего не помогает.

Автор: RostY
Дата сообщения: 25.03.2008 09:20
HalfLitre
1. попробуй поудаляй (перемести в другое место) из папки проекта *.dcu, *.dof, *.dsk, *.dti
2. Возможно, используются примочки к дельфи типа coderush, castalia... (у меня вылетал дельфи-5 с coderush, правда без MyDac. Так и не разобрался из-за чего).
3. Если создаешь новый проект з майдаками (формочку и несколько компонентов) тож вылетает ?
4. в DesignTime у тебя в проектах Dataset'ы открытые ?
Автор: HalfLitre
Дата сообщения: 25.03.2008 15:02
RostY
1.Попробовал, не помогло.
2.Стоял CnWizards (типа Castalia), снес, не помогло.
4.Все открывается только в run-time

3.Попробовал, что интересно не вылетает.
Мистика блин
Автор: DmitryKz
Дата сообщения: 25.03.2008 19:00
Ребята, если у кого есть книга Дарахвелидзе Марков Программирование в Delphi 7 не могли бы выложить содержимое дискеты отдельно. А то купил книгу, а дискета не читается.
Автор: Jokerjar79
Дата сообщения: 25.03.2008 19:37
DmitryKz, держи
Автор: akaGM
Дата сообщения: 25.03.2008 19:38
DmitryKz
на
http://slil.ru/25617999
Автор: DmitryKz
Дата сообщения: 25.03.2008 21:04
Jokerjar79
akaGM
Ребята, спасибо большое!

Добавлено:
Jokerjar79
Это, кажись, из другой книги.
Автор: Evill
Дата сообщения: 25.03.2008 21:28
Народ, подскажите пожалуйста....
Можно ли в Delphi вставить анимированные файлы типа GIF либо какие другие?
Каким объектом это можно сделать?

Заранее спасибо.
Автор: Antananarivu
Дата сообщения: 25.03.2008 23:10
Здравствуйте.
Столкнулся с этой темой недавно..
Мне надо закачать почту, соединяясь с почтовым сервером и сохранить текст письма в папку, также нужно сохранить вложения, если они есть.
Использую объекты Indy.
Вот текст программы:

Код:
unit Unit222;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdMessage, IdBaseComponent, IdComponent,
IdTCPConnection, IdTCPClient, IdMessageClient, IdPOP3;

type
TForm1 = class(TForm)
Button1: TButton;
POP3: TIdPOP3;
IdMessage: TIdMessage;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
label f;
var
mailcicl:integer;
addr:string;
begin
POP3.Host:='pop.mail.ru';
POP3.Port:=110;
POP3.UserID:='antananarivu83@mail.ru';
POP3.Password:='******';
addr:=ExtractFilePath(Application.ExeName);
POP3.Connect;
for mailcicl:=1 to POP3.CheckMessages do
begin
if POP3.CheckMessages<1 then goto f ;
IdMessage.Clear;
Memo1.Clear;
POP3.Retrieve(1,IdMessage);
Memo1.Lines.AddStrings(IdMessage.Body);
Memo1.Lines.SaveToFile(addr+inttostr(mailcicl)+'.txt');
POP3.Delete(mailcicl);
end;
f:
POP3.Disconnect;
end;
end;
end.

Автор: DmitryKz
Дата сообщения: 26.03.2008 00:03
akaGM
Эх, посмотрел в приложении содержание дискеты для книги Дарахвелидзе Марков Программирование в Delphi 7, а в твоем выложенном архиве многих папок не хватает
Ребята, повторю просьбу - выложите ВСЮ дискету для этой книги.
Автор: Jokerjar79
Дата сообщения: 26.03.2008 00:40
DmitryKz, я взял отсюда, может там наврали?
Автор: DmitryKz
Дата сообщения: 26.03.2008 03:43
Jokerjar79
Получается наврали, в смысле ошиблись.
Автор: akaGM
Дата сообщения: 26.03.2008 07:45
DmitryKz
а я взял со сборника, так что там не наврали, а, скорее, недописали...

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

а ещё сунься на сайт издательства, может там есть...
Автор: Figaro2000
Дата сообщения: 26.03.2008 07:48
Antananarivu
есть книга Indy In Depth (перевод А.Подгорецкого, pdf, весит всего 1-1.2 метра), пойдет? куда лить?

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

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


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