Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Font.Style ins Clientdataset Laden (https://www.delphipraxis.net/177948-font-style-ins-clientdataset-laden.html)

Natcree 7. Dez 2013 16:32

Font.Style ins Clientdataset Laden
 
Hallo Habe eine Datenbank mit nem Clientdataset und ner Datasource und möchte nun von einem TButton die Eigenschaft Font.style in die DB laden.

Delphi-Quellcode:
clientdataset1.FieldByName('Fontstyle').AsBoolean:= Schaltflaeche.Font.Style;
Das und alles andere habe ich versucht. Ich kriegs einfach nicht hin.

Hat jemand ne lösung???

Bernhard Geyer 7. Dez 2013 16:42

AW: Font.Style ins Clientdataset Laden
 
ein FontStyle ist ja auch kein Boolean.

Was du machen kannst ist den String zu speichern den auch die IDE dir anzeigt (also das [fsBold ...])

Gugst du mal diesen Thread ob nicht das dabei ist was du benötigst.

Natcree 7. Dez 2013 16:47

AW: Font.Style ins Clientdataset Laden
 
Ich habe es auch mit .asstring versucht aber dort kann ich dann nach Schaltflaeche.font. <-- kein style einfügen.

Perlsau 7. Dez 2013 17:42

AW: Font.Style ins Clientdataset Laden
 
Zitat:

Zitat von Natcree (Beitrag 1238873)
Hallo Habe eine Datenbank mit nem Clientdataset und ner Datasource und möchte nun von einem TButton die Eigenschaft Font.style in die DB laden.

Du mußt für jeden der möglichen Styles ein Boolean-Feld anlegen. Ich hab hier mal ein Beispiel, wie man den Style eines selektierten Textes in einem RichEdit in die Checked-Properties eines PopUp-Menüs überträgt:
Delphi-Quellcode:
procedure TFormMain.Popup_RichEdPopup(Sender: TObject);
begin
     IF DBRichEd_Inhalt.SelAttributes.Style = [] THEN
     BEGIN
          PuP_Red_Normal.Checked := TRUE;
          PuP_Red_Fett.Checked  := FALSE;
          PuP_Red_Kursiv.Checked := FALSE;
          PuP_Red_ULine.Checked := FALSE;
     END;
     IF DBRichEd_Inhalt.SelAttributes.Style = [fsBold] THEN
     BEGIN
          PuP_Red_Normal.Checked := FALSE;
          PuP_Red_Fett.Checked  := TRUE;
          PuP_Red_Kursiv.Checked := FALSE;
          PuP_Red_ULine.Checked := FALSE;
     END;
     IF DBRichEd_Inhalt.SelAttributes.Style = [fsItalic] THEN
     BEGIN
          PuP_Red_Normal.Checked := FALSE;
          PuP_Red_Fett.Checked  := FALSE;
          PuP_Red_Kursiv.Checked := TRUE;
          PuP_Red_ULine.Checked := FALSE;
     END;
     IF DBRichEd_Inhalt.SelAttributes.Style = [fsUnderline] THEN
     BEGIN
          PuP_Red_Normal.Checked := FALSE;
          PuP_Red_Fett.Checked  := FALSE;
          PuP_Red_Kursiv.Checked := FALSE;
          PuP_Red_ULine.Checked := TRUE;
     END;
     IF DBRichEd_Inhalt.SelAttributes.Style = [fsBold,fsItalic] THEN
     BEGIN
          PuP_Red_Normal.Checked := FALSE;
          PuP_Red_Fett.Checked  := TRUE;
          PuP_Red_Kursiv.Checked := TRUE;
          PuP_Red_ULine.Checked := FALSE;
     END;
     IF DBRichEd_Inhalt.SelAttributes.Style = [fsBold,fsUnderline] THEN
     BEGIN
          PuP_Red_Normal.Checked := FALSE;
          PuP_Red_Fett.Checked  := FALSE;
          PuP_Red_Kursiv.Checked := FALSE;
          PuP_Red_ULine.Checked := TRUE;
     END;
     IF DBRichEd_Inhalt.SelAttributes.Style = [fsItalic,fsUnderline] THEN
     BEGIN
          PuP_Red_Normal.Checked := FALSE;
          PuP_Red_Fett.Checked  := FALSE;
          PuP_Red_Kursiv.Checked := TRUE;
          PuP_Red_ULine.Checked := TRUE;
     END;
     IF DBRichEd_Inhalt.SelAttributes.Style = [fsBold,fsItalic,fsUnderline] THEN
     BEGIN
          PuP_Red_Normal.Checked := FALSE;
          PuP_Red_Fett.Checked  := TRUE;
          PuP_Red_Kursiv.Checked := TRUE;
          PuP_Red_ULine.Checked := TRUE;
     END;
end;
Falls du nicht gleich verstehst, was ich hier mache: Ich hab ein PopUpMenü, das verschiedene Einträge für Schriftstyles enthält: Normal, Fett, Kursiv, ULine. Diese Einträge können nun einen Haken haben (checked) oder auch nicht. Analog dazu kannst du dir deine Boolean-Felder in der Tabelle vorstellen. Das Normal-Feld kannst du natürlich weglassen, das definiert sich ja schon dadurch, daß eines der anderen Felder True ist. Alles klar?

Sir Rufo 7. Dez 2013 19:34

AW: Font.Style ins Clientdataset Laden
 
Da Delphi-Referenz durchsuchenTFontStyle ein Set ist, kann man so ein Set als string (z.B. "[fsBold,fsItalic]") darstellen (Funktionen gibt es dafür in beide Richtungen).

Am einfachsten ist es aber - weil es ein Set ist - den Wert in einen Integer zu überführen.

Delphi-Quellcode:
var
  FontStyleAsInt : integer;
begin
  // in einen Integer
  FontStyleAsInt := Integer( MyFont.Style );
  // und wieder zurück
  Integer( MyFontStyle ) := FontStyleAsInt;
end;
Schon brauchen wir uns nicht mehr fragen, wie bekommen wir den TFontStyle in die Datenbank, sondern einen Integer-Wert.

@Perlsau

Wenn ich das machen sollte, dann würde mir spontan das hier einfallen
Delphi-Quellcode:
begin
  PuP_Red_Normal.Checked := ( DBRichEd_Inhalt.SelAttributes.Style = [] );
  PuP_Red_Fett.Checked := ( fsBold in DBRichEd_Inhalt.SelAttributes.Style );
  PuP_Red_Kursiv.Checked := ( fsItalic in DBRichEd_Inhalt.SelAttributes.Style );
  PuP_Red_ULine.Checked := ( fsUnderline in DBRichEd_Inhalt.SelAttributes.Style );
end;

himitsu 7. Dez 2013 19:56

AW: Font.Style ins Clientdataset Laden
 
Man kann sich das Set auch via RTTI in einen String konvertieren lassen.

Perlsau 7. Dez 2013 20:24

AW: Font.Style ins Clientdataset Laden
 
Zitat:

Zitat von Sir Rufo (Beitrag 1238885)
@Perlsau

Wenn ich das machen sollte, dann würde mir spontan das hier einfallen
Delphi-Quellcode:
begin
  PuP_Red_Normal.Checked := ( DBRichEd_Inhalt.SelAttributes.Style = [] );
  PuP_Red_Fett.Checked := ( fsBold in DBRichEd_Inhalt.SelAttributes.Style );
  PuP_Red_Kursiv.Checked := ( fsItalic in DBRichEd_Inhalt.SelAttributes.Style );
  PuP_Red_ULine.Checked := ( fsUnderline in DBRichEd_Inhalt.SelAttributes.Style );
end;

Hab Dank, Sir Rufo, das ist unbestreitbar eleganter. Würde ich heute auch so machen. Der gepostete Code war aus einem älteren Projekt.

himitsu 7. Dez 2013 21:09

AW: Font.Style ins Clientdataset Laden
 
Nur das Normal würde ich besser weglassen, daß es eine "nutzlose" doppelte Information ist.


Nicht nur nutzlos, sondern glatt wiedersprüchlich, denn was ist, wenn Normal mal True ist und irgendeines der Anderen Felder auch?

Natcree 7. Dez 2013 21:43

AW: Font.Style ins Clientdataset Laden
 
Also habe gerade das Popupmenu erstellt aber er ändert den Haken nich von normal auf Kursiv oder fett.

Perlsau 7. Dez 2013 21:43

AW: Font.Style ins Clientdataset Laden
 
Zitat:

Zitat von himitsu (Beitrag 1238898)
Nur das Normal würde ich besser weglassen, daß es eine "nutzlose" doppelte Information ist.

Mein lieber Himitsu, das steht doch bereits in meinem Posting, wenn du noch mal nachlesen möchtest:
"Das Normal-Feld kannst du natürlich weglassen, das definiert sich ja schon dadurch, daß eines der anderen Felder True ist."

Natürlich wird das Normal zum Abspeichern in der DB nicht benötigt. Da ich jedoch ein Popupmenü beschrieben habe, das den Style eines selektieren Textes wiedergeben soll, gehörte dort das Normal dazu. Oder mit anderen Worten: Am späten Abend neigt man häufig zum Drüberlesen, so daß einem wichtige Details entgehen können.

Zitat:

Zitat von Natcree (Beitrag 1238902)
Also habe gerade das Popupmenu erstellt aber er ändert den Haken nich von normal auf Kursiv oder fett.

Mein lieber Natcree, du hattest doch vor, die Style-Eigenschaften eines (oder vielleicht auch mehrerer) Buttons in der Datenbank abzulegen und nicht die Style-Eigenschaften eines selektierten Textes in einem PopUp-Menü abzubilden. Wozu hast du dir denn jetzt ein PopUp-Menü erstellt und was hast du versucht, um dort eingetragene Style-Eigenschaften mit Checked-Haken zu versehen bzw. diese zu entfernen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:26 Uhr.
Seite 1 von 2  1 2      

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