![]() |
Denkanstoss - Memo und viele Zeichen
Hi,
ich werde noch Wuschig. Irgend wie komm ich ned drauf wie ich es am einfachsten Anstelle viele Chars einzeln an ein Memo anhänge. Meine Lösung ist viel zu langsam.
Delphi-Quellcode:
Die Menge der Zeichen kann bis zu 10 Mio betragen. Ein direktes schreiben ein eine Datei
l := 1;
memo1.Text := memo1.Text + format('%6.6s', [#32]); for y := 0 to High(a) do begin /// memo1.Text := memo1.Text + format('$%0.2x,', [ a[y] ]); // <--<<< /// inc(l); if l > 20 then // länge der Formatierung begin memo1.Text := memo1.Text + #13#10; memo1.Text := memo1.Text + format('%6.6s', [#32]); l := 1; end; if y mod 100 = 0 then begin application.ProcessMessages; Caption := format('%d of %d',[High(a), y]); end; end; memo1.EndUpdate; s := Memo1.Lines[memo1.Lines.Count - 1]; Delete(s, length(s), 1); Memo1.Lines[memo1.Lines.Count - 1] := s; memo1.Lines.Add(format(' ); // %d Bytes', [i])); möchte ich Vermeiden. :gruebel: |
Re: Denkanstoss - Memo und viele Zeichen
Hai turboPASCAL,
eine direkte Lösung habe ich um diese Uhrzeit nicht ;-) Aber Du solltest in jedem Fall vermeiden unnötig oft auf das Property Text zugreifen zu müssen. Dies wird bei jedem Zugriff neu zusammen gebaut wenn ich das noch richtig im Kopf habe. Arbeite also lieber mit einer lokalen Variablen und weise deren Inhalt erst am Ende deiner Funktion dem Property Text zu. |
Re: Denkanstoss - Memo und viele Zeichen
Zitat:
Zitat:
Ja ne, ist klar. ich hab es schon mit einem String versucht, derzeit guck ich mal ob es mit enem Memorystream besser bzw. schneller klappt. |
Re: Denkanstoss - Memo und viele Zeichen
Ich würde diesen Teil:
Delphi-Quellcode:
vielleicht so ändern :
///
memo1.Text := memo1.Text + format('$%0.2x,', [ a[y] ]); // <--<<< /// inc(l);
Delphi-Quellcode:
///
memo1.lines.append(format('$%0.2x,', [ a[y] ])); /// inc(l); |
Re: Denkanstoss - Memo und viele Zeichen
Lines.Append(); ist fasst das gleiche wie Lines.Add();. Ausserdem wird jeweils eine
neue Zeile erstellt wass ich nicht möchte. Die Formatierung soll/wird dann so aussehen:
Delphi-Quellcode:
;)
// Include Datei: "RGB_8BIT_TESTBMP.INC"
// Konvertiert von Datei: TESTBMP.BMP const RGB_8Bit_TESTBMP_Width = 12; RGB_8Bit_TESTBMP_Height = 12; RGB_8Bit_TESTBMP_ByteCount = 144; // 12 x 12 Pixel RGB_8Bit_TESTBMP : array [0..RGB_8Bit_TESTBMP_ByteCount-1] of Byte = ( $00,$FF,$FF,$00,$00,$00,$00,$00,$00,$FF,$FF,$00,$FF,$FF,$00,$FF, $FF,$FF,$FF,$FF,$00,$FF,$FF,$FF,$00,$FF,$FF,$00,$FF,$FF,$00,$FF, // [...] $FF,$00,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$00,$FF,$FF,$00,$FF,$FF, $FF,$FF,$00,$FF,$FF,$00,$FF,$FF,$FF,$00,$00,$FF,$FF,$FF,$00,$FF, $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$00,$F9,$FB,$FA, $FF,$07,$F8,$00,$00 ); // 144 Bytes |
Re: Denkanstoss - Memo und viele Zeichen
ungetestet, einfach nur hier so reingetippert:
Delphi-Quellcode:
var s: String;
y, l: Integer; begin Memo1.BeginUpdate; l := 0; s := StringOfChar(32, 6); for y:=Low(a) to High(a) do begin s := s + Format('$%0.2x', [a[y]]); Inc(l); if (l >= 20) or (y = High(a)) then begin Memo1.Lines.Add(s); l := 0; s := StringOfChar(32, 6); end if; end; Memo1.EndUpdate; end; |
Re: Denkanstoss - Memo und viele Zeichen
:gruebel: Stimmt, danke. Warum ist mir das nicht eingefallen ?
|
DP-Maintenance
Dieses Thema wurde von "MrSpock" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
Delphi Frage. |
Re: Denkanstoss - Memo und viele Zeichen
Hallo Matti,
du kannst die benötigte Zeit drastisch reduzieren, indem du mit einer temporären Stringliste arbeitest und deren Inhalt anschließend als Text in das Memo einfügst. Gruß Hawkeye |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:17 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