/ Forside/ Teknologi / Udvikling / Delphi/Pascal / Spørgsmål
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
Med FontDialog og INI forsøges der valg ~
Fra : MonieJacobsen
Vist : 594 gange
100 point
Dato : 05-02-04 08:37

Med FontDialog komponenten forsøger jeg, at valge mellem forskellige Font.Style.
Og hente og gemme opsætning i INI file.

Disse valgmuligheder ønskes.
Memo1.Font.Style := [];
Memo1.Font.Style := [fsBold];
Memo1.Font.Style := [fsItalic];
Memo1.Font.Style := [fsBold, fsItalic];

Men får følgende fejlmeddelse:

[Error] Unit1.pas(226): Incompatible types: 'TFontStyles' and 'TCaption'

Hvad skal der gøres her, for ikke at få denne fejl?

Se linje med fejlen *************

procedure TForm1.btnFontStylesClick(Sender: TObject);
var
FontStyle : Integer;
MyINI: TINIFile;
begin
FontDialog1.Execute;
FontStyle := FontStylesToInteger(FontDialog1.Font.Style);
MyINI := TINIFile.Create(PathToINIFile);

{Font Style}
//procedure WriteString(const Section, Ident, Value: String);
MyINI.WriteInteger('MinSektion', 'FontStyle', 0);

//function ReadString(const Section, Ident, Default: String): String;
Edit3.Text := MyINI.ReadString('MinSektion', 'FontStyle', 'Ikke fundet');

Memo1.Font.Style := Edit3.Text; ********* Her er fejlmeddelsen

end;

Mine Functioner som jeg har forsøgt meget med.

function FontStylesToInteger(const Value : TFontStyles) : Integer;
begin
Result := pInteger(pFontStyles(@Value))^;
end;

function IntegerToFontStyles(const Value : Integer) : TFontStyles;
begin
Result := pFontStyles(pInteger(@Value))^;
end;

Håber meget du vil hjælpe, så det kan komme til at fungerer.

Med venlig hilsen
Monie Jacobsen


 
 
Kommentar
Fra : gandalf


Dato : 05-02-04 09:38

Hej Monie Jacobsen

Dette skyldes at font.style er en enumerator, og du kan ikke sætte dens værdi til en streng, da en enumerator intet har med en streng at gøre.

For at gøre dette bliver du nødt til at undersøge hvad som står i Edit3.Text, for derefter at sætte stylen ud fra det.

if (edit3.text='fsBold') then
memo1.font.style := [fsBold]
else .....

Gandalf

Kommentar
Fra : MonieJacobsen


Dato : 05-02-04 09:47

Ok med enumerator, der står jeg god nok af.
Du skrev:
For at gøre dette bliver du nødt til at undersøge hvad som står i Edit3.Text, for derefter at sætte stylen ud fra det.
Hvordan skal dette gøres?
Som det er nu får jeg kun fejl som beskrevet.



Accepteret svar
Fra : jrossing

Modtaget 100 point
Dato : 05-02-04 21:21

Hej

Du gemmer jo font.style som integer i din ini-fil, hvorfor så indlæse som tekst?

Prøv med :

Memo1.Font.Style := MyINI.ReadInteger('MinSektion', 'FontStyle', 0);

Kommentar
Fra : MonieJacobsen


Dato : 06-02-04 08:50

Med FontDialog komponenten forsøger jeg,
at valge mellem forskellige Font.Style i knappen "Opsætning",
så de valgte opsætninger hentes ind ved opstart af et program
og ved afslutning af programmet gemmes opsætningen i en INI file.

Har prøve med: Memo1.Font.Style := MyINI.ReadInteger('MinSektion', 'FontStyle', 0); Som du foreslå.
Men få fejlmeddelserne:
[Error] Unit1.pas(252): Incompatible types: 'String' and 'Integer'
[Error] Unit1.pas(280): Incompatible types: 'TFontStyles' and 'Integer'

Har også forsøgt med de 2 functio'ner her.
Men jeg tror ikke jeg indskriver dem rigtig!

Function StyleToString( styles: TFontStyles ): String;
var
style: TFontStyle;
Begin
Result := '[';
For style := Low(style) To High(style) Do Begin
If style IN styles Then Begin
If Length(result) > 1 Then
result := result + ',';
result := result + GetEnumname( typeInfo(TFontStyle), Ord(style));
End; { If }
End; { For }
Result := Result + ']';
End; { StyleToString }

Function StringToStyle( S: String ): TFontStyles;
Var
sl : TStringlist;
style: TfontStyle;
i : Integer;
Begin
Result := [];
If Length(S) < 2 Then Exit;

If S[1] = '[' Then
Delete(S, 1, 1);
If S[Length(S)] = ']' Then
Delete(S, Length(S), 1);
If Length(S) = 0 Then Exit;

sl:= TStringlist.Create;
try
sl.commatext := S;
For i := 0 To sl.Count-1 Do Begin
try
style := TFontStyle( GetEnumValue( Typeinfo(TFontStyle), sl[i] ));
Include( Result, style );
except
end;
End; { For }
finally
sl.free
end;
End; { StringToStyle }

Men som Gandalf skrev, så skyldes det, at font.style er en enumerator og ikke en streng værdi.

Men alle de andre functioner i FontDialog'en har jeg fårt til at fungerer, så det er kun Font.Style der driller mig.

Hvis du er intresseret, så kan jeg sende det lille program- stykke, så send din E-mail adresse til mig.

Min E-mail: monie@sunwind.dk

Med venlig hilsen
Monie Jacobsen



Kommentar
Fra : MonieJacobsen


Dato : 13-02-04 10:48

Undskyld... Men hvordan lukker jeg detteindlæg eller spørgsmål, da jeg ikke har fået et brugbar svar.'

Med venlig hilsen
Monie Jacobsen

Godkendelse af svar
Fra : MonieJacobsen


Dato : 17-02-04 10:19

Tak for svaret jrossing.
                        

Du har følgende muligheder
Eftersom du ikke er logget ind i systemet, kan du ikke skrive et indlæg til dette spørgsmål.

Hvis du ikke allerede er registreret, kan du gratis blive medlem, ved at trykke på "Bliv medlem" ude i menuen.
Søg
Reklame
Statistik
Spørgsmål : 177577
Tips : 31968
Nyheder : 719565
Indlæg : 6409071
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste