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 Memolines readonly ? (https://www.delphipraxis.net/54442-memolines-readonly.html)

150gozilla 4. Okt 2005 14:12


Memolines readonly ?
 
Hallo,

ich habe ein Memo mit 28 Lines.

So nun möchte ich das Line 1 und Line 9 nicht mehr verändert werden können, aber der rest schon.

Ich bin am verzweifeln.

Könnt ihr mir helfen ?

Zacherl 4. Okt 2005 14:15

Re: Memolines readonly ?
 
Du könntest im OnSelection Change Ereigniss die aktuelle Zeile herausfinden und dann die RadOnly Eigenschaft entsprechend setzen. Dazu findest du hier sicher Code.

Florian

150gozilla 4. Okt 2005 14:21

Re: Memolines readonly ?
 
:wiejetzt: <-- finde den geil :D, ich suche seid 2 stunden, und finde nix passendes.

mit dem onselect hatte ich es auch probiert, aber klappte nicht, oder ich habe was falls gemacht.

Zacherl 4. Okt 2005 14:33

Re: Memolines readonly ?
 
Mal angenommen, du kennst den Code zum Herausfinden der aktuellen Zeile (Ich kenne ihn nicht, dürfte es aber in der DP geben), dann sollte dein OnSelectionChange Ereigniss in etwa so aussehen:

Delphi-Quellcode:
if (GetLine = 0) or (GetLine = 1) or (GetLine = 2) ... then//GetLine ist die Procedure zum herausfinden der Zeile und Zeile 0 ist die 1. Zeile
begin
  Memo1.ReadOnly := true
end
  else
begin
  Memo1.ReadOnly := false;
end;
Florian

Sharky 4. Okt 2005 14:36

Re: Memolines readonly ?
 
Wo findet man in einem Memo denn das OnSelectionChange? :such:

Eine nicht schöne aber funktionierende Möglichkeit:
Delphi-Quellcode:
procedure TForm1.memo_TestChange(Sender: TObject);
var
  mycaretpas: TPoint;
begin
  with (Sender as TMemo) do
  begin
    mycaretpas := CaretPos;
    if (mycaretpas.Y < 9) then // Wenn der Caret in den Zeilen 0 bis 9 ist
    begin
      SendMessage(Handle, WM_UNDO, 0, 0); // Mache die Änderung rückgänig
      SelLength := 0;
      Perform(EM_EMPTYUNDOBUFFER, 0, 0); // und lösche den Undo-Buffer
    end;
  end;
end;

Zacherl 4. Okt 2005 14:39

Re: Memolines readonly ?
 
Zitat:

Wo findet man in einem Memo denn das OnSelectionChange?
Ups :oops: die gibt's ja nur bei RichEdits ...

Florian

lizardking 4. Okt 2005 15:09

Re: Memolines readonly ?
 
Zitat:

Zitat von Florian Bernd
Zitat:

Wo findet man in einem Memo denn das OnSelectionChange?
Ups :oops: die gibt's ja nur bei RichEdits ...

Florian

*g*

Funzt aber, wenn man beim Memo einfach OnKeyDown und OnMouseDown benutzt und dort die Abfrage nach der Zeile macht :

Delphi-Quellcode:
procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if (Memo1.CaretPos.Y = 0) or (Memo1.CaretPos.Y = 8) then
    Memo1.ReadOnly := true
  else
    Memo1.ReadOnly := false;
end;
Selbiges dann eben nochmal fuer OnMOuseDown :)

Sharky 4. Okt 2005 20:10

Re: Memolines readonly ?
 
Zitat:

Zitat von lizardking
... Funzt aber, wenn man beim Memo einfach OnKeyDown und OnMouseDown benutzt und dort die Abfrage nach der Zeile macht :

Hai lizardking,

funktioniert dein Code auch wenn ich mit der Mause in eine Zeile klicke und dann über ein Kontextmenü eine Einfüge/Überschreiben Funktion aufrufe?

150gozilla 5. Okt 2005 07:55

Re: Memolines readonly ?
 
Zitat:

Zitat von Sharky
Zitat:

Zitat von lizardking
... Funzt aber, wenn man beim Memo einfach OnKeyDown und OnMouseDown benutzt und dort die Abfrage nach der Zeile macht :

Hai lizardking,

funktioniert dein Code auch wenn ich mit der Mause in eine Zeile klicke und dann über ein Kontextmenü eine Einfüge/Überschreiben Funktion aufrufe?

Man kann ja dem Memofeld, ein leeres PopUp Menü zuweißen, somit kann man mit dem kontext menü in diese zeile nichts einfügen :stupid:


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