PDA

Просмотр полной версии : Дельфи (Вопросы)


Foxter
02.02.2006, 18:34
Кто знает можно как-нить сделать так, чтобы прога отрисовывала моим шрифтом текст в самой себе?
То есть шрифта у юзера нет в системе, он есть скажем либо в корне папки с программой, либо запрятан в самой программе (кстати как это можно сделать?). И при работе с программой весь текст (хотя бы меню) выводился бы именно этим шрифтом.

J.Carot
02.02.2006, 19:00
Foxter, ты имеешь ввиду, что к примеру в проге(в контекстном меню) нужно сделать? приблизительно-бы сделал скриншот того, как должно и что именно выглядеть, а то не очень че-то понятно :).

AlphaOmega
02.02.2006, 19:20
Foxter, попробуй так


procedure TForm1.FormCreate(Sender: TObject);
begin
AddFontResource(PChar(ExtractFilePath(ParamStr(0) + 'YourFont.TTF')));
SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);
end;


procedure TForm1.FormDestroy(Sender: TObject);
begin
RemoveFontResource(PChar(ExtractFilePath(ParamStr( 0) + 'YourFont.TTF')));
SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);
end;

Foxter
02.02.2006, 21:22
неа... не получилось...
сам фонт положил в папку с exe-шником

AlphaOmega
02.02.2006, 21:36
Ээ.... я думаю этот код что я привёл, только инициализирует шрифт в прогу. Далее её надо как-то присвоить к объектам. Как это сделать - не знаю....

Foxter
03.02.2006, 22:42
ладно, думаю в процессе еще разберемся...
еще вопрос: как можно сделать менюшку как в офисе?

AlphaOmega
03.02.2006, 23:00
ладно, думаю в процессе еще разберемся...
еще вопрос: как можно сделать менюшку как в офисе?

http://img294.imageshack.us/img294/1959/officemenu9hy.jpg
Это вроде как тулбар, а не менюшка.
Я полагаю для делфей есть специальные графические компоненты позволяющие это делать...

Foxter
03.02.2006, 23:02
а не знаешь где взять?

AlphaOmega
03.02.2006, 23:07
а не знаешь где взять?
Поищи на следующих ресурсах:
http://www.torry.net/
http://delphi.icm.edu.pl/
и в google поищи "delphi components"

Foxter
15.02.2006, 12:52
все кто пользовался QIP-ом знает что там есть такая штука как RUS2LAT и наоборот.
н-р: Татьяна -> Tatyana
а как это организовать в дельфи? ясное дело что это должно быть в array-ях.. но как?
в основном надо только с RUS2LAT.

AlphaOmega
15.02.2006, 19:05
все кто пользовался QIP-ом знает что там есть такая штука как RUS2LAT и наоборот.
н-р: Татьяна -> Tatyana
а как это организовать в дельфи? ясное дело что это должно быть в array-ях.. но как?
в основном надо только с RUS2LAT.
Можно пойти обходным путём (если срочно):

запускаешь цикл от 1 до Х (кол-во букв)
проверка - если буква ХХ, то на выходе УУ
и всё...

могу пример дать

Foxter
15.02.2006, 19:08
могу пример дать
да, было бы неплохо....

AlphaOmega
15.02.2006, 19:38
Значит вот образец функции
p.s.: могут быть ошибки в синтаксисе иби я пишу вообще на С++, а дельфи знаю постольку-поскольку...


function RUStoLAT(symbol: Char): Char;
var Result: Char;
begin
if symbol = 'a' then Result = 'a';
if symbol = 'б' then Result = 'b';
if symbol = 'в' then Result = 'v';
... (сюда остальные буквы)
if symbol = 'э' then Result = 'e';
if symbol = 'ю' then Result = 'yu';
if symbol = 'я' then Result = 'ya';
end;

ну а дальше в любом месте (где надо):
var Russian, Translit : string; (исходная и конечная строки)

непосредственно обработка текста:
var i : Integer;
begin
Translit := Russian;
for i := 0 to (Length(Russian) - 1) do
Translit[i] := RUStoLAT(Russian[i]);
end;


вроде бы так.
если что - могу написать ПРАВИЛЬНО на С++, а потом другие мемберы форума могут просто перевести это на правильный дельф

Kostyan
23.02.2006, 18:42
Относительно последнего вопроса... Rus2Lat можно сделать и так:

