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

» прикладное программирование и не только оно...

Автор: akaGM
Дата сообщения: 23.10.2011 21:00
tank0,
а ты по-русски только читаешь?

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


Цитата:
EN (google)
and you are in Russian only are you reading?

third time I ask, but on the fig through the automatic translators dismiss his text,
to confuse or amuse us?


Цитата:
EN (yandex)
and you in Russian only read?

ask a third time: and at fig through automatic translators your text chase,
to confuse us or fun?


весело?
Автор: tank0
Дата сообщения: 23.10.2011 21:20
akaGM
I'm not an Russian speaker, so I post English on this forum, But as someone told me that I Can Not post English posts, So most of the time, I'll include an auto translate results of PROMT.

Ru(PROMT)

Я не российский спикер, таким образом, я осведомляю английский язык на этом форуме, Но поскольку кто-то сказал мне, что я Не Могу отправить английские должности, Так большую часть времени, я буду включать автомобиль, переводят результаты PROMT.
Автор: XPerformer
Дата сообщения: 23.10.2011 21:26
tank0
И что, есть правило форума, согласно которому можно писать на других языках, приписав несколько слов на ломанном русском?
Автор: tank0
Дата сообщения: 23.10.2011 21:31
XPerformer
akaGM

OK, sorry for trouble you so much.
I'll never say any words neither English or auto translate Russian again.

ByeBye

Ru(PROMT)(Last one, none after this)

Хорошо, жаль о проблеме Вы так.
Я никогда не буду говорить слов, никакой английский язык или автомобиль не переводят русский язык снова.

ByeBye
Автор: akaGM
Дата сообщения: 23.10.2011 21:58
tank0
да брось ты, никто не хотел тебя обижать...
лично я только хотел избавить тебя от _лишней_ работы, которая _никому_ не нужна...

так что sorry, если обидел
Автор: AnViSe
Дата сообщения: 21.11.2011 12:43
А тут было подумал что здесь идет сравнение онлайновых переводчиков....
Автор: indapublic
Дата сообщения: 23.11.2011 11:54

Цитата:
иногда пишут Дориан Грей а иногда Грэй

А иногда и Hangover, например, переводят как "Мальчишник в Вегасе"
Автор: M1chA
Дата сообщения: 23.11.2011 15:54
Помогите пожалуйста не программисту.

Руководство поставило задачу написать программу (или реализовать как-то еще)
которая через определнное время напоминала бы юзеру о том, что надо позвонить такому-то.
причем если клиент был внесен в базу 23.11.2011 то + N-ское колличество дней.
и таких телефонов достаточно много.
Может можно решить это сторонними прогами? Если да то какими?

Заранее Биг Сенкс.
Автор: KChernov
Дата сообщения: 23.11.2011 19:17
M1chA

Цитата:
через определнное время напоминала бы юзеру о том, что надо позвонить такому-то.
причем если клиент был внесен в базу 23.11.2011 то + N-ское колличество дней.

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


Цитата:
и таких телефонов достаточно много.

При вводе очередного достаточно создать не только контакт, но и задачу.
А можно и скрипт написать.
Автор: M1chA
Дата сообщения: 23.11.2011 20:02
KChernov
а кроме оутлука можно как-то сделать?
а как скрипт должен выглядеть?
Автор: KChernov
Дата сообщения: 23.11.2011 20:16
M1chA

Цитата:
а кроме оутлука можно как-то сделать?

В любой системе, где есть контакты и задачи, это в том или ином виде есть.


Цитата:
а как скрипт должен выглядеть?

Что значит как? Как скрипт видимо.
Например в том же оутлуке/прочих офичных приложениях можно самому записывать действия в скрипт - запишите и посмотрите.
Зачастую с небольшой доработкой можно много чего автоматизировать.
Если по сути, то это может быть новая кнопка для создания контактов, которая сначала вызывает диалог создания контакта, а потом делает по нему задачу.
Или тригер, который отслеживает вновь созданные контакты.
Ну или скрипт, который запускается периодически (например шедулером) и всем вновь (ну или последние N дней назад) появившимся контактам без задачи такую создаёт.
Автор: ShIvADeSt
Дата сообщения: 24.11.2011 14:32
Нет конкретики что за база, но проблемы я не вижу. Обычный запрос по таблице - выбираем все контакты и дата создания контакта. Смотрим, если от даты создания плюс цать дней это сегодня - то выдаем напоминание. Прогу автоматом суем в автозагрузку и сворачиваем в трей либо запускаем каждый день по шедулеру. На дельфи пишется менее чем за 1 день, если есть компоненты для доступа к базе. В качестве базы может быть тот же файл записей да хоть обычный текстовик или екселевский файл.
Автор: XPerformer
Дата сообщения: 04.12.2011 16:42
Не знаю, в какой теме лучше спросить, попробую здесь
Есть способ отличить по бинарнику exe-файла, на какой версии Delphi написана прога?
Обычно я смотрю вхождения разных компонент типа TActionList и др. типов, специфичных для делфи, но вот как конкретную версию вычислить, не знаю
Автор: akaGM
Дата сообщения: 04.12.2011 22:08
XPerformer

