Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-09-2015
Jose Roman Jose Roman is offline
Miembro
 
Registrado: jul 2006
Ubicación: Colombia
Posts: 361
Poder: 18
Jose Roman Va por buen camino
DBRichEdit y su propiedad Alignment

Cordial saludo,

Trabajo con Firebird, Delphi XE7 y FIBPlus, y estoy guardando en un campo de tipo BLOB SUB_TYPE 1 un texto escrito en un DBRichEdit, este me lo guarda perfectamente lo que corresponde a tamaño de fuente, tipo de fuente y color (Me desconecto y vuelvo a conectar), pero no conserva la alineacion (centrado o derecha), siempre la da taLeftJustify.
Que hay que hacer para que guarde esa propiedad que desee el usuario? Adjunto el codigo.

Código Delphi [-]
type
  TwMain = class(TForm)
    DBNavigator1: TDBNavigator;
    Edicion: TDBRichEdit;
    Panel1: TPanel;
    BSubrayado: TPngSpeedButton;
    BCursiva: TPngSpeedButton;
    BTachada: TPngSpeedButton;
    BIzquierda: TPngSpeedButton;
    BCentrado: TPngSpeedButton;
    BDerecha: TPngSpeedButton;
    BBolo: TPngSpeedButton;
    CBFuentes: TComboBox;
    EdTamano: TEdit;
    pFIBDatabase1: TpFIBDatabase;
    pFIBTransaction1: TpFIBTransaction;
    pFIBDataSet1: TpFIBDataSet;
    DataSource1: TDataSource;
    PopupMenu1: TPopupMenu;
    Color1: TMenuItem;
    Fuente1: TMenuItem;
    DColor: TColorDialog;
    DFuente: TFontDialog;
    BNegrita: TSpeedButton;
    procedure Color1Click(Sender: TObject);
    procedure Fuente1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure BNegritaClick(Sender: TObject);
    procedure BSubrayadoClick(Sender: TObject);
    procedure BCursivaClick(Sender: TObject);
    procedure BTachadaClick(Sender: TObject);
    procedure EdTamanoKeyPress(Sender: TObject; var Key: Char);
    procedure BIzquierdaClick(Sender: TObject);
    procedure BCentradoClick(Sender: TObject);
    procedure BDerechaClick(Sender: TObject);
    procedure CBFuentesClick(Sender: TObject);
    procedure BBoloClick(Sender: TObject);
    procedure EdicionSelectionChange(Sender: TObject);
  private
    procedure BotonEstilo(Sender: TObject);
    procedure BotonAlinear(Sender:TObject);
  public
    { Public declarations }
  end;

var
  wMain: TwMain;

implementation

{$R *.dfm}

procedure TwMain.BBoloClick(Sender: TObject);
begin
  IF BBolo.Down THEN
    Edicion.Paragraph.Numbering := nsBullet
  ELSE Edicion.Paragraph.Numbering := nsNone;
end;

procedure TwMain.BCentradoClick(Sender: TObject);
begin
  BotonAlinear(BCentrado);
end;

procedure TwMain.BCursivaClick(Sender: TObject);
begin
  BotonEstilo(BCursiva);
end;

procedure TwMain.BDerechaClick(Sender: TObject);
begin
  BotonAlinear(BDerecha);
end;

procedure TwMain.BIzquierdaClick(Sender: TObject);
begin
  BotonAlinear(BIzquierda);
end;

procedure TwMain.BNegritaClick(Sender: TObject);
begin
  //BNegrita.Down := not BNegrita.Down;
  BotonEstilo(BNegrita);

end;

procedure TwMain.BotonAlinear(Sender: TObject);
begin
  WITH Sender AS TSpeedButton DO
    Edicion.Paragraph.Alignment := TAlignment(Tag);
end;

procedure TwMain.BotonEstilo(Sender: TObject);
begin
  WITH (Sender AS TSpeedButton), Edicion.SelAttributes DO
  BEGIN
    IF Down THEN
      Style := Style + [TFontStyle(Tag)]
    ELSE
      Style := Style - [TFontStyle(Tag)];
  END;
end;

procedure TwMain.BSubrayadoClick(Sender: TObject);
begin
  BotonEstilo(BSubrayado);
