Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi FontDialog (https://www.delphipraxis.net/3881-fontdialog.html)

Pseudemys Nelsoni 4. Apr 2003 01:14


FontDialog
 
moin,

wie ich ein fontdialog öffne weiss ich, aber wie reagiere ich auf dem daraufliegenden button "ok" oder "abbrechen" ?

danke

gruss silent

Luckie 4. Apr 2003 02:25

Delphi-Quellcode:
if FontDialog1.Execute then
begin
  ...;
  ...;
  ...;
end;
Wenn execute ausgeführt wird, dann wurde auf "OK" geklickt.

Pseudemys Nelsoni 4. Apr 2003 04:13

danke:), so hatte ich das auch schon probiert, nur eben im "OnClose" ereigniss...das fontdialog wurde bei jedem klick auf "ok" neu aufgerufen. Ich weiss nur nicht in welche ereigniss prozedur ich das packen muss, dass fontdialog hat ja nur "OnApply" "OnClose" und "OnShow"

sagen wir mal ich möchte das beim klick des ok buttons ein "jo" auf meinem memo erscheint, wüsst ich gar nicht worein ich das FontDialog.Execute packen müsste :\

gruss silent

Luckie 4. Apr 2003 09:02

Der Code kommt zum Beispiel in eien Button-Click-Prozedur oder sonst wohin, wo der Dialog aufgerufen werden soll.

Pseudemys Nelsoni 4. Apr 2003 10:59

Jo, das hab ich

Delphi-Quellcode:
procedure TForm1.ToolButton6Click(Sender: TObject);
begin
  FontDialog1.Execute;
end;

nur weiss ich jetzt nicht wo ich den code reintun muss wo der Ok button des fontdialogs gedrückt wird


gruss silent ^^

Luckie 4. Apr 2003 11:05

Habe ich dir doch schon geschrieben, wie man das macht.

Pseudemys Nelsoni 4. Apr 2003 11:16

jo sorry, ich weiss nur nicht in welches ereignis ich

Delphi-Quellcode:
if FontDialog1.Execute then
begin
  ...;
  ...;
  ...;
end;
das packen muss, doch nicht auch in den button oder?

gruss

Luckie 4. Apr 2003 11:18

Wohin denn sonst? :roll:

Pseudemys Nelsoni 4. Apr 2003 12:25

nunja, ich weiss nicht was es bringt das in einem "button1"(onclick) zu packen, wenn ich doch auf das onclick ereignis des auf dem fontdialog liegendem "ok" buttons reagieren möchte. da hat der "button1" ja nichts mit zu tun da er ja eh nicht geklickt wird...hmm
ich versteh das nich *g*

Luckie 4. Apr 2003 12:30

Code:
FontDialog1.Execute;
Ruft den Dialog auf und führt den Code vom Dialog aus, wenn OK geklickt wird.

Pseudemys Nelsoni 4. Apr 2003 12:48

ok, danke

Pseudemys Nelsoni 4. Apr 2003 13:25

sorry eine frage noch (ich weiss es nervt) aber das wars dann auch, also

Delphi-Quellcode:
procedure TForm1.ToolButton6Click(Sender: TObject);
begin
  if FontDialog1.Execute then
  settings.WriteString('fontfont', FontDialog1.Font.Name);
end;
da gibts nen fehler, wieso kann ich den fontname nicht in eine ini schreiben? wenn ich den fontname in die caption eines labels tue gehts


gruss silent

Luckie 4. Apr 2003 13:30

Ist das Objekt settings in der Prozedur bekannt?

Pseudemys Nelsoni 4. Apr 2003 13:36

hatte mich im post davor verschrieben, also insgesamt sieht das so aus:

Delphi-Quellcode:
procedure TForm1.ToolButton6Click(Sender: TObject);
begin
  if FontDialog1.Execute then
  settings.WriteString('font', 'font', FontDialog1.Font.Name);
end;
die variable settings ist global definiert:

Delphi-Quellcode:
  var settings: TIniFile;
und in den uses das "inifiles"

wenn ich per button etwas in die ini schreibe, also mit "settings.writestring('test', 'test', 'test');

funktioniert das und es wird "[test] test=test" in die datei geschrieben. Nur hier funktioert das irgendwie nicht, kommt immer "zugriffsverletzung bei adresse 3245135"


grüsse

Pseudemys Nelsoni 4. Apr 2003 13:40

ach da fehlte das "create", also es geht, danke :)

Luckie 4. Apr 2003 13:43

Kommt irgendwo im Quelltext noch ein:
Delphi-Quellcode:
settings := TIniFile.Create(...);
Und warum global? So ist es besser:
Delphi-Quellcode:
var
  settings : TIniFile;