ты прям хочешь получать
дельфи 2007, build такой-то?

это вряд ли, если только при сборке полноценная version info не использовалась...
хотя поищи по словам delphi decompiler, он по борландовским exe, dcu, bpl как раз работает...
Автор: XPerformer
Дата сообщения: 04.12.2011 22:12
akaGM
Не, ну билд не обязательно, достаточно версию делфи
dcu-шек нет, только exe
Я вот думаю, RTTI в разных версиях разная, может, отсюда плясать...
Автор: akaGM
Дата сообщения: 04.12.2011 22:17
XPerformer
ну пляши...
хотя лично у меня всегда {$M-} стоит...
Автор: XPerformer
Дата сообщения: 04.12.2011 22:19
akaGM
а зачем? из-за размера? или более небанальные причины?
Автор: akaGM
Дата сообщения: 04.12.2011 22:24
XPerformer
не знаю...

[more=глянь]
{
Информация о версии (Version Info) в Delphi EXE
}

unit rpVersionInfo;
interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
TypInfo;

type
{$M+}
(* Видели директиву $M+??? Это заставляет Delphi включать в код RTTI-информацию для

перечислимых типов. В основном допускает работу с перечислимыми типами как
со строками с помощью GetEnumName *)
TVersionType = (vtCompanyName, vtFileDescription, vtFileVersion,
vtInternalName,
vtLegalCopyright, vtLegalTradeMark, vtOriginalFileName,
vtProductName, vtProductVersion, vtComments);
{$M-}

TrpVersionInfo = class(TComponent)
(* Данный компонент позволяет получать информацию о версии вашего приложения

во время его выполенния *)
private
FVersionInfo: array[0..ord(high(TVersionType))] of string;
protected
function GetCompanyName: string;
function GetFileDescription: string;
function GetFileVersion: string;
function GetInternalName: string;
function GetLegalCopyright: string;
function GetLegalTradeMark: string;
function GetOriginalFileName: string;
function GetProductName: string;
function GetProductVersion: string;
function GetComments: string;
function GetVersionInfo(VersionType: TVersionType): string; virtual;
procedure SetVersionInfo; virtual;
public
constructor Create(AOwner: TComponent); override;
published
(* Использовать это очень просто - Label1.Caption := VersionInfo1.FileVersion

Примечание: Все свойства - только для чтения, поэтому они недоступны в
Инспекторе Объектов *)
property CompanyName: string read GetCompanyName;
property FileDescription: string read GetFileDescription;
property FileVersion: string read GetFileVersion;
property InternalName: string read GetInternalName;
property LegalCopyright: string read GetLegalCopyright;
property LegalTradeMark: string read GetLegalTradeMark;
property OriginalFileName: string read GetOriginalFileName;
property ProductName: string read GetProductName;
property ProductVersion: string read GetProductVersion;
property Comments: string read GetComments;
end;

procedure Register;

implementation

constructor TrpVersionInfo.Create(AOwner: TComponent);
begin

inherited Create(AOwner);
SetVersionInfo;
end;

function TrpVersionInfo.GetCompanyName: string;
begin

result := GeTVersionInfo(vtCompanyName);
end;

function TrpVersionInfo.GetFileDescription: string;
begin

result := GeTVersionInfo(vtFileDescription);
end;

function TrpVersionInfo.GetFileVersion: string;
begin

result := GeTVersionInfo(vtFileVersion);
end;

function TrpVersionInfo.GetInternalName: string;
begin

result := GeTVersionInfo(vtInternalName);
end;

function TrpVersionInfo.GetLegalCopyright: string;
begin

result := GeTVersionInfo(vtLegalCopyright);
end;

function TrpVersionInfo.GetLegalTradeMark: string;
begin

result := GeTVersionInfo(vtLegalTradeMark);
end;

function TrpVersionInfo.GetOriginalFileName: string;
begin
result := GeTVersionInfo(vtOriginalFileName);
end;

function TrpVersionInfo.GetProductName: string;
begin
result := GeTVersionInfo(vtProductName);
end;

function TrpVersionInfo.GetProductVersion: string;
begin
result := GeTVersionInfo(vtProductVersion);
end;

function TrpVersionInfo.GetComments: string;
begin
result := GeTVersionInfo(vtComments);
end;

function TrpVersionInfo.GeTVersionInfo(VersionType: TVersionType): string;
begin
result := FVersionInfo[ord(VersionType)];
end;

procedure TrpVersionInfo.SeTVersionInfo;
var
sAppName, sVersionType: string;
iAppSize, iLenOfValue, i: integer;
pcBuf, pcValue: PChar;
begin
sAppName := Application.ExeName;
iAppSize := GetFileVersionInfoSize(PChar(sAppName), iAppSize);
if iAppSize > 0 then
begin
pcBuf := AllocMem(iAppSize);
GetFileVersionInfo(PChar(sAppName), 0, iAppSize, pcBuf);
for i := 0 to Ord(High(TVersionType)) do
begin
sVersionType := GetEnumName(TypeInfo(TVersionType), i);
sVersionType := Copy(sVersionType, 3, length(sVersionType));
if VerQueryValue(pcBuf, PChar('StringFileInfo\040904E4\' +
sVersionType), Pointer(pcValue), iLenOfValue) then
FVersionInfo[i] := pcValue;
end;
FreeMem(pcBuf, iAppSize);
end;
end;