end;

procedure TwMain.BTachadaClick(Sender: TObject);
begin
  BotonEstilo(BTachada);
end;

procedure TwMain.CBFuentesClick(Sender: TObject);
begin
  Edicion.SelAttributes.Name := CBFuentes.Text;
  Edicion.SetFocus;
end;

procedure TwMain.Color1Click(Sender: TObject);
begin
  DColor.Color := Edicion.SelAttributes.Color;
  IF DColor.Execute THEN
    Edicion.SelAttributes.Color := DColor.Color;
end;

procedure TwMain.EdicionSelectionChange(Sender: TObject);
var
  N: SmallInt;
begin
  WITH Edicion.SelAttributes, Edicion.Paragraph DO
  BEGIN
    FOR N:=0 TO CBFuentes.Items.Count-1 DO
      IF CBFuentes.Items[N] = Edicion.SelAttributes.Name THEN
        CBFuentes.ItemIndex := N;
     EdTamano.Text := InttoStr(Size);
     BNegrita.Down := fsBold IN Style;
     BSubrayado.Down := fsUnderline IN Style;
     BCursiva.Down := fsItalic IN Style;
     BTachada.Down := fsStrikeOut IN Style;
     BBolo.Down := Numbering = nsBullet;
     BIzquierda.Down := Alignment = taLeftJustify;
     BCentrado.Down := Alignment = taCenter;
     BDerecha.Down := Alignment = taRightJustify;
  END;
end;

