AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Text in Richedit anklicken

Ein Thema von XXcD · begonnen am 12. Jul 2009 · letzter Beitrag vom 14. Jul 2009
Antwort Antwort
Seite 3 von 4     123 4   
NickelM

Registriert seit: 22. Jul 2007
Ort: Carlsberg
445 Beiträge
 
Delphi 2009 Professional
 
#21

Re: Text in Richedit anklicken

  Alt 13. Jul 2009, 15:06
Hmmm also über den Code würde ich sagen solltest du den folgendermasen ändern
Delphi-Quellcode:
var Test : TSize;
    Rect1 : TRect;
    TextHoehe : Integer;
    Zeile : Integer;
    Text1 : String;
begin
for Zeile := 1 to JvRichEdit1.Lines.Count do
begin //Zeile in der der Text steht (Index der Linesliste +1 des RichEdits)
Text1 := Copy(JvRichEdit1.Lines[Zeile-1],1,Pos(':',JvRichEdit1.Lines[Zeile-1])-2); //Text in der Zeile der Vorne steht;
GetTextExtentPoint32(GetDC(JvRichEdit1.Handle), PChar(Text1), Length(Text1), Test); //WinApi Funktion, welche die Höhe und die Breite des Textes ausgibt
TextHoehe := -JvRichEdit1.Font.Height; //Höhe der Schrift allgemein
Rect1 := Rect(0,(Zeile-1)*TextHoehe,Test.cx,Zeile*TextHoehe + Test.cy); //Bereich festlegen, wo der Text ist, dabei sit vorausgesetz das der Text immer vorne steht
if (y >= Rect1.Top) and (y+TextHoehe <= Rect1.Bottom) and (x <= Rect1.Right) then //Überprüfung ob die Mouse in Rect (speicher am besten x,y von MouseMove und setze
//die Variable für X und Y ein, wenn du die Anweisung hier in DbClick einfügst
begin
//hier der Code, wenn die Mouse auf dem Text ist.
//z.b.
JvRichEdit1.SelStart := 0;
JvRichEdit1.SelLength := Length(Text1);
if not (fsUnderline in JvRichEdit1.SelAttributes.Style) then
begin
JvRichEdit1.SelAttributes.Style := JvRichEdit1.SelAttributes.Style + [fsUnderline];
end;
JvRichEdit1.Cursor:=crHandpoint;
Caption := IntToStr(Zeile); // die Zeile über der die Maus ist
break;
end
else
begin
//und hier schreibste rein wie er normal aussehen soll.
//z.b.
JvRichEdit1.SelStart := 0;
JvRichEdit1.SelLength := Length(Text1);
if fsUnderline in JvRichEdit1.SelAttributes.Style then
begin
JvRichEdit1.SelAttributes.Style := JvRichEdit1.SelAttributes.Style - [fsUnderline];
JvRichEdit1.Cursor:=crDefault;
end;
end;
end;
end;
Nickel
"Lebe und denke nicht an morgen"
Zitat aus dem gleichnamigen Bollywoodfilm.
  Mit Zitat antworten Zitat
NickelM

Registriert seit: 22. Jul 2007
Ort: Carlsberg
445 Beiträge
 
Delphi 2009 Professional
 
#22

Re: Text in Richedit anklicken

  Alt 13. Jul 2009, 15:31
Ich habe gemerkt es gibt ein prob mit dem SelStart, da er immer von der Ersten Buchstaben in der Liste ausgeht. Mann mus irgendwie die ganzen Zeilen die davor waren deren ihre Länge zum SelStart dazuzählen....Aber nun ja ich kümmer mich drum muss nur jetzt weg.
Nickel
"Lebe und denke nicht an morgen"
Zitat aus dem gleichnamigen Bollywoodfilm.
  Mit Zitat antworten Zitat
NickelM

Registriert seit: 22. Jul 2007
Ort: Carlsberg
445 Beiträge
 
Delphi 2009 Professional
 
#23

Re: Text in Richedit anklicken

  Alt 13. Jul 2009, 19:41
So hmmm also nach langem hin und her hab ich es hinbekommen das er den Text unterstreichst aber der Cursor will net ändern....hm
Und wenn man auf das Memo klickt, wird ja SelStart und SelLenght gesetz welches ja beim MouseMove geändert wird wiederum, deshalb entsteht ein flackern
Vll bekommst du den Fehler raus.. hier der Code
Delphi-Quellcode:
var Test : TSize;
    Rect1 : TRect;
    TextHoehe : Integer;
    Zeile : Integer;
    Text1 : String;
    SelStart1,SelLenght1 : Integer;