procedure Register;
begin
RegisterComponents('FreeWare', [TrpVersionInfo]);
end;

end.
[/more]
и не спрашивай откуда это у меня, всё равно не скажу...

почему, кстати, твой вопрос не заслуживает топа "компоненты дельфи"?
Автор: XPerformer
Дата сообщения: 04.12.2011 22:30
akaGM

Цитата:
Если класс объявляется в состоянии {$M+} или является производным от класса объявленного в этом состоянии, то компилятор генерирует RTTI о его полях, методах и свойствах, объявленных в разделе published. В противном случае раздел published в классе не допускается. Класс TPersistent, являющийся предшественником большинства классов Delphi и все классов компонентов, объявлен в модуле Classes в состоянии {$M+}.

Если я правильно понимаю, если используешь хоть один контрол из VCL, то эта директива включается хошь-не хошь

Добавлено:

Цитата:
почему, кстати, твой вопрос не заслуживает топа "компоненты дельфи"?

я компонент не ищу, идеи вполне достаточно, сам реализую
Наверное, вопрос для темы "общие вопросы Делфи", но такой не нашел


Добавлено:
за код спасибо, посмотрю
Автор: akaGM
Дата сообщения: 04.12.2011 22:50
XPerformer
я не использую VCL...


Цитата:
я компонент не ищу...
просто там все местные дельфийцы сидят...
Автор: XPerformer
Дата сообщения: 04.12.2011 22:55
akaGM
думал, погонят Ладно, в дальнейшем там буду спрашивать
Автор: data man
Дата сообщения: 04.12.2011 23:32
XPerformer

Цитата:
Есть способ отличить по бинарнику exe-файла, на какой версии Delphi написана прога?

Ну да. PEiD умеет, например. Главное, базу сигнатур иметь посвежее.

Цитата:
думал, погонят

Это точно.
Автор: XPerformer
Дата сообщения: 04.12.2011 23:52
data man
PEiD 0.95 использую, но он мне хронически говорит Delphi6-Delphi7 на все проги
А где взять сигнатуры посвежее?
на офсайте написано, разработка прекращена


Добавлено:
заглянул в файлик userdb.txt, ничего свежее Delphi 7 там не упоминается
Автор: akaGM
Дата сообщения: 06.12.2011 00:42
XPerformer
нашёл что тебе нужно:
begin
writeln(CompilerVersion);
end.

располагается в system.dcu, даблового типа

выкусывай сам...
Автор: A_V
Дата сообщения: 07.12.2011 18:58
akaGM
это типизированная константа, ее адрес каждый раз разный. как ты предлагаешь ее в бинарнике искать?

XPerformer
попробуй ExeInfoPE, он худо-бедно обновляется, там с новыми версиями дельфи получше.

еще можно использовать т.н. 'декомпиляторы', они для анализа бинарника более точно версию определяют:

для старых версий (<=7) хорошо определяет DeDe (сверху пишет при анализе).
под 2010/XE/XE2 писал свою тулзу (2010й от XE не отличает, зато определит XE2).
могу кинуть если надо либо на exelab поищи по киворду DRX/Delphi RTTI eXtractor.
2009 - если видны classnamе'ы с дженериками,
но drx при этом не взял (т.е нет расширенного rtti).

как-то так.
Автор: akaGM
Дата сообщения: 07.12.2011 19:05
A_V

Цитата:
это типизированная константа, ее адрес каждый раз разный. как ты предлагаешь ее в бинарнике искать?
я? никак...
и понятия не имею и не собираюсь, чё ты меня спрашиваешь?
Автор: XPerformer
Дата сообщения: 07.12.2011 19:06
A_V
dede тоже использовал, для старых версий в общем-то проблем нет
за наводки спасибо, не разберусь или не найду - тогда спрошу
А по какому принципу XE2 определяешь? (если не секрет)
Автор: A_V
Дата сообщения: 07.12.2011 22:09
akaGM

Цитата:

begin
writeln(CompilerVersion);
end.


а че тогда фигню советуешь?

XPerformer
по различиям в rtti - наличию методов у рекордов и индексированных пропертей в XE2, ProcSig у процедурных типов (заявлено и в 2010/XE, но там мусор),

Автор: akaGM
Дата сообщения: 07.12.2011 22:27
A_V
ну, например, я о существовании CompilerVersion узнал только тогда когда откликнулся на просьбу XPerformer помочь. т.е. лично для себя получил новую инфу...
помог, что называется, как смог... фигово? очень даже может быть...
а вообще ты прав, надо будет просить XPerformer не подавать на меня в гаагский...
Автор: XPerformer
Дата сообщения: 07.12.2011 22:29
akaGM
я тоже не знал, спасибо за инфу
давайте не зацикливаться

Страницы: 12345678910111213141516171819202122232425262728293031

Предыдущая тема: Borland Developer Studio 2006 и Oracle пакеты


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