AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Antialiasing, Kantenglättung für Memo, Edit und Label
Thema durchsuchen
Ansicht
Themen-Optionen

Antialiasing, Kantenglättung für Memo, Edit und Label

Ein Thema von FarAndBeyond · begonnen am 23. Jul 2015 · letzter Beitrag vom 25. Jul 2015
Antwort Antwort
FarAndBeyond
(Gast)

n/a Beiträge
 
#1

Antialiasing, Kantenglättung für Memo, Edit und Label

  Alt 23. Jul 2015, 14:29
Hi,
weis jemand von euch wie man aus diesen 3 Prozeduren eine machen kann?
Ich dachte das geht mit Obj: TObject oder Obj: TComponent oder const Obj: TComponentname oder irgendetwas in dieser Richtung...

Delphi-Quellcode:
Procedure Tform_XYZ.AAFontEdit(Obj: TEdit);
   Var
    Font : TFont;
    LogFont : TLogFont;
 Begin
  Try
   Font := TFont.Create;
   Font.Assign(Obj.Font);
   GetObject(Font.Handle, SizeOf(LogFont), @LogFont);
   LogFont.lfQuality := ANTIALIASED_QUALITY;
   Font.Handle := CreateFontIndirect(LogFont);
   Obj.Font := Font;
   Font.Free;
  Except
   Exit;
  End;
 End;


Procedure Tform_XYZ.AAFontMemo(Obj: TMemo);
   Var
    Font : TFont;
    LogFont : TLogFont;
 Begin
  Try
   Font := TFont.Create;
   Font.Assign(Obj.Font);
   GetObject(Font.Handle, SizeOf(LogFont), @LogFont);
   LogFont.lfQuality := ANTIALIASED_QUALITY;
   Font.Handle := CreateFontIndirect(LogFont);
   Obj.Font := Font;
   Font.Free;
  Except
   Exit;
  End;
 End;


Procedure Tform_XYZ.AAFontLabel(Obj: TLabel);
   Var
    Font : TFont;
    LogFont : TLogFont;
 Begin
  Try
   Font := TFont.Create;
   Font.Assign(Obj.Font);
   GetObject(Font.Handle, SizeOf(LogFont), @LogFont);
   LogFont.lfQuality := ANTIALIASED_QUALITY;
   Font.Handle := CreateFontIndirect(LogFont);
   Obj.Font := Font;
   Font.Free;
  Except
   Exit;
  End;
 End;
Schöne Grüsse
Martin
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Antialiasing, Kantenglättung für Memo, Edit und Label

  Alt 23. Jul 2015, 14:39
Ich würd TControl nehmen.
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
FarAndBeyond
(Gast)

n/a Beiträge
 
#3

AW: Antialiasing, Kantenglättung für Memo, Edit und Label

  Alt 23. Jul 2015, 21:38
Danke für deine Antwort.
Ich bekomme aber genau wie bei TObject immer die Fehlermeldung das Obj.Font nicht bekannt ist, also Font nicht bekannt ist.
Ich hab' jetzt folgende Möglichkeit entdeckt:

Delphi-Quellcode:
Procedure AAFont(ObjFont: TFont);
   Var
    LogFont: TLogFont;
 Begin
  Try
   GetObject(ObjFont.Handle, SizeOf(TLogFont), @LogFont);
   LogFont.lfQuality := ANTIALIASED_QUALITY;
   ObjFont.Handle := CreateFontIndirect(LogFont);
  Except
   Exit;
  End;
 End;


Procedure TForm1.FormCreate(Sender: TObject);
 Begin
  AAFont(Button1.Font);
  AAFont(Label1.Font);
  AAFont(Memo1.Font);
  AAFont(Edit1.Font);
 End;
Das funktioniert unter Delphi7 sehr gut und ist deutlich weniger Quelltext.

Gruß
Martin
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#4

AW: Antialiasing, Kantenglättung für Memo, Edit und Label

  Alt 24. Jul 2015, 00:54
