Announcement

Collapse
No announcement yet.

Bereich in Editfeld aendern

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Bereich in Editfeld aendern

    Ich will im Delphi den Bereich in einem Editfeld verkleinern.
    Dafür existiert eine WindowsMessage diese sollte Den Bereich einschränken:

    SendMessage(Handle, EM_SETRECTNP, 0, LongInt(@Loc));

    Doch wenn ich als nächstes den Editbereich abfrage hatt dieser sich nicht verändert. Ebenfalls bei der Eingabe im Editorfeld hat sich nichts verändert.

    Um den Editbereich zu lesen vewendete ich:

    SendMessage(Handle, EM_GETRECT, 0, LongInt(@Loc));

    Es ist eigentlich von :

    TSpinEdit.SetEditRect;

    Abgeschaut

    Source\ Samples\ spin.pas

    Kann mir jemand sagen wieso dies nicht funktioniert? Ob diese Message nicht funktioniert? Liegt es allenfalls an meinem NT? Oder an meinem Delphi5?

    Villen Dank Beat

  • #2
    was heißt <b>bereich </b> des editierfeldes ändern????
    die größe oder was??

    mfg

    marku
    Herzliche Grüße

    Markus Lemcke
    barrierefreies Webdesign

    Comment


    • #3
      Hallo,

      das folgende Beispiel demonstriert den Einsatz von EM_SETRECT. Wenn man in der TMemo-Instanz einige Textzeilen einträgt, und dann den Button anklickt, richtet sich der Text im Memo entsprechend den neuen Rand-Einstellungen neu aus:
      <pre>
      unit Unit1;

      interface

      uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls;

      type
      TForm1 = class(TForm)
      Memo1: TMemo;
      Button1: TButton;
      procedure Button1Click(Sender: TObject);
      procedure FormCreate(Sender: TObject);
      private
      { Private-Deklarationen }
      FVisibleRect : TRect;
      public
      { Public-Deklarationen }
      end;

      var
      Form1: TForm1;

      implementation

      {$R *.DFM}

      procedure TForm1.FormCreate(Sender: TObject);
      const
      cRAND = 5;
      begin
      with FVisibleRect do
      begin
      Left := cRAND;
      Top := cRAND;
      Right := Memo1.Width - (cRAND * 2);
      Bottom := Memo1.Height - (cRAND * 2);
      end;
      end;

      procedure TForm1.Button1Click(Sender: TObject);
      begin
      Memo1.Perform(EM_SETRECT, 0, Integer(@FVisibleRect));
      end;

      end.
      </pre&gt

      Comment


      • #4
        Hallo Beat, ich habe EM_SETRECTNP für ein TEdit verwendet. Jedoch in einer Komponente. Damit EM_SETRECTNP überhaupt wirkt, musste ich die CreateParams Methode überschreiben.<br>

        <pre>

        procedure TBtnEdit.CreateParams(var Params: TCreateParams);
        begin
        inherited CreateParams(Params);
        { ES_MULTILINE ist nötig, damit in SetEditRect die Botschaft
        EM_SETRECTNP verarbeitet wird. Siehe Win32 SDK}
        Params.Style := Params.Style or ES_MULTILINE or WS_CLIPCHILDREN;
        end;

        </pre>
        <br>
        SetEditRect ist eine eigene Methode, in der das neue Rechteck/Bereich gesetzt wird. Wichtig ist nur die Erkenntnis mit EM_MULTILINE. Der Weg dort hin war hart und steinig.<br>:-) Jens Schuman

        Comment


        • #5
          Danke Andreas
          Danke Jents

          Mit den beiden Angaben kann ich den Edit bereich einstellen.
          Das komische ist nur dass eigenlich Perform() und SendMessage() das selbe bewirken sollen. Doch einmahl geht SendMessage() einmal nicht. Perform() erfuelt seinen zwek immer.

          Gruss Bea

          Comment

          Working...
          X