Entwickler-Ecke

Sonstiges (Delphi) - Vereinfachung!!!


p_m - Mo 21.05.07 15:31
Titel: Vereinfachung!!!
Könnt ihr mir mal bitte eine vereinfachte Methode eines solchen Codes geben:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
procedure TForm2.Schrift1Click(Sender: TObject);
begin
    if DSchrift.Execute then
Label1.Font.Name := DSchrift.Font.Name;
Label2.Font.Name := DSchrift.Font.Name;
Label1.Font.Size := DSchrift.Font.Size;
Label2.Font.Size := DSchrift.Font.Size;
Label1.Font.Style := DSchrift.Font.Style;
Label2.Font.Style := DSchrift.Font.Style;
Label1.Font.Charset := DSchrift.Font.Charset;
Label2.Font.Charset:= DSchrift.Font.Charset;
BSpeichern.Font.Name:=DSchrift.Font.Name;
BSpeichern.Font.Size:=DSchrift.Font.Size;
BSpeichern.Font.Charset:=DSchrift.Font.Charset;
BAusgeben.Font.Name:=DSchrift.Font.Name;
BAusgeben.Font.Size:=DSchrift.Font.Size;
BAusgeben.Font.Charset:=DSchrift.Font.Charset;
BDiagramm.Font.Name:=DSchrift.Font.Name;
BDiagramm.Font.Size:=DSchrift.Font.Size;
BDiagramm.Font.Charset:=DSchrift.Font.Charset;
BDiagramm2.Font.Name:=DSchrift.Font.Name;
BDiagramm2.Font.Size:=DSchrift.Font.Size;
BDiagramm2.Font.Charset:=DSchrift.Font.Charset;

end;


geht um eine FontDialog-Anweisung
wäre nett !!!!!
Danke schon mal im voraus

Moderiert von user profile iconChristian S.: Delphi-Tags repariert


Chatfix - Mo 21.05.07 15:38

Würdest du deinen Quelltext bitte mit den Delphi-Tags formatieren.
Vielen Dank.

Du könntest z.b. mit with arbeiten:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
with Label1.Font do
begin
  Name := DSchrift.Font.Name;
  Size := DSchrift.Font.Size;
  Style := DSchrift.Font.Style;
end;


Ich weis nicht ob du direkt den Font-Teil übergeben kannst, hab grad kein Delphi das zu testen:


Delphi-Quelltext
1:
  Label1.Font := DSchrift.Font;                    


EDIT: Die letzte Variante funktioniert auch, ist also die einfachste.


jaenicke - Mo 21.05.07 15:48

user profile iconChatfix hat folgendes geschrieben:
Ich weis nicht ob du direkt den Font-Teil übergeben kannst, hab grad kein Delphi das zu testen:


Delphi-Quelltext
1:
  Label1.Font := DSchrift.Font;                    


EDIT: Die letzte Variante funktioniert auch, ist also die einfachste.

Die einfachste mag es sein, aber so sollte man es nicht machen...
Besser:

Delphi-Quelltext
1:
  Label1.Font.Assign(DSchrift.Font);                    

Der Grund: Mit letzterem Code werden lediglich die Attribute kopiert, nicht aber der vorhandene Zeiger auf eine Instanz von TFont durch einen anderen überschrieben.
Wenn man das nämlich macht, dann wird wohl eine Änderung an einer der beiden Font-Eigenschaften auch bei der anderen ankommen.
Das hab ich nicht getestet, aber ich glaube, dass es so ist...

// EDIT: Nö, ist nicht so. Vielleicht ist die Zuweisung doch dasselbe wie Assign. Keine Ahnung.


Stefan.Buchholtz - Mo 21.05.07 16:01

user profile iconjaenicke hat folgendes geschrieben:
Der Grund: Mit letzterem Code werden lediglich die Attribute kopiert, nicht aber der vorhandene Zeiger auf eine Instanz von TFont durch einen anderen überschrieben.
Wenn man das nämlich macht, dann wird wohl eine Änderung an einer der beiden Font-Eigenschaften auch bei der anderen ankommen.
Das hab ich nicht getestet, aber ich glaube, dass es so ist...

