AW: Merkwürdiger TFontDialog
Bevor ich wieder mit Kanonen auf Spatzen schieße, ich kenne TFontDialog noch nicht aber ich weiß wie ich alle registrierten Fonts in eine Auswahl-Box bekomme, falls das helfen kann pieps einmal.
|
AW: Merkwürdiger TFontDialog
Zitat:
Ich hab mal einige weitere Tests gemacht: 1. Extra Testprogrämmchen -> TFontDialog drauf -> Button drauf -> funktioniert 2. Extra Testprogrämmchen -> Button drauf -> funktion reinkopiert -> funktioniert. Ok...das Problem tritt also nur im Haupprojekt auf. Also dacht ich, ok...vielleicht ein Resourcen/Speicherpropblem. Hab dann das Programm außerhalb der IDE gestartet -> Der TFontdialog funktioniert !!! Das problem tritt also nur im Projekt innerhalb der IDE auf. was das ganze noch merkwürdiger macht. @MichaelT Der Kommentar bezieht sich auf die zusätzlichen Style-Utils, die ich aber hier nicht verwende. :) @KodeZwerg Wenn alle Stricke reisen muss ich mir da wohl einen eigenen Font-Dialog bauen. Ich hatte eigentlich gehofft, das vermeiden zu können. |
AW: Merkwürdiger TFontDialog
Zitat:
|
AW: Merkwürdiger TFontDialog
Ist's ein Konsolen-, VCL- oder sonst ein Projekt? Und wann im Ablauf wird die Funktion aufgerufen? Ich hatte mal das Problem, dass ich einen OpenDialog vorm Anzeigen der MainForm gebraucht habe. Da musste ich irgendwas mit CoInitialize oder uses ComObj rumtricksen. KA, wieweit das den FontDialog betrifft.
|
AW: Merkwürdiger TFontDialog
Callstack:
Code:
CPU:
:529ad236 ; C:\WINDOWS\SysWOW64\fms.dll
:529b5e2e ; C:\WINDOWS\SysWOW64\fms.dll :529ac9f4 ; C:\WINDOWS\SysWOW64\fms.dll :529abfc4 ; C:\WINDOWS\SysWOW64\fms.dll :529abead ; C:\WINDOWS\SysWOW64\fms.dll :529abe3d ; C:\WINDOWS\SysWOW64\fms.dll :529abab4 ; C:\WINDOWS\SysWOW64\fms.dll :529ab942 ; C:\WINDOWS\SysWOW64\fms.dll :529a85bc ; C:\WINDOWS\SysWOW64\fms.dll :529a84bd ; C:\WINDOWS\SysWOW64\fms.dll :529b287e ; C:\WINDOWS\SysWOW64\fms.dll :77aee904 ; C:\WINDOWS\SysWOW64\comdlg32.dll :77aaefe6 ; C:\WINDOWS\SysWOW64\comdlg32.dll :77aaeef0 comdlg32.ChooseFontW + 0x40 :00559d47 TCommonDialog.TaskModalDialog + $5B :0055a494 TFontDialog.Execute + $184 :00559be8 TCommonDialog.Execute + $38 devvst.TForm9.Button5Click($7FDC9810) :005298c1 TControl.Click + $79 :0052df38 TWinControl.WndProc + $640 :00545905 TButtonControl.WndProc + $71 :0052e09c DoControlMsg + $28 :0052df38 TWinControl.WndProc + $640 :0052d503 TWinControl.MainWndProc + $2F :004c865a StdWndProc + $16 :75a6e0bb USER32.AddClipboardFormatListener + 0x4b :75a78849 ; C:\WINDOWS\SysWOW64\USER32.dll :75a7b145 ; C:\WINDOWS\SysWOW64\USER32.dll :75a7a89c ; C:\WINDOWS\SysWOW64\USER32.dll :75a5b95b USER32.SendMessageW + 0x5b :72036934 ; C:\WINDOWS\WinSxS\x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.16299.309_none_5d7d0b9ba7da9417\COMCTL32.dll :7204c14b ; C:\WINDOWS\WinSxS\x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.16299.309_none_5d7d0b9ba7da9417\COMCTL32.dll :75a6e0bb USER32.AddClipboardFormatListener + 0x4b :75a78849 ; C:\WINDOWS\SysWOW64\USER32.dll :75a7b145 ; C:\WINDOWS\SysWOW64\USER32.dll :75a7833a ; C:\WINDOWS\SysWOW64\USER32.dll :75a5fbab USER32.CallWindowProcW + 0x1b :0052e047 TWinControl.DefaultHandler + $EB :0052df38 TWinControl.WndProc + $640 :00545905 TButtonControl.WndProc + $71 :004c865a StdWndProc + $16 :75a6e0bb USER32.AddClipboardFormatListener + 0x4b :75a78849 ; C:\WINDOWS\SysWOW64\USER32.dll :75a7b145 ; C:\WINDOWS\SysWOW64\USER32.dll :75a690dc ; C:\WINDOWS\SysWOW64\USER32.dll :75a68c20 USER32.DispatchMessageW + 0x10 :005df964 TApplication.ProcessMessage + $F8 Zitat:
|
AW: Merkwürdiger TFontDialog
Zitat:
|
AW: Merkwürdiger TFontDialog
Zitat:
|
AW: Merkwürdiger TFontDialog
Da ich vorgegebene Dialoge meist eh meide, hier kleine Schnippsel zum selber basteln.
Delphi-Quellcode:
Zweite Variante wo man selbst per Callback durchiteriert.
// Style der Listbox sollte lbOwnerDrawVariable sein damit jeder Eintrag eine eigene Schrift hat
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); begin With ListBox1 do begin canvas.fillrect(rect); canvas.font.Style := [fsbold]; canvas.font.Name := Listbox1.items[index]; canvas.textout(rect.left,rect.top, Listbox1.items[index]); end; end; procedure TForm1.FormCreate(Sender: TObject); begin ListBox1.Items := Screen.Fonts; end; procedure TForm1.ListBox1Change(Sender: TObject); begin Label1.Font.Name := ListBox1.Items[ListBox1.ItemIndex]; end;
Delphi-Quellcode:
function EnumFontClBack(var lp:TEnumLogFont;
var tm: TNewTextMetric; dwType:DWord; lpData:LParam): integer; stdcall; begin result:=1; with TForm1(lpData),Combobox1 do begin items.add(lp.elfLogFont.lfFaceName); end; end; procedure TForm1.FormShow(Sender: TObject); begin EnumFontFamilies(canvas.Handle,nil,@EnumFontClBack,Integer(self)); end; procedure TForm1.ComboBox1Change(Sender: TObject); begin Label1.Font.Name:=Combobox1.Text; end; |
AW: Merkwürdiger TFontDialog
Oh je, das ist ein wenig OT, aber ich würde gerne eine Lanze für "vorgefertigte Dialoge" brechen: Die Dinger gibt es, damit sich Anwender nicht in jedem Programm an neue Dialoge für das gleiche Ding gewöhnen müssen. Ausserdem muß auch der Entwickler nicht bei jeder Änderung an diesem Ding (die selbstverständlich bei jedem OS-Update oder auch jedem Sprach-Update geschehen können) um ein eventuell anfallendes Redesign kümmern. Es ist Merkmal eines jeden guten Frameworks diese Arbeit abzunehmen, damit der Entwickler sich auf das eigentliche Rad konzentrieren kann, daß er da erfinden möchte, und nicht alle anderen bereits erfundenen Räder dutzendfach neuinterpretiert.
Sorry Daniel, das musste sein. Sherlock |
AW: Merkwürdiger TFontDialog
Da es in der VCL knallt, würde ich auch mal die Debug-DCUs in den Projektoptionen aktivieren ... dann sieht man im Debugger auch ein Bissl mehr.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz