Einzelnen Beitrag anzeigen

Benutzerbild von sECuRE
sECuRE

Registriert seit: 10. Apr 2003
Ort: Heidelberg
360 Beiträge
 
Delphi 7 Professional
 
#2

Re: TRichEdit + Automatisch Einrücken?

  Alt 5. Feb 2005, 21:56
Hi,

nach einigen Überlegungen und ein bisschen rumprobieren hab ich nun folgenden Code auf die Beine gestellt - für alle Interessierten:

Delphi-Quellcode:
procedure TMainForm.Memo1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
var temp:string;
    c,depth:integer;
const IndentKey: Word = VK_SPACE;
      IndentDepth: integer = 2;
function CountOccasions(input,need:string):integer;
var x,occured:integer;
begin
  occured:=0;
  for x:=1 to length(input) do
    if (copy(input,x,length(need)) = need) then
      Inc(occured);
  result:=occured;
end;
begin
// Auto-Indent
if (Key = VK_RETURN) then begin
  temp:=TMemo(Sender).Lines[TMemo(Sender).CaretPos.Y];
  // get old indent depth
  depth:=0;
  while ((depth < length(temp)) and (Ord(copy(temp,depth+1,1)[1]) = IndentKey)) do
    Inc(depth);

  if (depth > 0) then
    depth:=depth div IndentDepth;

  // check if we need to go deeper
  if (Pos('{',temp) > 0) then
    depth:=depth + CountOccasions(temp,'{');

  // apply indent
  if (depth > 0) then
    for c:=(IndentDepth * depth) downto 0 do begin
      keybd_event(IndentKey,0,0,0);
      keybd_event(IndentKey,0,KEYEVENTF_KEYUP,0);
    end;
end;
Anpassen sollte man u.A. den Typecast von Sender, falls man eine andere Komponente als TMemo benutzt und die '{', falls man eine andere Sprache im Sinn hat

Viel Spaß damit
  Mit Zitat antworten Zitat