Für die Zukunft: Wenn du nochmal auf eine gemeinsame Eigenschaft verschiedener Klassen so zugreifen willst, ist es oft sehr wahrscheinlich, dass all diese Klassen irgendwo einen gemeinsamen Vorfahren haben, der die Eigenschaft erstmals eingeführt hat.
Herausfinden kannst du das entweder über die Hilfe (F1 drücken wenn der Cursor z.B. über dem Wort "TEdit" ist), und dann die Vererbungshierachie immer weiter zurück gehen (der Vorfahre ist in der Hilfe meine ich angegeben), bis es den Member "Font" (als Beispiel) nicht mehr gibt. Die Klasse davor notieren, und gucken ob es für alle dieselbe Vorfahrklasse ist.
Eine weitere Möglichkeit ist es direkt im Quellcode der VCL zu wühlen, so man den den hat. (Ab professional Versionen imho.) Dazu einfach Strg-Klick auf z.B. "TEdit" im Codeeditor, und schon springst du zur Deklaration von TEdit, wo auch gleich der direkte Vorfahre mit angegeben ist. (TCustomEdit in diesem Fall.) Dann auf den Vorfahren Strg-Linksklicken - so lange, bis du eine Klasse erreicht hast, in der "Font" hingeschriebenerweise in der Litanei von Properties zu sehen ist. Ebenfalls für alle gewünschten Klassen durchprobieren um sicherzustellen, dass alle von dieser wirklich abstammen.

Bei "Font" könnte es sein (habe kein Delphi hier gerade), dass es in TControl noch nicht, oder aber nicht "public" oder "published" deklariert ist. Alle deine hier gewünschten Klassen sollten aber von TWinControl abgeleitet sein (welches wiederum von TControl abgeleitet ist), und da sollte meiner Meinung nach ein public "Font" deklariert sein.

Deine jetzige Lösung finde ich allerdings noch besser als die ursprünglich gedachte, da du diese Prozedur wirklich für ALLE TFonts benutzen kannst, ganz egal aus welchem Kontext diese nun stammen. Aber mit der Ableitungshierache lohnt es sich trotzdem zu beschäftigen, vielleicht ist ein Büchlein über OOP auch nicht verkehrt, da sich das quer durch alle moderneren Programmiersprachen zieht, und die Grundfeste dieser ist. (Zumindest der OOP-Sprachen (Delphi, C++, C#, Java, etc.), die nicht umsonst so heissen )

(Ich benutze zu viele Klammern.)
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
FarAndBeyond
(Gast)

n/a Beiträge
 
#5

AW: Antialiasing, Kantenglättung für Memo, Edit und Label

  Alt 24. Jul 2015, 01:52
@Medium:
Hey, danke für die ausführliche Antwort...

Ja x Zwei...

Erstens: Ja, ich sollte endlich mal den Windows7 Patch installieren, damit ich die Hilfe nutzen kann. Bin kein Fan von Windows-Updates. Werd' morgen mal sehen wie gross das Ding ist.

Zweitens: Ja, ich sollte mir mal Klassen und OOP im Allgemeinen 'reinziehen, hab' das bisher geschickt links liegen gelassen...

Werd' STRG+Klick und F1 mal testen...
Hab' gerade angefangen mir mal ShortCuts anzusehen : STRG+Y, STRG+Space usw.

Nochmal Danke...

Gruß
Martin
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.735 Beiträge
 
Delphi 2007 Professional
 
#6

AW: Antialiasing, Kantenglättung für Memo, Edit und Label

  Alt 24. Jul 2015, 06:34
Zu deiner ursprünglichen Frage: Der Standardtrick in Delphi ginge so:
Delphi-Quellcode:
type
  TControlAccess = class(TControl);

procedure DoSomething(AControl: TControl);
begin
  TControlAccess(AControl).Font.Size := 12;
end;
Uli Gerhardt
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:43 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