Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TPanel mit mehrzeiligem Text ? (https://www.delphipraxis.net/21453-tpanel-mit-mehrzeiligem-text.html)

mschaefer 3. Mai 2004 10:05


TPanel mit mehrzeiligem Text ?
 
Moin, moin

Welche Routine muß ich überschreiben um eine TPanel - Komponente mit mehrzeiligem Text
zu versehen. Heute morgen habe ich mich in der VCL regelrecht verlaufen.... :?

Grüße // Martin

Luckie 3. Mai 2004 10:09

Re: TPanel mit mehrzeiligem Text ?
 
Gar keine. Füge einen Zeilenumbruch mit #13#10 ein. Oder soll das was wie eine Listbox werden?

mschaefer 3. Mai 2004 10:30

Re: TPanel mit mehrzeiligem Text ?
 
Hi Luckie,

also bei Buttons funktioniert das bei mir auch einwandfrei mit Deinem Trick.
Meine Panels weigern sich beharlich und zeigen nur die erste Zeile an.

Möchte aber vermeiden da überall noch Labels drauf zu kleben.
Irgendwas ist bei Dir offensichtlich anders ?1?

Grüße aus dem sonnigen Hannover // Martin

Luckie 3. Mai 2004 10:50

Re: TPanel mit mehrzeiligem Text ?
 
Hm, nein geht bei mir auch nicht. Ich dachte nur, es würde genauso gehen wie bei Labels.

mschaefer 3. Mai 2004 14:09

Re: TPanel mit mehrzeiligem Text ?
 
Moin moin,

also das mehrzeilige Panel hat mich doch noch nicht losgelassen, zumal ich nur eine kommerzielle Komponente gefunden habe. Jetzt habe ich mal einen Rohbau der Komponente zusammengestrickt. Hakelt noch etwas und ich weiss leider nicht wie ich da Alignment reinbekomme... :?: :?: :?:

Delphi-Quellcode:

Unit MyOanel
interface

uses Classes,  SysUtils, dialogs,
      Windows,  Forms,    Messages;

{                                                                              }
{                                                                              }
type
{                                                                              }
{   TMyPanel                                                                  }

    procedure Register;


    TMyPanel =  class(TPanel)
    private
        FCaption_List                     : TStrings;
        procedure DrawCaption
        (          Text : string);
    public
        constructor Create
        (           AOwner                  : TComponent );          override;
        destructor destroy;

        procedure  SetCaption
        (           Text                    : String    );
        function   GetCaption              : String;

        procedure  SetCaption_List
        (           LCaption_List           : TStrings  );

    published
        property   Caption_List           : TStrings
                                              read   FCaption_List
                                              write  SetCaption_List;

        property   Caption                 : String
                                              read   GetCaption
                                              write  SetCaption;

    end;

{                                                                              }
{                                                                              }
implementation
{                                                                              }
{                                                                              }

          procedure Register;
          begin
                RegisterComponents( '!', [  TMyPanel   ]);
          end;

   {                                                                           }
   {  TMyPanel                                                                }


          constructor TMyPanel.Create (AOwner:TComponent);
          begin
               inherited Create(AOwner);
               FCaption_List := TStringList.Create;
          end;

          destructor TMyPanel.destroy;
          begin
               FCaption_List.Destroy;
               inherited Destroy;
          end;

          procedure TMyPanel.DrawCaption
          (          Text                      : string);
          var
               Rect : TRect;
          begin
               Rect.Left  := 5;
               Rect.Top   := 5;
               Rect.Right := Width + Left;
               Rect.Bottom := Height + Top;
               DrawText( Canvas.Handle,
                         PChar (  Text ),
                         Length(  Text ),
                         Rect, DT_RTLREADING);  //DT_RIGHT
          end;

          function  TMyPanel.GetCaption: String;
          begin
               DrawCaption( Text );
               Result := copy(
                                FCaption_List.Text
                             , 1
                             , length(FCaption_List.Text)-2
                             );
          end;

          procedure TMyPanel.SetCaption
          (          Text                    : String    );
          begin
               FCaption_List.Text := Text;
               DrawCaption( Text );
          end;

          procedure TMyPanel.SetCaption_List
          (          LCaption_List           : TStrings );
          begin
               SetCaption( LCaption_List.Text );
          end;

end.
Vielleicht hat jemand mal etwas Zeit und gibt mir einen Tip wie man da Alignment
noch einbauen kann. Zentrieren fehlt mir vor allem.

Grüße zur Teatime // Martin

Muetze1 3. Mai 2004 16:25

Re: TPanel mit mehrzeiligem Text ?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Moin!

Das Thema fand ich interessant und habe mal schnell was fertig gemacht - siehe Anhang

Die Kompo liegt dann demnächst auf meiner HP...

/EDIT: Anhang geändert!

MfG
Muetze1

mschaefer 3. Mai 2004 17:12

Re: TPanel mit mehrzeiligem Text ?
 
Moin Muetze1,

Gefällt mir! Das ist zwar nur eine kleine Komponente, aber die spart massig
Labels und bisher habe ich im SourceCode auch noch keine in den üblichen
verdächtigen Seiten gesehen (Neuland !)

Das mit dem zentrieren des Rect scheint auch der einzige Weg zu sein den Text
vertikal zu zentrieren. Den DrawText kann vertikal nur zentrieren wenn das
Flag DT_SingleLine gesetzte ist (so habe ich das jedenfalls verstanden).

Viele Grüße // Martin

Muetze1 3. Mai 2004 18:20

Re: TPanel mit mehrzeiligem Text ?
 
Moin!

Da die alte Caption beim ändern des Alignments wieder zum Vorschein kam, habe ich die Komponente nochmal erweitert und eine neue Property CaptionAlignment hinzugefügt. Damit kann man jetzt die Lage der Caption im Panel festlegen. Neuer Source im obigen Post...

MfG
Muetze1


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:34 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