begin
for Zeile := 0 to RichEdit1.Lines.Count -1 do
begin //Zeile in der der Text steht (Index der Linesliste +1 des RichEdits)
Text1 := Copy(RichEdit1.Lines[Zeile],1,Pos(':',RichEdit1.Lines[Zeile])-2); //Text in der Zeile der Vorne steht;
GetTextExtentPoint32(GetDC(RichEdit1.Handle), PChar(Text1), Length(Text1), Test); //WinApi Funktion, welche die Höhe und die Breite des Textes ausgibt
TextHoehe := -RichEdit1.Font.Height; //Höhe der Schrift allgemein
Rect1 := Rect(0,Zeile*TextHoehe,Test.cx,Zeile*TextHoehe + TextHoehe); //Bereich festlegen, wo der Text ist, dabei sit vorausgesetz das der Text immer vorne steht
if (y >= Rect1.Top) and (y <= Rect1.Bottom) and (X <= Rect1.Right) then //Überprüfung ob die Mouse in Rect (speicher am besten x,y von MouseMove und setze
//die Variable für X und Y ein, wenn du die Anweisung hier in DbClick einfügst
begin
if (SelectRect.Top <> Rect1.Top) and (SelectRect.Bottom <> Rect1.Bottom) then
begin
SelectRect.Top := Rect1.Top;
SelectRect.Bottom := Rect1.Bottom;
SelStart1 := RichEdit1.SelStart;
SelLenght1 := RichEdit1.SelLength;
RichEdit1.SelStart := SendMessage(RichEdit1.Handle, EM_LINEINDEX, Zeile, 0);;
RichEdit1.SelLength := Length(Text1);
if not (fsUnderline in RichEdit1.SelAttributes.Style) then
RichEdit1.SelAttributes.Style := RichEdit1.SelAttributes.Style + [fsUnderline];
RichEdit1.Cursor:=crHandpoint;
RichEdit1.SelStart := SelStart1;
RichEdit1.SelLength := SelLenght1;
end;
end
else
begin
SelStart1 := RichEdit1.SelStart;
SelLenght1 := RichEdit1.SelLength;
RichEdit1.SelStart := SendMessage(RichEdit1.Handle, EM_LINEINDEX, Zeile, 0);;
RichEdit1.SelLength := Length(Text1);
if fsUnderline in RichEdit1.SelAttributes.Style then
RichEdit1.SelAttributes.Style := RichEdit1.SelAttributes.Style - [fsUnderline];
RichEdit1.Cursor:=crDefault;
RichEdit1.SelStart := SelStart1;
RichEdit1.SelLength := SelLenght1;
end;
end;
end;
So hoffe ich konnte dir ein wenig Helfen..bin mit meinem Latein echt am ende.. Am Besten due Schreibst dir eine eigene Kompo, die den Normalen SelStart und SelLenght überschreibt....
Nickel
"Lebe und denke nicht an morgen"
Zitat aus dem gleichnamigen Bollywoodfilm.
  Mit Zitat antworten Zitat
Benutzerbild von XXcD
XXcD

Registriert seit: 19. Sep 2006
581 Beiträge
 
Delphi 2007 Professional
 
#24

Re: Text in Richedit anklicken

  Alt 13. Jul 2009, 20:23
Also ich glaube am besten wäre das mit so ne art dummyzeichen die man vor und nach dem namen setzt.
Aber gibt es irgendwelche dummyzeichen die man nicht sieht und auch keinen effekt haben?
  Mit Zitat antworten Zitat
Blackheart

Registriert seit: 4. Mai 2005
846 Beiträge
 
Delphi 7 Enterprise
 
#25

Re: Text in Richedit anklicken

  Alt 13. Jul 2009, 21:28
Vieleicht solltest du dein Problem noch einmal besser schildern.
Wenn du einen Chat aufbaust und jetzt jemand schreibt oder antwortet wird zum Anfang der Name gesetzt den du ganz einfach mit Pos, Copy etc. herrausfinden kannst ist ja der erste String in der Zeile.
Blackheart
  Mit Zitat antworten Zitat
Benutzerbild von XXcD
XXcD

Registriert seit: 19. Sep 2006
581 Beiträge
 
Delphi 2007 Professional
 
#26

Re: Text in Richedit anklicken

  Alt 14. Jul 2009, 00:47
Ja es ist folgendermaßen ich möchte gerne in meinem Chat, dass der Benutzernamen anklickbar ist damit ich z.b. Eine Private Nachricht schicken kann.
Dies sollte möglichst universell sein damit ich auch mitten im Text Wörter benutzen kann die anklickbar sind.
Also wäre glaube ich die beste methode wenn ich zeichen vor und nach dem Namen setze die nicht sichtbar sind.
Also beispielsweise $Mustermann$ dann könnte ich ja herausfinden was name und was text ist.
Nur brauche ich da zeichen im Text die man nicht sieht.
Wenn das so möglich wäre, wäre das am besten.

