Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Tmemo height dynamisch an text anpassen (https://www.delphipraxis.net/153452-tmemo-height-dynamisch-text-anpassen.html)

himitsu 4. Aug 2010 09:31

AW: Tmemo height dynamisch an text anpassen
 
Ich hätt wohl einfach einen TWebBrowser verwendet und dieses über eine HTML-Tabelle gelöst. :angle2:

H3llsing 4. Aug 2010 09:37

AW: Tmemo height dynamisch an text anpassen
 
Erstellungsreihenfolge siehe Anhang, die beiden Bilder.
Die panels schieben sich dann nach oben komischer weise.

Zu der höhe des Panels, ich habe versucht mit der Funktion die Höhe des Panels entsprechend der länge des memotextes zu berechnen, aber irgendwo hakt es.
Ich möchte ja keien Scrollbars verwenden ;)

@himitsu
joar das wäre natürlich auch ne Lösung, und ich glaube ich werds auch direkt so ausprobieren :)

himitsu 4. Aug 2010 09:55

AW: Tmemo height dynamisch an text anpassen
 
Delphi-Quellcode:
//Memo1.ScrollBars := ssNone; // im OI
//Memo1.WordWrap := True;

procedure TForm5.Memo1Change(Sender: TObject);
var
  S: String;
  i: Integer;
begin
  S := Memo1.Text;
  if (S = '') or (Copy(S, Length(S))[1] in [#13, #10]) then i := 1 else i := 0;
  Memo1.ClientHeight := Canvas.TextHeight('X') * (Memo1.Lines.Count + i) + 3;
end;
oder
Delphi-Quellcode:
procedure TForm5.Memo1Change(Sender: TObject);
var
  S: String;
  i: Integer;
begin
  S := Memo1.Text;
  if (S <> '') and (Copy(S, Length(S))[1] in [#13, #10]) then i := 1 else i := 0;
  Memo1.ClientHeight := Canvas.TextHeight('X') * Max(Memo1.Lines.Count + i, 1) + 3;
end;
+3 = irgendein krummer und nicht näher beschreibbarer Erfahrungswert :roll:
i = da in .Lines eine leere Zeile am Ende nicht mitgezählt wird
.Lines enthält auch die virtuellen Zeilenumbrüche (blöderweise, aber hier isses mal praktisch)

das Form.Canvas hatte ich jetzt nur genommen, da ich ja irgendein Canvas brauchte und meine Testform zufällig die selbe Schriftart hatte, wie das Memo (das kann auch irgendein anderes Canvas sein und notfalls auch ein selbsterstelltes, welchem der Font des Memos zugewiesen wurde)

bei so vielen Memos würde ich statt Memo1 eher TMemo(Sender) verwenden und allen Memos die selbe Ereignisprozedur spendieren.

Die Höhe ( Canvas.TextHeight('X') ) könnte man auch nur einmal am Anfang berechnen und in einer Variable speichern.

H3llsing 4. Aug 2010 10:38

AW: Tmemo height dynamisch an text anpassen
 
Ok Vielen dank an alle.
Ich hab mich nun für die TWebbrowser komponente entschieden, dann werd ich gleich noch jquery mit einbaun und dann sieht das ganze auch nett aus =)
nur leider nicht schön da ich für jeden Benutzer ein eigenes Temp.html anlegen muss, wo der Browser hinnavigiert.
aber bei 14 usern geht das gaze schon.

Ich werd später nochmal mein Code posten für die, die es interessiert ;)

himitsu 4. Aug 2010 11:06

AW: Tmemo height dynamisch an text anpassen
 
Im Forum finden sich etliche Beispiele, wie man den HTML-Code direkt an den TWebBrowser übergeben kann (anstatt zu eine HTML-Datei zu navigieren)

CSS, Images und Co. kann man inline in den HTML-Code einbetten, so benötigt man auch dafür keine externe Datei.
Irgendwo hatte ich auch mal die Link-Definition, um externe Dateien (CSS, Bilder usw.) auch vom System aus den Resourcen einer EXE/DLL laden zu lassen.

H3llsing 4. Aug 2010 14:38

AW: Tmemo height dynamisch an text anpassen
 
Liste der Anhänge anzeigen (Anzahl: 1)
vielen dank, werd ich mir später nochmal anschauen mit dem direkten senden.

hier ist vorerst meine Lösung, die ich nochmal überarbeiten werde sobald ich zeit habe =)
Delphi-Quellcode:
 try
    Mylist := Tstringlist.Create;
    Mylist.LoadFromFile(ExtractFilePath(ParamStr(0))+'html/anfang.html');
    for i := 0 to length(ar_content)-1  do
    begin

      try
        MYBeitrag := Tstringlist.Create;
        MYBeitrag.LoadFromFile(ExtractFilePath(ParamStr(0))+'html/Beitrag.html');
        if FormatDateTime('dd.mm.yyyy',now) = FormatDateTime('dd.mm.yyyy',ar_content[i].datum) then
           header := '#'+intToStr(i+1)+' von '+ar_content[i].ersteller+' um <b>'+FormatDateTime('HH:MM:ss',ar_content[i].datum)+'</b> geschrieben'
        else
           header := '#'+intToStr(i+1)+' von '+ar_content[i].ersteller+' um <b>'+FormatDateTime('dd.mm.yyyy HH:MM:ss',ar_content[i].datum)+'</b> geschrieben';

        ar_content[i].content := StringReplace(ar_content[i].content,#10#13,'<br>',[rfReplaceAll,rfIgnoreCase]);
        ar_content[i].content := StringReplace(ar_content[i].content,#10,'<br>',[rfReplaceAll,rfIgnoreCase]);

        MYBeitrag.Text := StringReplace(MYBeitrag.Text,'[header]',header,[rfReplaceAll,rfIgnoreCase]);
        MYBeitrag.Text := StringReplace(MYBeitrag.Text,'[nr]',intToStr(i+1),[rfReplaceAll,rfIgnoreCase]);
        MYBeitrag.Text := StringReplace(MYBeitrag.Text,'[content]',trim(ar_content[i].content),[rfReplaceAll,rfIgnoreCase]);


        MYlist.Add(trim(MYBeitrag.Text));
      finally
        MYBeitrag.Free;
      end;


    end;
    Mylist.Add('</table></body></html>');
    mylist.SaveToFile(ExtractFilePath(ParamStr(0))+'html/'+Benutzer+'temp.html');
    frmAnfrage.WebBrowser1.Navigate(ExtractFilePath(ParamStr(0))+'html/'+Benutzer+'temp.html');
  finally
    Mylist.Free;
  end;
und hier noch ein kleiner screen
Anhang 31791


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:18 Uhr.
Seite 2 von 2     12   

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