AGB  ·  Datenschutz  ·  Impressum  







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

Memo zeichen pro zeile

Ein Thema von Mystery · begonnen am 15. Dez 2011 · letzter Beitrag vom 16. Dez 2011
Antwort Antwort
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.669 Beiträge
 
Delphi 12 Athens
 
#1

AW: Memo zeichen pro zeile

  Alt 15. Dez 2011, 18:59
Wenn man allerdings lediglich ermitteln möchte, wie oft derselbe String in eine Zeile passt, könnte es so klappen (Fehler vorbehalten):
Delphi-Quellcode:
function GetStringCountPerLine(Memo: TMemo; const aString: string): integer;
var
  tempDC: hDC;
  cv: TCanvas;
  NeededWidth, Margins, XOffset: integer;
begin
  Result := -1;
  if Assigned(Memo) then
    begin
      tempDC := CreateCompatibleDC(0);
      if tempDC <> 0 then
        try
          cv := TCanvas.Create;
          try
            cv.Handle := tempDC;
            cv.Font.Assign(Memo.Font);
            NeededWidth := cv.TextWidth(aString);
            Margins := SendMessage(Memo.Handle, EM_GETMARGINS, 0, 0);
            XOffset := (Margins shr 16) + (Margins and $0000FFFF);
            if NeededWidth <> 0 then
              Result := (Memo.ClientWidth - XOffset) div NeededWidth
            else
              Result := 0;
          finally
            cv.Free;
          end;
        finally
          DeleteDC(tempDC);
        end;
    end;
end;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Mystery

Registriert seit: 26. Nov 2011
20 Beiträge
 
#2

AW: Memo zeichen pro zeile

  Alt 15. Dez 2011, 19:57
Soweit so gut:

Habe Schrift bei der alles gleich groß geschrieben wird. Außerdem Code der genau die Zeile füllt nicht mehr nicht weniger.

Was leider noch fehlt:

ich möchte wenn die zeile 1 gefüllt ist, dass der geschriebene Text, also zeile 1 im memo zu zeile 2 wird, also zeile 1 wieder frei wird.

wenn zeile 1 erneut gefüllt wurde soll zeile 1 zu zwei werden und zwei zu 3 usw. bis irgendwann zeile ca 15 nicht mehr auf den bildschirm passt.
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#3

AW: Memo zeichen pro zeile

  Alt 15. Dez 2011, 20:03
Delphi-Quellcode:
var
 i:Integer;
begin
  for i := 2 to 10 do
    begin
    memo1.Lines.Insert(0,'');
    Memo1.lines[0] := Format('%d. Zeile',[i]);
    end;
end;
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Mystery

Registriert seit: 26. Nov 2011
20 Beiträge
 
#4

AW: Memo zeichen pro zeile

  Alt 15. Dez 2011, 20:13
DANKE *_* werds mal probieren
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.751 Beiträge
 
Delphi 12 Athens
 
#5

AW: Memo zeichen pro zeile

  Alt 15. Dez 2011, 20:17
Wenn dir eigentlich alles egal ist, dann setze WordWrap auf True und füge deinen Text immer am Anfang ein.
Den rest macht das Memo alleine.

Delphi-Quellcode:
// S = dein neuer hinzuzufügender Text
Memo1.SelStart := 0;
Memo1.SelText := S + ' ';
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (15. Dez 2011 um 20:20 Uhr)
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#6

AW: Memo zeichen pro zeile

  Alt 16. Dez 2011, 06:55
Ausprobieren:
Delphi-Quellcode:
Function WieOftEinStringInEinMemoPasst (memo : TMemo; einString : String) : Integer;
Var
  text : String;

begin
  memo.WordWrap := true;
  memo.Lines.BeginUpdate;
  text := '';
  Try
    repeat
      inc(Result);
      text := text + einString;
      memo.Lines.Text := text;
    until memo.Lines.Count = 2;
    Dec (Result);
  finally
    memo.Lines.EndUpdate;
  end
end;
Andere Lösungen vertun sich manchmal um 1.

Übrigens würde ich statt dem GetDC Gedöns ein TControlCanvas nehmen. Ist einfacher.
  Mit Zitat antworten Zitat
Mystery

Registriert seit: 26. Nov 2011
20 Beiträge
 
#7

AW: Memo zeichen pro zeile

  Alt 16. Dez 2011, 12:50
Das klappt alles ganz gut

Letzte Frage, dann bin ich fertig:
//anders gesagt das Programm ist fertig, will nur ein etwas anderes schreiben jetzt

Habe wieder ein canvas
dann 2 integer variablen a und b

a:=random(screen.width);
b:=random(screen.height);


Außerdem eine procedure
in meiner procedure zeichen(canv:Tcanvas ; farbe:Tcolor);
begin
with canv do begin
moveto(a,b);
//und hier soll er dann an der stelle (a,b) eine "1" schreiben..
kann man mit einem canvas zahlen wie 1 oder null an bestimmte stekllen auf das formular schreiben?
wenn ja wie sieht der befehl aus?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.669 Beiträge
 
Delphi 12 Athens
 
#8

AW: Memo zeichen pro zeile

  Alt 16. Dez 2011, 12:57
Delphi-Referenz durchsuchenTCanvas.TextOut
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  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 23:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz