![]() |
Komponente für einen erweiterten Fontdialog?
Hallo!
Ich bastle gerade an einer kleinen Bildbearbeitungssoftware, welche dynamisch auf Bildern Texte platziert. Diese Texte lassen sich mittels TFontDialog bereits etwas in Farbe, Schriftart und Schriftstil anpassen. Nun meine Frage: Kennt jemand eine Komponente / Möglichkeit diesen TFontDialog zu erweitern? Mir fehlt unter anderem: -Benutzerdefinierte Farben (ich weiß das es dafür diese Colorpicker Komponente gibt. Leider müsste ich dann beides separat ansteuern) -Textausrichtung (Links, rechts, zentriert) -Ggf. noch Texteffekte (wobei das am unwichtigsten ist) Es wäre traumhaft wenn es eine Möglichkeit gibt dies alles in einem "Button" zu vereinen. Falls dies der falsche Forumbereich ist, bitte ich um Entschuldigung und verschieben des Threads. Vielen Dank! |
AW: Komponente für einen erweiterten Fontdialog?
Das einfachste wäre wohl ein eigenes Formular dafür zu basteln.
|
Dieses Thema wurde am "04. Sep 2017, 23:55 Uhr" von "Luckie" aus dem Forum "Die Delphi-IDE" in das Forum "GUI-Design mit VCL / FireMonkey / Common Controls" verschoben.
|
AW: Komponente für einen erweiterten Fontdialog?
Dafür wären die Ribbons ideal. Dann braucht man keinen umständlichen Dialog, sondern kann die Werte direkt on the fly ändern. Das geht um Größenordnungen angenehmer und schneller. (Das sieht man ja am neuen Paint in Windows 10 und an Word usw.)
Ansonsten bleibt wirklich nur ein eigener Dialog. |
AW: Komponente für einen erweiterten Fontdialog?
Ich habe bereits befürchtet das es auf einen eigenen Dialog hinausläuft.
Dann kann ich diesen immerhin nach meinen eigenen Wünschen gestalten :-D Ich hätte noch eine kurze Frage zu der Charset Property des TFont Objekts. So wie ich das gelesen habe kann ein TFontName mehrere Charsets haben. Diese würde ich dem Benutzer auch gerne anbieten wollen, in Form einer Combobox. Ich habe aber keinerlei Methode gefunden mit der ich grob gesagt sagen kann: Hole alle Charsets der ausgewählten Schriftart und packe diese in meine Combobox. Hat da jemand von euch eine Idee? |
AW: Komponente für einen erweiterten Fontdialog?
|
AW: Komponente für einen erweiterten Fontdialog?
Zitat:
Zitat:
|
AW: Komponente für einen erweiterten Fontdialog?
Zitat:
Ich kann das Charset natürlich auch komplett weg lassen. Ich weiß nicht was dies für Konsequenzen hätte. |
AW: Komponente für einen erweiterten Fontdialog?
Du könntest den Fontdialog erweitern. Ich habe das mal für den Opendialog gemacht, siehe Anhang. Weiß allerdigs nicht, ob das beim Fontdialog auch so geht.
Delphi-Quellcode:
UNIT DataDlg;
INTERFACE USES SysUtils, Windows, Messages, Classes,Controls,StdCtrls,Dialogs,Graphics, ExtCtrls,ExtDlgs,Buttons; TYPE TLoadDataDlg = CLASS(TOpenDialog) PRIVATE FPreviewPanel: TPanel; FPreviewMemo: TMemo; PROCEDURE DoOnTypeChange(sender:TObject); PROTECTED PROCEDURE DoClose; OVERRIDE; PROCEDURE DoSelectionChange; OVERRIDE; PROCEDURE DoShow; OVERRIDE; PROCEDURE PreviewKeyPress(sender:TObject; VAR key:Char); PUBLIC CONSTRUCTOR Create(a_owner:TComponent); OVERRIDE; DESTRUCTOR Destroy; OVERRIDE; FUNCTION Execute:Boolean; OVERRIDE; CLASS FUNCTION LoadData(parent:TComponent; file_exts:TStringList; VAR test_file:TFileName):Boolean; END; IMPLEMENTATION USES StrUtils, Consts, Forms,CommDlg,Dlgs, LalrGlob,MyIOUtils,AppMsg; // Pascal file ( *.pas) | *.pas | Any file ( *.*) | *.* PROCEDURE TLoadDataDlg.DoOnTypeChange(sender:TObject); VAR dlg_filter: String; file_name: TFileName; i: Integer; j: Integer; k: Integer; CONST cb_Filename_Id = 1148; BEGIN file_name := '*.*'; dlg_filter := Filter + ' |'; j := 2*FilterIndex - 1; k := 0; FOR i:=1 TO Length(dlg_filter) DO IF dlg_filter[i] = '|' THEN BEGIN Inc(k); IF k = j THEN BEGIN j := i + 1; FOR k:=j TO Length(dlg_filter) DO IF dlg_filter[k] = '|' THEN BEGIN file_name := Trim(Copy(dlg_filter,j,k-j-1)); Break END; Break END END; SendMessage(GetParent(Handle),cdm_SetControlText,Edt1,Integer(PChar(file_name))); SendMessage(GetDlgItem(GetParent(Handle),idOk),bm_Click,0,0) END; {OF PROCEDURE TLoadDataDlg.DoOnTypeChange} CONSTRUCTOR TLoadDataDlg.Create(a_owner:TComponent); BEGIN INHERITED Create(a_owner); OnTypeChange := DoOnTypeChange; FPreviewPanel := TPanel.Create(Self); WITH FPreviewPanel DO BEGIN Name := 'PreviewPanel'; Caption := ''; SetBounds(200,10,250,200); BevelOuter := bvNone; BevelWidth := 1; TabOrder := 1; FPreviewMemo := TMemo.Create(Self); WITH FPreviewMemo DO BEGIN Parent := FPreviewPanel; Font.Name := 'Courier New'; Font.Size := 8; ReadOnly := True; ScrollBars := ssBoth; WordWrap := False; SetBounds(0,0,250,200); Align := alClient END END END; {OF CONSTRUCTOR TLoadDataDlg.Create} DESTRUCTOR TLoadDataDlg.Destroy; BEGIN FPreviewMemo.Free; FPreviewPanel.Free; INHERITED Destroy END; {OF DESTRUCTOR TLoadDataDlg.Destroy} PROCEDURE TLoadDataDlg.DoSelectionChange; FUNCTION ValidFile(CONST FileName:String):Boolean; BEGIN Result := GetFileAttributes(PChar(FileName)) <> $FFFFFFFF END; {OF FUNCTION ValidFile} VAR tmp_data: TStringList; full_name: String; valid_file: Boolean; BEGIN full_name := FileName; valid_file := FileExists(full_name) and ValidFile(full_name); IF valid_file = True THEN BEGIN tmp_data := TStringList.Create; TRY TRY tmp_data.LoadFromFile(full_name); FPreviewMemo.Lines.Assign(tmp_data); EXCEPT valid_file := False END FINALLY tmp_data.Free END END; IF valid_file = False THEN BEGIN END; FPreviewMemo.Invalidate; INHERITED DoSelectionChange END; {OF PROCEDURE TLoadDataDlg.DoSelectionChange} PROCEDURE TLoadDataDlg.DoClose; BEGIN INHERITED DoClose; Application.HideHint END; {OF PROCEDURE TLoadDataDlg.DoClose} PROCEDURE TLoadDataDlg.DoShow; VAR prev_rect: TRect; stat_rect: TRect; BEGIN GetClientRect(Handle,prev_rect); stat_rect := GetStaticRect; prev_rect.Left := stat_rect.Left + (stat_rect.Right - stat_rect.Left); Inc(prev_rect.Top,4); FPreviewPanel.BoundsRect := prev_rect; FPreviewPanel.ParentWindow := Handle; INHERITED DoShow END; {OF PROCEDURE TLoadDataDlg.DoShow} PROCEDURE TLoadDataDlg.PreviewKeyPress(sender:TObject; VAR key:Char); BEGIN IF Key = #27 THEN TForm(sender).Close END; {OF PROCEDURE TLoadDataDlg.PreviewKeyPress} FUNCTION TLoadDataDlg.Execute:Boolean; BEGIN IF NewStyleControls = True THEN Template := 'DLGTEMPLATE' ELSE Template := NIL; Result := INHERITED Execute END; {OF FUNCTION TLoadDataDlg.Execute} CLASS FUNCTION TLoadDataDlg.LoadData(parent:TComponent; file_exts:TStringList; VAR test_file:TFileName):Boolean; VAR data_dlg: TLoadDataDlg; data_ext: String; cur_ext: String; BEGIN data_ext := BuildFileFilter(file_exts); data_dlg := TLoadDataDlg.Create(parent); TRY WITH data_dlg DO BEGIN Title := TextOf('LoadTestData'); InitialDir := ExtractFilePath(test_file); IF Length(ExtractFileExt(test_file)) = 0 THEN cur_ext := FirstFilterExt(data_ext) ELSE BEGIN cur_ext := '*' + ExtractFileExt(test_file); IF GetFilterIndexOf(cur_ext,data_ext) = Undefined THEN cur_ext := FirstFilterExt(data_ext) END; DefaultExt := DefaultFilterExt(cur_ext); FileName := cur_ext; Filter := data_ext; FilterIndex := GetFilterIndexOf(cur_ext,data_ext); Options := [ofHideReadOnly,ofFileMustExist,ofEnableSizing]; IF Execute = True THEN BEGIN Result := True; test_file := FileName END ELSE Result := False END; FINALLY data_dlg.Free END END; {OF CLASS FUNCTION TLoadDataDlg.LoadData} END . |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:55 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