Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.01.09;
Скачать: CL | DM;

Вниз

ini   Найти похожие ветки 

 
rosl   (2003-12-25 07:28) [0]

Уважаемые МАСТЕРА!!!
Как в файл ini записать, а потом прочитать оттуда настройку font.style


 
Babay ©   (2003-12-25 07:52) [1]

Uses typInfo,inifiles;

Пишем:
Var ini:TIniFile;
begin
ini:=TIniFile.Create("c:\Config.ini");
ini.WriteString("Font","FontStyle",GetSetProp(Font,"Style"));
ini.Free;
end;

Читаем:
Var ini:TIniFile;
s:String;
begin
ini:=TIniFile.Create("c:\Config.ini");
s:=ini.ReadString("Font","FontStyle","");
ini.Free;
SetSetProp(Font, "Style",s);
end;

Открываем хелп или книжку читаем про RTTI


 
del   (2003-12-25 08:05) [2]

Вот ini - файл
[Global]
ServerName=Main
dataBaseName=transport
userName=masterRoute

[Font]
name=Arial
Height=-12

[Visual]
SheetActive=1
aviFileName=e:\DevDelphi\resource\common.avi

[Environ]
idRouteType=3

а вот работающий код:
чтение:
fontName := inifile.ReadString("Font", "name", "Arial");
if Length(fontName) > 0 then
fontHeight :=
StrToInt(inifile.ReadString("Font", "Height", "10"))
else
fontHeight := Self.Font.Height;
inifile.Free;

Self.Font.Name := fontName;
Self.Font.Height := fontHeight;

/////////////
запись:
inifile := TIniFile.Create(inifileName);
inifile.WriteString("Visual", "SheetActive",
IntToStr(PageControl.ActivePageIndex));
inifile.WriteString("Font", "name", fontName);
inifile.WriteString("Font", "Height", IntToStr(fontHeight));


 
Babay ©   (2003-12-25 08:28) [3]

То del
А где запись свойства Style ? ты вопрос внимательно читал ?


 
del   (2003-12-25 08:44) [4]

Babay, прости, погорячился.


 
Sandman25 ©   (2003-12-25 11:06) [5]

Babay

Не подскажете, где можно найти хороший справочник по Rtti?

В Delphi help GetSetProp не описан, Yandex ничего не нашел по запросу GetSetProp, а по запросу RTTI выдает только ссылки на книги либо на форумы. Я покопался в TypInfo.pas, но это не самый удобный способ изучения, особенно учитывая отсутствие комментариев...


 
PVOzerski ©   (2003-12-25 11:19) [6]

tFontStyle - это обычный enum, приводимый к типу integer и обратно. Так что ReadInteger и WriteInteger вполне подойдут.


 
Babay ©   (2003-12-25 12:48) [7]

To Sandman25
-> "Я покопался в TypInfo.pas" и я тоже. Правда есть еще бумажная книжка по Д там неплохо основы этого дела прописаны. + еще исходники компонетов которые его используют в RXLibrary был кажется формплацемент.
А насчет электронки незнаю уменя нету буду то же рад узнать ссылочку.


 
Sandman25 ©   (2003-12-25 12:55) [8]

[7] Babay © (25.12.03 12:48)

Понятно. Спасибо. Значит я на правильном пути :) Сижу в typinfo.pas, читаю.
Ссылочек не нашел.


 
Ega23 ©   (2003-12-25 12:56) [9]

function GetFontStyle(const Value: TFontStyles): Integer;
begin
Result:=0;
if (fsBold in Value) then Result:=Result or 1;
if (fsItalic in Value) then Result:=Result or 2;
if (fsUnderline in Value) then Result:=Result or 4;
if (fsStrikeout in Value) then Result:=Result or 8;
end;

//***************************************************************

function SetFontStyle(const Value: integer): TFontStyles;
begin
Result:=[];
if ((Value shr 0) and 1)=1 then Result:=Result+[fsBold];
if ((Value shr 1) and 1)=1 then Result:=Result+[fsItalic];
if ((Value shr 2) and 1)=1 then Result:=Result+[fsUnderline];
if ((Value shr 3) and 1)=1 then Result:=Result+[fsStrikeout];
end;


Ну а запись в ini - ReadInteger, WriteInteger


 
Babay ©   (2003-12-25 12:56) [10]

To PVOzerski неа не enum a set

попробуйте сделать так

edit1.Text:=Inttostr(Integer(Font.Style));

Ну как увидели номер?
или я чегото не понимаю?


 
PVOzerski ©   (2003-12-25 13:05) [11]

Да, здесь, конечно, речь о set of tFontStyle - я поспешил... Но и на этот случай есть решение - может быть, не самое изящное, но опробованное.
var
x:tFontStyles;
y:array[1..sizeof(tFontStyles)]of byte absolute x;
i:integer;
begin
x:=Font.Style;
for i:=1 to sizeof(tFontStyles) do
IniFile.WriteInteger("Properties","FontStyleByte"+inttostr(i),y[i]);

Чтение - аналогично.


 
Тимохов ©   (2003-12-25 13:12) [12]

Что-то я не понял вот этой конструкции

x:tFontStyles;
y:array[1..sizeof(tFontStyles)]of byte absolute x;

Это ты как из головы придумал или это у тебя работает?

Вообще говоря это работать не будет, т.к. множества представляются не побайтно (как было в паскале) и побитно...


 
Sandman25 ©   (2003-12-25 13:16) [13]

[12] Тимохов © (25.12.03 13:12)

Ничего страшного. Значит, запишется/считается не 8 байт, а 1.


 
PVOzerski ©   (2003-12-25 13:18) [14]

Это у меня испытано и на других сложных структурах (не на множествах), с внутренней организацией типа Set я тоже разбирался. Хотелось бы знать, а как же тогда должны представляться множества "внутри". Да, побитно, но биты-то живут в байтах, и ничего, кроме битовой арифметики, процессор с битами как таковыми делать не умеет. В том числе и присваивание тоже. А упихивать множества set of 0..63 я ухитрялся аж в double (и загонять в соответствующие поля в MySQL + операции над множествами через самодельные UDFы на FreePascal).


 
Тимохов ©   (2003-12-25 13:19) [15]

Что ничего страшного - [11] неверный код. Он просто в дельфи не будет рабоать. Я постмотрел анкету автора - любит паскаль - с паскале это работать будет, а в дельфи нет.


 
Sandman25 ©   (2003-12-25 13:24) [16]

[15] Тимохов © (25.12.03 13:19)

Я запустил. Оно сработало, записало вроде правильно. 15 для всех выбранных.


 
Тимохов ©   (2003-12-25 13:30) [17]

На самом деле, я виноват - не узрел, что array[1..sizeof(tFontStyles)]of byte, т.е. фактически array[1..1]of byte.

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

Виноват - невинмательно прочел.


 
PVOzerski ©   (2003-12-25 13:31) [18]

Для сомневающихся (Delphi 3 - не какой-то там FPC :^) ):
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, IniFiles,
StdCtrls;

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

var
Form1: TForm1;
IniFile:tIniFile;
implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
type
tBset=set of byte;
var
x,y:tBset;
s1:array[1..sizeof(tBset)]of byte absolute x;
s2:array[1..sizeof(tBset)]of byte absolute y;
i,code:integer;
b:byte;
begin
x:=[];
for i:=0 to pred(Memo1.lines.count)do
begin
val(Memo1.lines[i],b,code);
if code=0 then
include(x,b);
end;
for i:=1 to sizeof(tBset)do
IniFile.WriteInteger("S1","I"+inttostr(i),s1[i]);
for i:=1 to sizeof(tBset)do
S2[i]:=IniFile.ReadInteger("S1","I"+inttostr(i),0);
Label1.Caption:="";
for i:=0 to 255 do
if i in y then
Label1.Caption:=Label1.Caption+" "+inttostr(i);
end;
initialization
IniFile:=tIniFile.Create(ExtractFilePath(Paramstr(0))+"test.ini");
end.


 
Тимохов ©   (2003-12-25 13:35) [19]

PVOzerski © (25.12.03 13:31) [18]
Сумлевающихся нет. Я уже сказал, чем было вызвано мое заблуждение: отрицательным опытом прошлого и невниманием настоящего.


 
Тимохов ©   (2003-12-25 13:37) [20]

Во!
Я бы для пущей надежности данного механизма написал бы packed record! Хотя работать и так будет.


 
Sandman25 ©   (2003-12-25 16:12) [21]

Зря я боялся лезть в typinfo.pas. Там до implementation всего 340 строчек. Действительно, можно без документации разобраться.



Страницы: 1 вся ветка

Текущий архив: 2004.01.09;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.018 c
3-25225
belyh
2003-12-13 12:26
2004.01.09
DBLookUpComboBox


1-25321
denis24
2003-12-22 17:22
2004.01.09
переход с 5 на 6 делфи


14-25546
iNew
2003-12-08 08:28
2004.01.09
---|Ветка была без названия|---


1-25397
Michael K
2003-12-24 14:54
2004.01.09
GraphicEx требует JPG.PAS, а его нет!


6-25486
shItaSS
2003-11-06 12:13
2004.01.09
Как программно опредилить в локалке комп или нет