AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

RichEdit und Zeilenumbruch

Ein Thema von DelTurbo · begonnen am 25. Dez 2009 · letzter Beitrag vom 26. Dez 2009
Antwort Antwort
DelTurbo
Online

Registriert seit: 12. Dez 2009
Ort: Eifel
1.194 Beiträge
 
Delphi 2007 Architect
 
#1

RichEdit und Zeilenumbruch

  Alt 25. Dez 2009, 14:06
Hi,

ich habe ein kleines problem. Ich möchte das RichEdit den text nicht nur an einem Space umbricht sondern auch an anderen zeichen. Kann man das irgendwo einstellen? ca. 1 Stunde google hat mich nicht weitergebracht.

Danke im voraus
  Mit Zitat antworten Zitat
Niko

Registriert seit: 23. Jun 2003
416 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Frage zu RichEdit

  Alt 25. Dez 2009, 15:22
Hi,

meines Wissens hat TRichEdit keine entsprechende Eigenschaft. Es sollte sich aber umsetzen lassen, in dem du über die Nachricht MSDN-Library durchsuchenEM_SETWORDBREAKPROC eine entsprechende Callbackfunktion installierst.
"Electricity is actually made up of extremely tiny particles called electrons, that you cannot see with the naked eye unless you have been drinking." (Dave Barry)
  Mit Zitat antworten Zitat
DelTurbo
Online

Registriert seit: 12. Dez 2009
Ort: Eifel
1.194 Beiträge
 
Delphi 2007 Architect
 
#3

Re: Frage zu RichEdit

  Alt 25. Dez 2009, 15:41
Oh gott, sowas hab ich noch nie gemacht. Also ich habe rausgefunden das er bei Space und - einen wrap macht. Mir fehlt nur der punkt

Eventuell mal dran denken das ich erst seit ca. 2 Wochen Programmiere (unter Windows)..... Also seitdem ich hier angemeldet bin ^^

Wenn ich hier mal was frage, dann hänge ich echt in der kurve und komme nicht weiter. Ansonsten wühle ich mich durch. Im moment mache ich einen kleinen irc-client. Der rennt auch schon nachdem ich die idirc.pas geändert habe. Die geänderte unit hab ich natürlich hier hochgeladen (ich hoffe das ist erwünscht), damit andere nicht über den selben fehler stolpern. Und für den irc-client bräucht ich den umbruch....

Kann man denn wielliecht RichEdit dazu bringen einfach umzubrechen wenn er am ende ist??? Egal welches zeichen dort steht. Das wäre auch genial......

Gruss und danke
  Mit Zitat antworten Zitat
DelTurbo
Online

Registriert seit: 12. Dez 2009
Ort: Eifel
1.194 Beiträge
 
Delphi 2007 Architect
 
#4

Re: Frage zu RichEdit

  Alt 25. Dez 2009, 18:54
Ich möchte gleich noch eine frage hinterherschieben

Und zwar habe ich grad mal versucht mit TabControl zu arbeiten. Leider scheint es so, das wenn RichEdit.Visible:=False ist, das alles nichtmehr richtig arbeitet wenn ich trotzdem weiter daten da reinschreibe.

Gibt es da einen trick???

Danke
  Mit Zitat antworten Zitat
Niko

Registriert seit: 23. Jun 2003
416 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Frage zu RichEdit

  Alt 25. Dez 2009, 19:59
Weil Weihnachten ist (und es mich selbst interessiert hat ...):

Automatische Zeilenwechsel werden an Zeichen aus WhitespaceChars und aus DelimiterChars durchgeführt. Die Implementierung ist nicht ganz perfekt: Wortweise springen nach Links mit Strg + Pfeiltaste verhält sich nicht ganz Standardkonform, aber ich hatte jetzt nicht mehr Zeit.

Delphi-Quellcode:
 // Fehlende Definitionen ergänzen
const
  WB_CLASSIFY = 3;
  WB_MOVEWORDLEFT = 4;
  WB_MOVEWORDRIGHT = 5;
  WB_LEFTBREAK = 6;
  WB_RIGHTBREAK = 7;

  WB_CLASS_WHITESPACE = 0;
  WB_CLASS_LINEBREAK = 1;
  WB_CLASS_DELIMITER = 2;
  WB_CLASS_NORMALCHAR = 3;

  WBF_CLASS = $0F;
  WBF_ISWHITE = $10;
  WBF_BREAKLINE = $20;
  WBF_BREAKAFTER = $40;