// EDIT: Nö, ist nicht so. Vielleicht ist die Zuweisung doch dasselbe wie Assign. Keine Ahnung.


Die Set-Methode des Font-Properties macht ein Assign.

Stefan


F34r0fTh3D4rk - Mo 21.05.07 16:07
Titel: Re: Vereinfachung!!!

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
procedure TForm2.Schrift1Click(Sender: TObject);
begin
  if DSchrift.Execute then
  begin
    Label1.Font.Name := DSchrift.Font.Name;
    Label2.Font.Name := DSchrift.Font.Name;
    Label1.Font.Size := DSchrift.Font.Size; 
    Label2.Font.Size := DSchrift.Font.Size;
    Label1.Font.Style := DSchrift.Font.Style;
    Label2.Font.Style := DSchrift.Font.Style;
    Label1.Font.Charset := DSchrift.Font.Charset; 
    Label2.Font.Charset:= DSchrift.Font.Charset;
    BSpeichern.Font.Name:=DSchrift.Font.Name;
    BSpeichern.Font.Size:=DSchrift.Font.Size;
    BSpeichern.Font.Charset:=DSchrift.Font.Charset;
    BAusgeben.Font.Name:=DSchrift.Font.Name;
    BAusgeben.Font.Size:=DSchrift.Font.Size;
    BAusgeben.Font.Charset:=DSchrift.Font.Charset;
    BDiagramm.Font.Name:=DSchrift.Font.Name;
    BDiagramm.Font.Size:=DSchrift.Font.Size;
    BDiagramm.Font.Charset:=DSchrift.Font.Charset;
    BDiagramm2.Font.Name:=DSchrift.Font.Name;  
    BDiagramm2.Font.Size:=DSchrift.Font.Size;
    BDiagramm2.Font.Charset:=DSchrift.Font.Charset;
  end;
end;

hättest du gescheit formatiert, wäre dir (hoffentlich) aufgefallen, dass du ein begin end; vergessen hast. verkürzen könnte man das zB so:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure TForm2.Schrift1Click(Sender: TObject);
var
  names: array[1..6of string = ('Label1''Label2''BSpeichern''BAusgeben''BDiagramm''BDiagramm2');
  i: integer;
begin
  if DSchrift.Execute then
    for i := 1 to 6 do
      with findcomponent(names[i]).Font do
      begin
        Name := DSchrift.Font.Name;
        Size := DSchrift.Font.Size;
        Charset := DSchrift.Font.Charset;   
      end;
end;


oder du weißt gleich die komplette font zu.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TForm2.Schrift1Click(Sender: TObject);
var
  names: array[1..6of string = ('Label1''Label2''BSpeichern''BAusgeben''BDiagramm''BDiagramm2');
  i: integer;
begin
  if DSchrift.Execute then
    for i := 1 to 6 do
      with findcomponent(names[i]) do
        Font := DSchrift.Font;
end;


mfg


Lannes - Mo 21.05.07 16:35

Hallo,

oder, wenn das in das Anwendungslayout passt, leg die Komponenten auf ein Panel.
Dann braucht man nur die Fonteigenschaft des Panels ändern, vorrausgesetzt die Eigenschaft ParentFont der Komponenten hat den Wert True. Einzelne Komponenten kann man davon ausschließen indem man bei diesen ParentFont auf False setzt.

Dann bleibt die Codezeile übrig:

Delphi-Quelltext
1:
Panel.Font := DSchrift.Font;                    


Narses - Mo 21.05.07 18:27

Moin!

@user profile iconp_m: Könntest du dem Thread bitte einen aussagekräftigen Titel geben (z.B. "Font-Eigenschaft mehrerer Controls auf einmal setzen"), damit man auch ohne Durchlesen ahnen kann, worum es hier geht? :| Danke. ;)

cu
Narses