unit Unit1;
interface
uses
SysUtils,Forms,Dialogs,StdCtrls,Controls,Classes;

type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

function rus2lat(data:string):string;
var a: array [1..30] of string;
i,L,j,k:byte;
Rus,Lat,sout:string;
begin
sout:='';
L:=Length(data);
Rus:='абвгдежзиклмнопрстуфхю'; //собственно эти строки и служат
Lat:='abvgdegziklmnoprstyfhu'; //для перевода RUS символов в ENG
for i:=1 to L do
begin
for j:=1 to 23 do
if data[i]=Rus[j] then a[i]:=Lat[j]
else
if AnsiLowerCase(data[i])=Rus[j] then a[i]:=AnsiUpperCase(Lat[j]);
end;
for k:=1 to L do sout:=sout+a[k];
Rus2Lat:=sout;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
label1.Caption:=rus2lat(Edit1.Text);
end;

end.

На форму бросаем TEdit, TLabel и TButton... проверил, работает...хотя строковые переменные Rus и Lat скорей всего надо будет переписать. Эти только для примера.

Foxter
18.04.2006, 16:11
короче вопрос такой.
на форме расположены:
DBComboBox1 и DBComboBox2
оба завязаны на одну таблицу с двумя столбцами. Один на один столбец а второй соответственно на второй.
таблица содержит данные типа:
Дом 12345
Дом 23456
Дом 34567
Работа 12345
Работа 23456
Сотовый 123456
Вот как организовать событие OnChange для первого, чтобы при выборе из списка чего-либо - второй фильтровался сам и выбирал только выбранные в соответствии с первым данные.
скажем при выборе
Дом
выбирались бы только те данные что под Дом подходят (и их можно увидеть во втором DBComboBox)

AlphaOmega
19.04.2006, 22:22
короче вопрос такой...
Вообщем попробуй так (я объясню на логическом языке, а ты сам на дельфи переведи).

Пусть на форме три контроля (списка) 1 2 и 3
в 1-ом только названия, вот втором и названия и цифры, в третьем только цифры. Видимы 1 и 3-ий.

//-----------------------------------------------------
OnChange
{
очищаешь DBComboBox3;
for (int i = 0; i < DBComboBox2.Items.Count; i++)
{
если DBComboBox1.Text равняется DBComboBox2.Items.Strings[i].SubString(1,DBComboBox1.Text.Length())
тогда DBComboBox3.Items.Add(DBComboBox2.Items.Strings[i].SubString(DBComboBox1.Text.Length()+1, 255) )
}
}
//-----------------------------------------------------
вот такой вот принцип...

Kostyan
25.04.2006, 22:10
Возникла небольшая проблема, может кто сможет помочь? В общем, дело в следующем. Имеется некоторая API функция, возвращающая в качестве результата указатель на массив размера size. Каким образом можно преобразовать возвращаемый массив в стринговый массив?

var
.....
param:byte;
.....
.....
_API_function (...,...,...,@param,@size,...,...);
.....

добавлено
извиняюсь, проблема решилась элементарно...

Kostyan
10.05.2006, 21:02
Такой вот вопрос, вернее просьба. Есть у кого нить компилятор от третьей дельфи dcc32.exe. Если есть, был бы признателен.

Kostyan
28.05.2006, 14:52
Вопрос... как установить такую хитрую ловушку, которая перехватывает системные сообщения пользователя об удалении файла? Это из серии Win API про HOOK функции...

Antony
22.10.2006, 14:01
2 Foxter Ну что, разобрался со шрифтами в иенюшке программы? Если да, то подскажи как? ;)

win-kim
23.10.2006, 07:46
все кто пользовался QIP-ом знает что там есть такая штука как RUS2LAT и наоборот.
н-р: Татьяна -> Tatyana
а как это организовать в дельфи? ясное дело что это должно быть в array-ях.. но как?
в основном надо только с RUS2LAT.

для рус-то-лат сделать можно тупо:
Обработать в цикле строку

string res = '';
for i=1 to Length(str) do
begin
if copy(str, i,1) = 'Б' then res+='B'
...
т.д. все условия для всех букв алфавита
end;


Мне нужен крэк на домашнюю бухгалтерию. Прошу вышлите мне его на е-майл!

win-kim добавил 23.10.2006 в 07:49
крэк касательно топика
http://www.foxter.ru/showthread.php?t=594