Ich hoffe ich hab das so erklärt, dass man das versteht
  Mit Zitat antworten Zitat
Benutzerbild von cherry
cherry

Registriert seit: 14. Nov 2005
561 Beiträge
 
RAD-Studio 2009 Ent
 
#27

Re: Text in Richedit anklicken

  Alt 14. Jul 2009, 07:42
Hi

Ich hätte dir noch eine Alternative. Ich hab erst neulich auch ein kleines Chatprogramm realisiert und da habe ich auch ein wenig angestanden
bei der Textformatierung. Ich hab dann einfach THTMLViewer genommen, damit lässt sich alles was du willst sehr einfach realisieren!

Hier noch mein Beispiel: UDP Secure LAN Chat
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
  Mit Zitat antworten Zitat
Blackheart

Registriert seit: 4. Mai 2005
846 Beiträge
 
Delphi 7 Enterprise
 
#28

Re: Text in Richedit anklicken

  Alt 14. Jul 2009, 07:47
Hier ein Beispiel wie du wörter unter dem Cursor erkennen kannst, vieleicht hilft dir das ja schon etwas weiter.
Delphi-Quellcode:
procedure TForm1.RichEdit1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
Var pt:tpoint;
    i,iAnfang,iEnde:integer;
    s:string;
begin
  pt:= point(x,y);
  //wo steht der Cursor im memo?
  i := RichEdit1.Selstart;
  //anfang und ende suchen
  iAnfang := i;
  iEnde := i;
  while (iAnfang>0) and (not (RichEdit1.Text[iAnfang] in [' ','.',',',';',#13,#10]) ) do dec(ianfang);
  while (iEnde<length(RichEdit1.Text)) and (not (RichEdit1.Text[iEnde] in [' ','.',',',';',#13,#10]) ) do inc(iEnde);
  s:=copy(RichEdit1.Text,iAnfang+1,iEnde-iAnfang-1);
  Label.Caption := s;
end;
Blackheart
  Mit Zitat antworten Zitat
Benutzerbild von XXcD
XXcD

Registriert seit: 19. Sep 2006
581 Beiträge
 
Delphi 2007 Professional
 
#29

Re: Text in Richedit anklicken

  Alt 14. Jul 2009, 10:21
Ok ich werde mir das beides mal anschauen aber mit dem HTMLViewer das ist ne geniale idee.
Ich wußte garnicht, dass es so ne Kompo gibt, vielen Dank.
  Mit Zitat antworten Zitat
Benutzerbild von Lannes
Lannes

Registriert seit: 30. Jan 2005
Ort: Münster
745 Beiträge
 
Delphi 3 Professional
 
#30

Re: Text in Richedit anklicken

  Alt 14. Jul 2009, 10:54
Hallo,
Zitat von XXcD:
Nur brauche ich da zeichen im Text die man nicht sieht.
Wenn das so möglich wäre, wäre das am besten.
das ist möglich.

Dazu muss man die Unit RichEdit einbinden und TCharFormat2 verwenden.
Hier die zwei Routinen die Du dafür benötigst:
Delphi-Quellcode:
//selektierten Text verbergen
procedure SetHidden(RE: TRichEdit);
var CharFormat : TCharFormat2;
begin
  FillChar(CharFormat, SizeOf(CharFormat),0);
  CharFormat.cbSize := SizeOf(CharFormat);
  CharFormat.dwMask := CFM_HIDDEN;
  CharFormat.dwEffects := CFM_HIDDEN;
  SendMessage(RE.Handle, EM_SETCHARFORMAT,SCF_SELECTION,lparam(@CharFormat));
end;

//ist selektiertes Zeichen verborgen?
function GetHidden(RE: TRichEdit): Boolean;
var CharFormat : TCharFormat2;
begin
  FillChar(CharFormat, SizeOf(CharFormat),0);
  CharFormat.cbSize := SizeOf(CharFormat);
  CharFormat.dwMask := CFM_HIDDEN;
  SendMessage(RE.Handle, EM_GETCHARFORMAT,SCF_SELECTION,lparam(@CharFormat));
  Result := CharFormat.dwEffects and CFM_HIDDEN <> 0;
end;

Das Demo(Delphi 3) im Anhang zeigt das Verbergen von '#' und das Erkennen der verborgenen Zeichen.
Angehängte Dateien
Dateityp: zip demorichedithiddenchar_894.zip (112,2 KB, 10x aufgerufen)
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 17:40 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