begin
  settings := TIniFile.Create(ChangeFileExt(ParamStr(0));
  try
    if FontDialog1.Execute then
    begin
      settings.WriteStrimng('font', 'font', FontDialog1.Font.Name);
    end;
  finally
    settings.Free;
  end;
Weil global hast du Probleme mit dem Ressourcen-Schutzblock. Desweiteren, weißt du nicht, ob das Objekt initialisiert ist und es ist nicht sehr ressourcen-freundlich.

Pseudemys Nelsoni 4. Apr 2003 14:33

thx, für den code, ich mach das dann so :)

dopeline 20. Dez 2003 13:24

Re: FontDialog
 
ich habe auch mal eine frage: wie kann ich die anderen fontoptionen in der ini mitspeichern?

Delphi-Quellcode:
procedure TFormOptionen.BitBtn1Click(Sender: TObject);
var settings : TIniFile;

begin
 settings := TIniFile.Create(ExtractFilePath(ParamStr(0))+'\FontSettings.ini');
 try
  if FontDialogTabelle.Execute then
  begin
   settings.WriteString('Font', 'Color', FontDialogTabelle.Font.Color);
   settings.WriteString('Font', 'Size', FontDialogTabelle.Font.Size);
   settings.WriteString('Font', 'Name', FontDialogTabelle.Font.Name);
   settings.WriteString('Font', 'Charset', FontDialogTabelle.Font.Charset);
   settings.WriteString('Font', 'Pitch', FontDialogTabelle.Font.Pitch);
   settings.WriteString('Font', 'Style', FontDialogTabelle.Font.Style);
  end;
 finally
  settings.Free;
 end;
end;
ich bekommen da immer fehlermeldungen:
Code:
Inkompatible Typen: 'String' und 'TColor'
Inkompatible Typen: 'String' und 'Integer'
Inkompatible Typen: 'String' und 'TFontCharset'
Inkompatible Typen: 'String' und 'TFontPitch'
Inkompatible Typen: 'String' und 'TFontStyles'
woran liegt das? und wie behebe ich die fehler?


Gruß, dopeline

Pseudemys Nelsoni 20. Dez 2003 13:37

Re: FontDialog
 
wie es die fehler schon sagen, wenn du "WriteString" benutzt musst du auch einen String benutzen. FontDialogTabelle.Font.Color ist vom Typ "TColor" und nicht String. wie du das allerdings hibekommst weiss ich leider auch nicht :\

dopeline 20. Dez 2003 13:47

Re: FontDialog
 
bin beim googeln das hier gefunden... kann man damit was machen? habe es versucht, ergebnislos...


Gruß, dopeline

Pseudemys Nelsoni 20. Dez 2003 13:49

Re: FontDialog
 
also ich habs nochmal versucht...

die werte die bei dir nicht gingen, musst du vorher mit "IntToStr" umwandeln

dann gehts

dopeline 20. Dez 2003 14:00

Re: FontDialog
 
also bei font.pitch und font.styte funktioniert die varianta mit IntToStr nicht, leider... welche nehme ich da?


Gruß, dopeline

Pseudemys Nelsoni 20. Dez 2003 14:51

Re: FontDialog
 
keine ahnung ob delphi das umwandeln kann, aber du kannst dir auch selbst eine funktion schreiben die das umwandelt.

Delphi-Quellcode:
function PitchToStr(f: TFont): string;
begin
  if f.Pitch = fpDefault then result := 'fpDefault';
  if f.Pitch = fpFixed then result := 'fpFixed';
  if f.Pitch = fpVariable then result := 'fpVariable';
end;
und dann müsste das mit:

Delphi-Quellcode:
settings.WriteString('Font', 'Pitch', PitchToStr(FontDialogTabelle.Font));
gehen

Robert_G 20. Dez 2003 15:52

Re: FontDialog
 
Die Farben bekommt ihr mit "ColorToString" in einen String und mit "StringToColor" wieder zurück konvertiert.
Außerdem könntest du ja noch ein Umkehrung von "PitchToStr" zum Auslesen aus der Ini schreiben.

Gruß Robert :hi:

Pseudemys Nelsoni 20. Dez 2003 16:05

Re: FontDialog
 
Dachte das er dann vielleicht selbst drauf kommt^^

also um den string wieder in Pitch zu bekommen:

Delphi-Quellcode:
function StrToPitch(s: string): TFont;
begin
  if s = 'fpDefault' then result.pitch := fpDefault;
  if s = 'fpFixed' then result.pitch := fpFixed;
  if s = 'fpVariable' then result.pitch := fpVariable;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:04 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz