![]() |
FontDialog
moin,
wie ich ein fontdialog öffne weiss ich, aber wie reagiere ich auf dem daraufliegenden button "ok" oder "abbrechen" ? danke gruss silent |
Delphi-Quellcode:
Wenn execute ausgeführt wird, dann wurde auf "OK" geklickt.
if FontDialog1.Execute then
begin ...; ...; ...; end; |
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 |
Der Code kommt zum Beispiel in eien Button-Click-Prozedur oder sonst wohin, wo der Dialog aufgerufen werden soll.
|
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 ^^ |
Habe ich dir doch schon geschrieben, wie man das macht.
|
jo sorry, ich weiss nur nicht in welches ereignis ich
Delphi-Quellcode:
das packen muss, doch nicht auch in den button oder?
if FontDialog1.Execute then
begin ...; ...; ...; end; gruss |
Wohin denn sonst? :roll:
|
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* |
Code:
Ruft den Dialog auf und führt den Code vom Dialog aus, wenn OK geklickt wird.
FontDialog1.Execute;
|
ok, danke
|
sorry eine frage noch (ich weiss es nervt) aber das wars dann auch, also
Delphi-Quellcode:
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
procedure TForm1.ToolButton6Click(Sender: TObject);
begin if FontDialog1.Execute then settings.WriteString('fontfont', FontDialog1.Font.Name); end; gruss silent |
Ist das Objekt settings in der Prozedur bekannt?
|
hatte mich im post davor verschrieben, also insgesamt sieht das so aus:
Delphi-Quellcode:
die variable settings ist global definiert:
procedure TForm1.ToolButton6Click(Sender: TObject);
begin if FontDialog1.Execute then settings.WriteString('font', 'font', FontDialog1.Font.Name); end;
Delphi-Quellcode:
und in den uses das "inifiles"
var settings: TIniFile;
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 |
ach da fehlte das "create", also es geht, danke :)
|
Kommt irgendwo im Quelltext noch ein:
Delphi-Quellcode:
Und warum global? So ist es besser:
settings := TIniFile.Create(...);
Delphi-Quellcode:
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.
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; |
thx, für den code, ich mach das dann so :)
|
Re: FontDialog
ich habe auch mal eine frage: wie kann ich die anderen fontoptionen in der ini mitspeichern?
Delphi-Quellcode:
ich bekommen da immer fehlermeldungen:
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;
Code:
woran liegt das? und wie behebe ich die fehler?
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' Gruß, dopeline |
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 :\
|
Re: FontDialog
bin beim googeln
![]() Gruß, dopeline |
Re: FontDialog
also ich habs nochmal versucht...
die werte die bei dir nicht gingen, musst du vorher mit "IntToStr" umwandeln dann gehts |
Re: FontDialog
also bei font.pitch und font.styte funktioniert die varianta mit IntToStr nicht, leider... welche nehme ich da?
Gruß, dopeline |
Re: FontDialog
keine ahnung ob delphi das umwandeln kann, aber du kannst dir auch selbst eine funktion schreiben die das umwandelt.
Delphi-Quellcode:
und dann müsste das mit:
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;
Delphi-Quellcode:
gehen
settings.WriteString('Font', 'Pitch', PitchToStr(FontDialogTabelle.Font));
|
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: |
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