// Zeichengruppen
const
  WhitespaceChars: set of Char = [#9, #32];
  LinebreakChars: set of Char = [#10, #13];
  DelimiterChars: set of Char = [#9, #32, #13, '.', '-'];

function EditWordBreakProc(lpch: LPTSTR; ichCurrent: Integer; cch: Integer;
  code: Integer): Integer; stdcall;
begin
  case code of
    WB_CLASSIFY:
      if lpch[ichCurrent] in WhitespaceChars then
        Result := WBF_ISWHITE or WB_CLASS_WHITESPACE
      else if lpch[ichCurrent] in LinebreakChars then
        Result := WBF_BREAKLINE or WB_CLASS_DELIMITER
      else if lpch[ichCurrent] in DelimiterChars then
        Result := WBF_BREAKAFTER or WB_CLASS_DELIMITER
      else
        Result := WB_CLASS_NORMALCHAR;
    WB_ISDELIMITER:
      if (lpch[ichCurrent] in DelimiterChars) then
        Result := 1
      else
        Result := 0;
    WB_LEFT, WB_MOVEWORDLEFT:
      begin
        Dec(ichCurrent);
        while (ichCurrent >= 0) and (lpch[ichCurrent] in DelimiterChars) do
          Dec(ichCurrent);
        while (ichCurrent >= 0) and not (lpch[ichCurrent] in DelimiterChars) do
          Dec(ichCurrent);
        Result := ichCurrent + 1;
      end;
    WB_LEFTBREAK:
      begin
        Dec(ichCurrent);
        while (ichCurrent >= 0) and not (lpch[ichCurrent] in DelimiterChars) do
          Dec(ichCurrent);
        if ichCurrent < 0 then
          ichCurrent := 0;
        Result := ichCurrent;
      end;
    WB_RIGHT, WB_MOVEWORDRIGHT:
      begin
        while (ichCurrent < cch) and not (lpch[ichCurrent] in DelimiterChars) do
          Inc(ichCurrent);
        while (ichCurrent < cch) and (lpch[ichCurrent] in DelimiterChars) do
          Inc(ichCurrent);
        Result := ichCurrent;
      end;
    WB_RIGHTBREAK:
      begin
        Inc(ichCurrent);
        while (ichCurrent < cch) and not (lpch[ichCurrent] in DelimiterChars) do
          Inc(ichCurrent);
        Result := ichCurrent;
      end;
  end;
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
  // Eigene Zeilenumbruchfunktion aktivieren
  SendMessage(RichEdit1.Handle, EM_SETWORDBREAKPROC, 0, Integer(@EditWordBreakProc));
end;
Gib deinem Thread bitte noch einen etwas aussagekräftigeren Titel und mach für die zweite Frage einen neuen auf. Sonst findet das später keiner mehr, der vielleicht mal vor dem gleichen Problem steht. Danke.
"Electricity is actually made up of extremely tiny particles called electrons, that you cannot see with the naked eye unless you have been drinking." (Dave Barry)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Frage zu RichEdit

  Alt 25. Dez 2009, 20:00
Zitat von DelTurbo:
Ich möchte gleich noch eine frage hinterherschieben
Aber bitte in einem neuen Thread.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
DelTurbo
Online

Registriert seit: 12. Dez 2009
Ort: Eifel
1.194 Beiträge
 
Delphi 2007 Architect
 
#7

Re: Frage zu RichEdit

  Alt 26. Dez 2009, 10:25
Zitat von Luckie:
Zitat von DelTurbo:
Ich möchte gleich noch eine frage hinterherschieben
Aber bitte in einem neuen Thread.
Sorry, Ich wollte nicht so viele Threads auf einmal machen. Aber wenn ich drüber nachdenke, es ist natürlich schwachsinn hier nach den tabs zu fragen. Aber das ist ein Projekt bei mir. Hab nicht drüber nachgedacht (ich denke eher selten )

@Niko, tausend dank für dein "geschenkt". Ich werde mal versuchen das reinzubekommen. Das mit dem Edit ist egal. Die box ist ReadOnly.

LG
  Mit Zitat antworten Zitat
DelTurbo
Online

Registriert seit: 12. Dez 2009
Ort: Eifel
1.194 Beiträge
 
Delphi 2007 Architect
 
#8

Re: RichEdit und Zeilenumbruch

  Alt 26. Dez 2009, 11:13
Rückmeldung: GEIL, klappt super. Nochmal tausend dank. Das hät ich in der zeit nicht hinbekommen. Eventuell nach 3 Tagen googln.

Nochmal danke...

Gruss
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:18 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