För att göra en ångra funktion måste du använda Arrays! Vilket inte jag vet riktigt hur man använder 
------------------
<!-- ALPHA II -->
UIN: 58287913 - för alla!
Programmeringur Programmering - Övrigt
14 svar · 539 visningar · startad av Alvar s
http://user.tninet.se/~xkk718a/richedit.zip
Håller just nu på med textprogrammet men nu kommer jag inte längre
Behöver hjälp med följande saker:
1: Oändlig undo/redo
2: Infogning av bild, dvs: ett kommando som gör att man kan infoga en bild..
3: Fullständig printer... Använder en exempelfil från borland där printer är begränsat 
4: Printer Setup kommando, nybörjare på det här 
5: Förhandsgransknings kommando 
6: Teckensnitten ser inte lika ut som i tex: word, beror det på delphi? Går det kanske att fixa på nåt sätt??
Ganska mycket begärt men hoppas nån vill fixa det
Om ni fixar npt, kan ni posta en url till det modifierade programmet?? 
[Redigerat av Alvar s den 08 jun 2000]
För att göra en ångra funktion måste du använda Arrays! Vilket inte jag vet riktigt hur man använder 
------------------
<!-- ALPHA II -->
UIN: 58287913 - för alla!
Du måste inte använda Arrays.
Jag skulle använt länkade listor för att hålla reda på ändringar i texten/typsnitt och sånt. Helst en dubbellänkad lista men det kan vara knepigt att fixa om man inte är riktigt hemma på det.
Dynamiska arrays går bra men det är snyggare med listor.
Bygg upp en klass med olika parametrar på ändringar som t.ex. stil,typsnitt,tecken osv. allt du vill kunna undo. Sen får du ha två listor en för undo en för redo, allting du undo:ar flyttar du till redo listan och tvärtom.
Till Alpha II: Om du inte riktigt vet hur man ska göra är det inte bra att bara kläcka ur sig något.
------------------
-------------------
http://winne.home.dhs.org
Jag fattar ingenting 
Kan du modifiera filen jag nämnde i mitt första inlägg och posta en url?? Jag är verkligen nybörjare på det här så jag kommer nog inte att fatta nåt utan en exempel fil 
[Redigerat av Alvar s den 09 jun 2000]
Ska fixa några exempel på länkade listor, men det kan ta några dagar så...
------------------
-------------------
http://winne.home.dhs.org
Jag vet hur arrays funkar men inte i Delphi!!!!!!
------------------
<!-- ALPHA II -->
UIN: 58287913
kan du inte "fuska" lite och använda TMemo funktioner så mycket som möjligt?
Svar till Alpha II:
Det finns många bra böcker t.ex.
"Delphi 2 programmering" och
"Programering i Delphi"
m.m.
kolla på ditt bibliotek!
Här är ett litet enkelt exempel på oändlig undo-redo funktion för en richedit komponent.
Snabbt ihopslängt men det fungerar, har man stora texter bör man fundera ut ett smartare sätt som inte kräver så mycket minne eller kanske begränsa sig till 10 steg undo eller nåt.
På formuläret ska det finns två knappar och en richedit. Glöm inte att länka eventen från formen, ska inte vara så svårt att få det att funka.
---------------------------------------
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ComCtrls;
type
TForm1 = class(TForm)
RichEdit1: TRichEdit;
Button1: TButton;
Button2: TButton;
procedure RichEdit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button1Click(Sender: TObject);
private
public
end;
var
Form1: TForm1;
Undo,Redo : TList;
implementation
{$R *.DFM}
procedure TForm1.RichEdit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
var temp : TRichEdit;
begin
temp:=TRichEdit.Create(self);
temp.Text:=Richedit1.text;
Undo.Add(temp);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Undo:=TList.Create;
Redo:=TList.Create;
end;
procedure TForm1.Button2Click(Sender: TObject); // UNDO
var temp,temp2 : TRichEdit;
begin
If undo.count>0 then
begin
temp:=undo.items[undo.count-1];
// spara undan nuvarande text för "redo"
temp2:=TRichEdit.Create(self);
temp2.text:=richedit1.text;
redo.add(temp2);
// gör "undo" och radera ur listan
richedit1.text:=temp.text;
undo.delete(undo.count-1);
end;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var i : integer;
begin
// städa upp efter
For i:=undo.count-1 downto 0 do undo.Delete(undo.count-1);
For i:=redo.count-1 downto 0 do redo.Delete(redo.count-1);
Undo.Free;
Redo.Free;
end;
procedure TForm1.Button1Click(Sender: TObject); // REDO
var temp,temp2 : TRichEdit;
begin
If redo.count>0 then
begin
temp:=redo.items[redo.count-1];
// spara undan nuvarande text för "undo"
temp2:=TRichEdit.Create(self);
temp2.text:=richedit1.text;
undo.add(temp2);
// gör "undo" och radera ur listan
richedit1.text:=temp.text;
redo.delete(redo.count-1);
end;
end;
end.
---------------------------------------
Det finns säkert en massa andra bättre sätt att lösa det här på och med vanliga arrays går det inte att få oändlig undo.
Hoppas det hjälper...
------------------
-------------------
http://winne.home.dhs.org
Finns ingen anledning till att använda
dynamiska arrays här. Om man optimerar mitt exempel ovan lite räcker det utmärkt. Det är ju en dynamisk lösning då den endast begränas av tillgängligt minne i Windows. När man programmerar objektoriterat i Delphi behövs inte arrays, det blir bättre utan.
------------------
-------------------
http://winne.home.dhs.org
Hyperlänkar finns det redan färdiga
free-ware komponenter som fixar.
Kolla på www.torry.ru eller Delphi Super Page.
-------------------
winne.net
[Redigerat av WiNNe den 29 jun 2000]
ShellExecute(Application.Handle, nil, 'http://www.sida.se'), nil, nil, SW_SHOWMAXIMIZED);
du kan ochså använda mailto!
------------------
Alpha II
-Glad midsommar! :)