procedure TwMain.EdTamanoKeyPress(Sender: TObject; var Key: Char);
begin
  IF Key = #13 THEN
  BEGIN
    Edicion.SelAttributes.Size := StrToInt(EdTamano.Text);
    Key := #0;
    Edicion.SetFocus;
  END
  ELSE
    IF ( (Key < '0') OR (Key > '9') ) AND (Key <> #8) THEN
      Key := #0;
end;

procedure TwMain.FormCreate(Sender: TObject);
begin
  { Obtenemos la lista de tipos de letra y la asignamos a la
    propiedad Items de TComboBox }

  CBFuentes.Items := Screen.Fonts;

  { Asignamos a la propiedad TAG de cada uno de los botones de
    tipo de letra la constante adecuada }

  BNegrita.Tag := longint(fsBold);
  BSubrayado.Tag := longint(fsUnderline);
  BCursiva.Tag := longint(fsItalic);
  BTachada.Tag := longint(fsStrikeOut);

  { Hacemos lo mismo con los botones de ajuste de párrafo }

  BIzquierda.Tag := longint(taLeftJustify);
  BCentrado.Tag := longint(taCenter);
  BDerecha.Tag := longint(taRightJustify);

  pFIBDatabase1.Connected := True;
  pFIBDataSet1.Transaction.StartTransaction;
  pFIBDataSet1.Open;
end;

procedure TwMain.FormShow(Sender: TObject);
begin
  BotonAlinear(BIzquierda);
  BIzquierda.Down := True;
  CBFuentes.Text := Edicion.SelAttributes.Name;
  Edicion.SetFocus;
end;

procedure TwMain.Fuente1Click(Sender: TObject);
begin
  DFuente.Font.Name := Edicion.SelAttributes.Name;

  IF DFuente.Execute THEN
  BEGIN
    Edicion.SelAttributes.Name := DFuente.Font.Name;
    Edicion.SelAttributes.Color := DFuente.Font.Color;
    Edicion.SelAttributes.Size := DFuente.Font.Size;
  END;
end;
end.

Gracias de antemano.

Última edición por Jose Roman fecha: 08-09-2015 a las 23:12:09. Razón: Falto datos
Responder Con Cita
  #2  
Antiguo 09-09-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Jose.

Podrías crear otra columna en la tabla para almacenar la alineación del texto.

Saludos

Edito: Disculpas, leí cualquier cosa... ( por favor olvida lo que digo arriba )
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 09-09-2015 a las 06:24:58.
Responder Con Cita
  #3  
Antiguo 09-09-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola de nuevo.

Leyendo con mas detenimiento ...
La columna BLOB tendría que estar declarada como SUB_TYPE 0 ya que SUB_TYPE 1 es para texto básico: What are BLOB subtypes?

Luego para guardar el contenido de un TRichEdit a la columna BLOB respetando el formato:
Código Delphi [-]
procedure RichEditToBlob(DataSet: TDataSet; const aFieldName: string; RE:TRichEdit);
var
  Stream: TStream;
begin
  Stream := TMemoryStream.Create;
  try
    RE.Lines.SaveToStream(Stream);
    Stream.Position := 0;
    DataSet.Edit;
    TBlobField(DataSet.FieldByName(aFieldName)).LoadFromStream(Stream);
    DataSet.Post;
  finally
    Stream.Free;
  end;
end;
Ejemplo de uso:
Código Delphi [-]
...
begin
  RichEditToBlob(IBDataSet1, 'CAMPO_BLOB', RichEdit1)
...


La acción inversa, para mostrar en un TRichEdit el contenido de la columna BLOB:
Código Delphi [-]
procedure BlobToRichEdit(DataSet: TDataSet; const aFieldName: string; RE:TRichEdit);
var
  Stream: TStream;
begin
  Stream := TMemoryStream.Create;
  try
    TBlobField(DataSet.FieldByName(aFieldName)).SaveToStream(Stream);
    Stream.Position := 0;
    RE.PlainText    := False;
    RE.Lines.LoadFromStream(Stream);
  finally
    Stream.Free;
  end;
end;
Aunque este último código sería innecesario para el caso del TDBRichEdit. Basta con configurar sus propiedades DataSource y DataField para que se visualice el contenido.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 09-09-2015
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.022
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Efectivamente, como dice ecfisa, el sub_type 1 es texto. Debes usar binario, sub_type 0.
Código:
create domain domImagen blob sub_type 0; 
create domain domComentarios blob sub_type text;
Responder Con Cita
  #5  
Antiguo 09-09-2015
Jose Roman Jose Roman is offline
Miembro
 
Registrado: jul 2006
Ubicación: Colombia
Posts: 361
Poder: 18
Jose Roman Va por buen camino
No me dio, aun conserva el alineamiento a la izquierda. adjunto de nuevo código quizás ingrese mal el ejemplo:
Código Delphi [-]
type
  TwMain = class(TForm)
    DBNavigator1: TDBNavigator;
    Panel1: TPanel;
    BSubrayado: TPngSpeedButton;
    BCursiva: TPngSpeedButton;
    BTachada: TPngSpeedButton;
    BIzquierda: TPngSpeedButton;
    BCentrado: TPngSpeedButton;
    BDerecha: TPngSpeedButton;
    BBolo: TPngSpeedButton;
    CBFuentes: TComboBox;
    EdTamano: TEdit;
    Database: TpFIBDatabase;
    Transaction: TpFIBTransaction;
    DataSet: TpFIBDataSet;
    DataSource: TDataSource;
    PopupMenu1: TPopupMenu;
    Color1: TMenuItem;
    Fuente1: TMenuItem;
    DColor: TColorDialog;
    DFuente: TFontDialog;
    BNegrita: TSpeedButton;
    Edicion: TRichEdit;
    procedure Color1Click(Sender: TObject);
    procedure Fuente1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure BNegritaClick(Sender: TObject);
    procedure BSubrayadoClick(Sender: TObject);
    procedure BCursivaClick(Sender: TObject);
    procedure BTachadaClick(Sender: TObject);
    procedure EdTamanoKeyPress(Sender: TObject; var Key: Char);
    procedure BIzquierdaClick(Sender: TObject);
    procedure BCentradoClick(Sender: TObject);
    procedure BDerechaClick(Sender: TObject);
    procedure CBFuentesClick(Sender: TObject);
    procedure BBoloClick(Sender: TObject);
    procedure EdicionSelectionChange(Sender: TObject);
    procedure DataSourceStateChange(Sender: TObject);
    procedure DataSetBeforePost(DataSet: TDataSet);
  private
    procedure BotonEstilo(Sender: TObject);
    procedure BotonAlinear(Sender:TObject);
    procedure RichEditToBlob(DataSet: TDataSet; const aFieldName: string; RE:TRichEdit);
    procedure BlobToRichEdit(DataSet: TDataSet; const aFieldName: string; RE:TRichEdit);
  public
    { Public declarations }
  end;

var
  wMain: TwMain;

implementation

{$R *.dfm}

procedure TwMain.BBoloClick(Sender: TObject);
begin
  IF BBolo.Down THEN
    Edicion.Paragraph.Numbering := nsBullet
  ELSE Edicion.Paragraph.Numbering := nsNone;
end;

procedure TwMain.BCentradoClick(Sender: TObject);
begin
  BotonAlinear(BCentrado);
end;

procedure TwMain.BCursivaClick(Sender: TObject);
begin
  BotonEstilo(BCursiva);
end;

procedure TwMain.BDerechaClick(Sender: TObject);
begin
  BotonAlinear(BDerecha);
end;

procedure TwMain.BIzquierdaClick(Sender: TObject);
begin
  BotonAlinear(BIzquierda);
end;

procedure TwMain.BlobToRichEdit(DataSet: TDataSet; const aFieldName: string;
  RE: TRichEdit);
var
  Stream: TStream;
begin
  Stream := TMemoryStream.Create;
  try
    TBlobField(DataSet.FieldByName(aFieldName)).SaveToStream(Stream);
    Stream.Position := 0;
    RE.PlainText    := False;
    RE.Lines.LoadFromStream(Stream);
  finally
    Stream.Free;
  end;
end;

procedure TwMain.BNegritaClick(Sender: TObject);
begin
  //BNegrita.Down := not BNegrita.Down;
  BotonEstilo(BNegrita);

end;

procedure TwMain.BotonAlinear(Sender: TObject);
begin
  WITH Sender AS TSpeedButton DO
    Edicion.Paragraph.Alignment := TAlignment(Tag);
end;

procedure TwMain.BotonEstilo(Sender: TObject);
begin
  WITH (Sender AS TSpeedButton), Edicion.SelAttributes DO
  BEGIN
    IF Down THEN
      Style := Style + [TFontStyle(Tag)]
    ELSE
      Style := Style - [TFontStyle(Tag)];
  END;
end;

procedure TwMain.BSubrayadoClick(Sender: TObject);
begin
  BotonEstilo(BSubrayado);
end;

procedure TwMain.BTachadaClick(Sender: TObject);
begin
  BotonEstilo(BTachada);
end;

procedure TwMain.CBFuentesClick(Sender: TObject);
begin
  Edicion.SelAttributes.Name := CBFuentes.Text;
  Edicion.SetFocus;
end;

procedure TwMain.Color1Click(Sender: TObject);
begin
  DColor.Color := Edicion.SelAttributes.Color;
  IF DColor.Execute THEN
    Edicion.SelAttributes.Color := DColor.Color;
end;

procedure TwMain.DataSetBeforePost(DataSet: TDataSet);
begin
  RichEditToBlob(DataSet,'OBSER',Edicion);
end;

procedure TwMain.DataSourceStateChange(Sender: TObject);
begin
  case DataSet.State of
    dsBrowse: begin
                Edicion.Enabled := False;
                BlobToRichEdit(DataSet,'OBSER',Edicion);
              end;
    dsEdit,
    dsInsert: begin
              Edicion.Enabled := True;
              Edicion.SetFocus;
            end;
  end;
  
end;

procedure TwMain.EdicionSelectionChange(Sender: TObject);
var
  N: SmallInt;
begin
  WITH Edicion.SelAttributes, Edicion.Paragraph DO
  BEGIN
    FOR N:=0 TO CBFuentes.Items.Count-1 DO
      IF CBFuentes.Items[N] = Edicion.SelAttributes.Name THEN
        CBFuentes.ItemIndex := N;
     EdTamano.Text := InttoStr(Size);
     BNegrita.Down := fsBold IN Style;
     BSubrayado.Down := fsUnderline IN Style;
     BCursiva.Down := fsItalic IN Style;
     BTachada.Down := fsStrikeOut IN Style;
     BBolo.Down := Numbering = nsBullet;
     BIzquierda.Down := Alignment = taLeftJustify;
     BCentrado.Down := Alignment = taCenter;
     BDerecha.Down := Alignment = taRightJustify;
  END;
end;

procedure TwMain.EdTamanoKeyPress(Sender: TObject; var Key: Char);
begin
  IF Key = #13 THEN
  BEGIN
    Edicion.SelAttributes.Size := StrToInt(EdTamano.Text);
    Key := #0;
    Edicion.SetFocus;
  END
  ELSE
    IF ( (Key < '0') OR (Key > '9') ) AND (Key <> #8) THEN
      Key := #0;
end;

procedure TwMain.FormCreate(Sender: TObject);
begin
  { Obtenemos la lista de tipos de letra y la asignamos a la
    propiedad Items de TComboBox }

  CBFuentes.Items := Screen.Fonts;

  { Asignamos a la propiedad TAG de cada uno de los botones de
    tipo de letra la constante adecuada }

  BNegrita.Tag := longint(fsBold);
  BSubrayado.Tag := longint(fsUnderline);
  BCursiva.Tag := longint(fsItalic);
  BTachada.Tag := longint(fsStrikeOut);

  { Hacemos lo mismo con los botones de ajuste de párrafo }

  BIzquierda.Tag := longint(taLeftJustify);
  BCentrado.Tag := longint(taCenter);
  BDerecha.Tag := longint(taRightJustify);

  Database.Connected := True;
  Transaction.StartTransaction;
  DataSet.Open;
end;

procedure TwMain.FormShow(Sender: TObject);
begin
  BotonAlinear(BIzquierda);
  BIzquierda.Down := True;
  CBFuentes.Text := Edicion.SelAttributes.Name;
end;

procedure TwMain.Fuente1Click(Sender: TObject);
begin
  DFuente.Font.Name := Edicion.SelAttributes.Name;

  IF DFuente.Execute THEN
  BEGIN
    Edicion.SelAttributes.Name := DFuente.Font.Name;
    Edicion.SelAttributes.Color := DFuente.Font.Color;
    Edicion.SelAttributes.Size := DFuente.Font.Size;
  END;
end;
procedure TwMain.RichEditToBlob(DataSet: TDataSet; const aFieldName: string;
  RE: TRichEdit);
var
  Stream: TStream;
begin
  Stream := TMemoryStream.Create;
  try
    RE.Lines.SaveToStream(Stream);
    Stream.Position := 0;
    //DataSet.Edit;
    TBlobField(DataSet.FieldByName(aFieldName)).LoadFromStream(Stream);
    //DataSet.Post;
  finally
    Stream.Free;
  end;
end;

end.
Responder Con Cita
  #6  
Antiguo 09-09-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola José.
Cita:
Empezado por Jose Roman Ver Mensaje
Código Delphi [-]
...
procedure TwMain.RichEditToBlob(DataSet: TDataSet; const aFieldName: string;
  RE: TRichEdit);
var
  Stream: TStream;
begin
  Stream := TMemoryStream.Create;
  try
    RE.Lines.SaveToStream(Stream);
    Stream.Position := 0;
    //DataSet.Edit;   
    TBlobField(DataSet.FieldByName(aFieldName)).LoadFromStream(Stream);
    //DataSet.Post;  
  finally
    Stream.Free;
  end;
end;

end.
No revisé todo el código, pero estoy viendo que anulas la edición y el guardado del campo en la función RichEditToBlob... y obviamente no se va a almacenar.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 15-12-2015
tuni tuni is offline
Miembro
 
Registrado: jun 2012
Posts: 34
Poder: 0
tuni Va por buen camino
Y una pregunta:a parte de escribir necesito colocar una foto de un archivo en el dbrichedit y posteriormente continuar escribiendo.Como lo puedo hacer?.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Insertar Texto en dbrichedit johurgi Varios 1 18-06-2007 19:54:01
Texto Seleccionado en un DbRichEdit johurgi Varios 1 03-11-2006 13:38:17
DBRichEdit gluglu Varios 1 03-12-2005 16:37:15
Protect en un DBRichEdit RaulRuiz Varios 2 22-01-2005 09:54:20
Problema dbRichEdit User_Baja_2 Varios 0 17-09-2003 01:37:19


La franja horaria es GMT +2. Ahora son las 11:46:16.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi