Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Memo Nummerierung (https://www.delphipraxis.net/175677-memo-nummerierung.html)

Foxi1896 9. Jul 2013 10:42

Memo Nummerierung
 
Hey, kleine Frage.
Möchte immer wenn ich auf MenuItem4Click klicke neue Zeile dazufügen mit Laufender Nummerieung.

[DP]procedure TForm1.MenuItem4Click(Sender: TObject);

var i : Integer;

begin

Memo1.Lines.Add(
IntToStr(i+1) + chr(9) + Edit9.Text + chr(9) + Edit10.Text
+ chr(9) + chr(9) + Edit12.Text ) ;

end; [/DP]

DeddyH 9. Jul 2013 10:44

AW: Memo Nummerierung
 
Das wird mit einer lokalen Variablen aber nichts werden, da diese nach Abarbeitung der Methode ungültig ist. Du kannst nun entweder eine globale Variable oder ein privates Feld nehmen oder evtl. einfach auf die Zeilenanzahl des Memos zugreifen, das bleibt Dir überlassen.

p80286 9. Jul 2013 10:54

AW: Memo Nummerierung
 
Da i nicht initialisiert ist geht das wohl nicht, also was genau willst Du erreichen, worauf bezieht sich die Zeilennummer?
z.B. könnte es so gehen:

Delphi-Quellcode:
i:=Memo1.lines.count-1;
Memo1.Lines.Add(IntToStr(i+1) + chr(9) + Edit9.Text + chr(9) + Edit10.Text
                              + chr(9) + chr(9) + Edit12.Text ) ;
Gruß
K-H

Foxi1896 9. Jul 2013 11:03

AW: Memo Nummerierung
 
Ah so ähnlich hatte ich es auch schon mal.
Ein Fehler ist da jetzt noch ... Habe am Anfang überschrieften und Infos drinen ... und so fängt die Nummerierung bei 10 an. (könnte zwar -10 hinschreiben aber das wäre nicht so schön bei Änderungen)


@DeddyH:
globale Variable: inwiefern muss ich das machen?
privates Feld : ka wie das geht.
die Zeilenanzahl des Memos zugreifen: Ist ja jetzt bei dem vom p80286 der Fall. Nur halt das es jetzt bei 1 beginnen soll.

p80286 9. Jul 2013 11:07

AW: Memo Nummerierung
 
Unter umständen erkennt man (das Programm) wo die eigentlichen Daten beginnen, dann nimmst Diese Zeilennummer und ziehst sie von
Delphi-Quellcode:
.Count
ab?

Gruß
K-H

Foxi1896 9. Jul 2013 11:11

AW: Memo Nummerierung
 
so hab ich es jetzt gemacht ... aber geht es das er das von selber macht? bzw immer von 1 Anfängt? Und nicht nach der Zeile geht in der er sich befindet?

p80286 9. Jul 2013 11:18

AW: Memo Nummerierung
 
Zitat:

Zitat von Foxi1896 (Beitrag 1221213)
so hab ich es jetzt gemacht ... aber geht es das er das von selber macht? bzw immer von 1 Anfängt? Und nicht nach der Zeile geht in der er sich befindet?

Das verstehe ich nicht! könntest Du das vielleicht noch einmal erklären?
Gruß
K-H

Foxi1896 9. Jul 2013 11:22

AW: Memo Nummerierung
 
Delphi-Quellcode:
i:=Memo1.lines.count-11; //Hier jetzt Manuel 11 reingeschrieben
Memo1.Lines.Add(IntToStr(i+1) + chr(9) + Edit9.Text + chr(9) + Edit10.Text
                              + chr(9) + chr(9) + Edit12.Text ) ;
Aber geht das auch so das er selber weiß ab welcher Zeile es Anfängt.

p80286 9. Jul 2013 11:27

AW: Memo Nummerierung
 
Angenommen in Deinem Memo steht folgendes:

Überschrift 1
jetzt kommt
ganz viel Text
bis derr Speicher überläuft
und nun folgen Daten
:::
1)daten
2)daten


dann könntest Du folgendes machen:
Delphi-Quellcode:
....
i:=-1;
repeat inc(i,1) until i>Memo1.Lines.count-1 or pos(':::',Memo1.Lines[i])>0;
...
So als Idee....

Gruß
K-H

Foxi1896 9. Jul 2013 11:33

AW: Memo Nummerierung
 
Ja, genau das meine ich nur das er mir jetzt den Fehler schreibt: "boolean" expected "longint"

DeddyH 9. Jul 2013 12:09

AW: Memo Nummerierung
 
Das fehlen ja auch Klammern. Muss man denn jede Kleinigkeit vorkauen?

Foxi1896 9. Jul 2013 12:12

AW: Memo Nummerierung
 
i:=-1;
repeat inc(i,1) until (i>Memo1.Lines.count-1) or (pos(':::',Memo1.Lines[i])>0);

ok ... jetzt geht es aber es gebinnt immernoch bei 10 und nicht 1.

DeddyH 9. Jul 2013 12:19

AW: Memo Nummerierung
 
repeat-until erwartet eine Bool' sche Abbruchbedingung, will man mehrere davon verknüpfen, müssen diese (sofern sie sich aus einem Vergleich ergeben) einzeln eingeklammert werden.
Delphi-Quellcode:
until a = 1 //funktioniert
until a = 1 and b > 2 //funktioniert nicht
until (a = 1) and (b > 2) //so funktioniert es wieder

p80286 9. Jul 2013 12:29

AW: Memo Nummerierung
 
Zitat:

Zitat von DeddyH (Beitrag 1221231)
Das fehlen ja auch Klammern. Muss man denn jede Kleinigkeit vorkauen?

:oops::oops:
Zitat:

Zitat von Foxi1896 (Beitrag 1221234)
ok ... jetzt geht es aber es gebinnt immernoch bei 10 und nicht 1.

Dann mach doch
Delphi-Quellcode:
i:=Memo1.Lines-i;
Ob da jetzt für die richtige Zählung
Delphi-Quellcode:
+1
oder
Delphi-Quellcode:
-1
von Nöten ist mußt Du bitte selbst heraus finden.

Gruß
K-H

DeddyH 9. Jul 2013 12:34

AW: Memo Nummerierung
 
Man könnte auch das Memo Memo sein lassen und die Daten in einer eigenen Stringliste vorhalten, dann wird zumindest die Nummerierung einfacher. Dafür wird es dann ein wenig komplizierter, bei Änderungen das Memo zu aktualisieren. Letztendlich muss jeder für sich entscheiden, wie es für ihn besser zu handhaben ist.

Foxi1896 9. Jul 2013 12:43

AW: Memo Nummerierung
 
dann versteh ich jetzt nicht was das " pos(':::',Memo1.Lines[i])>0 " bringt?
Wenn ich es jetzt doch Manuel bei i>Memo1.Lines.count-1 einstellen muss? Und es dann wieder keine Änderungen annimmt? hää:?

DeddyH 9. Jul 2013 12:51

AW: Memo Nummerierung
 
Vielleicht ist mein Denkansatz von eben tatsächlich einfacher. Nehmen wir mal an, wir haben einen fixen Teil (Überschrift) und einen variablen Teil (eben Deine Daten). Dann könnte man es doch auch so machen (ungetestetes Beispiel):
Delphi-Quellcode:
procedure TDeinForm.ZeigePseudoDaten;
const
  FIXER_STRING = 'Dies ist die Überschrift' + sLineBreak + 'mit einer zweiten Zeile';
var
  Daten: TStringlist;
  i: integer;
begin
  Daten := TStringlist.Create;
  try
    for i := 1 to 10 do
      Daten.Add(IntToStr(i) + '. Datenzeile');
    Memo1.Lines.Text := FIXER_STRING + Daten.Text;
  finally
    Daten.Free;
  end;
end;

p80286 9. Jul 2013 12:54

AW: Memo Nummerierung
 
Zitat:

Zitat von DeddyH (Beitrag 1221243)
Man könnte auch das Memo Memo sein lassen und die Daten in einer eigenen Stringliste vorhalten, dann wird zumindest die Nummerierung einfacher. Dafür wird es dann ein wenig komplizierter, bei Änderungen das Memo zu aktualisieren. Letztendlich muss jeder für sich entscheiden, wie es für ihn besser zu handhaben ist.

Kommt mir irgendwie bekannt vor

Zitat:

Zitat von Foxi1896 (Beitrag 1221247)
dann versteh ich jetzt nicht was das " pos(':::',Memo1.Lines[i])>0 " bringt?
Wenn ich es jetzt doch Manuel bei i>Memo1.Lines.count-1 einstellen muss? Und es dann wieder keine Änderungen annimmt? hää:?

Also gaanz langsam...
Du hast eine Liste mit Strings. (ob Stringlist oder Memo ist jetzt mal egal)
Die letzte Zeile Deiner Überschriften/Vorwort/HeaderwasAuchImmer ist markiert, mit ßßß ._.>>>> oder was auch immer.
Diese Zeilennummer suchst Du.

LetzteZeile:=die Zeile in der der Marker ist

Dann ist ZeilenZählungDieAusgegeben wird:=Liste.Count-Letzte Zeile;

Hoffentlich hab ich mich jetzt nicht wieder vertan.

Gruß
K-H

@DeddyH
Ich vermute der Text ist schon vor dem Einfügen vorhanden......

Foxi1896 9. Jul 2013 13:13

AW: Memo Nummerierung
 
geht das auch wenn es in einer anderen Procedure ist?

DeddyH 9. Jul 2013 13:15

AW: Memo Nummerierung
 
Was geht in einer anderen Procedure?

Foxi1896 9. Jul 2013 13:59

AW: Memo Nummerierung
 
Argh... hab es jetzt doch ganz einfach hinbekommen ... mit globale Variable.

Danke für eure Mühe.

Werde das mit dem Position aber nochmal versuchen um es zu verstehen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:12 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