Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - falsche Deklaration
crossit - Sa 18.04.09 22:24
Titel: falsche Deklaration
hey leute also bin neu hier im forum und habe gleich mal ne frage warum zeigt er mir immer das die funktion einen ergebnistypen benötigt ( bei function Ttextfilename.gethasbeensaved : boolean;)
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98:
| unit ufilename;
interface TYPE TTextfilename= class(TObject) private FFilename: string; afilename : string; Fisdirty: boolean; gethasbeensaved : boolean; procedure setfilename(const Value: string); procedure setisdirty(const value: boolean); procedure Initialize; function getfilename: string; public constructor create; constructor createwithfilename(aFilename: string); function shouldsave : boolean; published property hasbeensaved : boolean read gethasbeensaved; property Filename : string read FFilename write setfilename; property isdirty : boolean read Fisdirty write setisdirty; end; implementation uses dialogs,controls; constructor TTextfilename.createwithfilename(afilename : string); begin inherited create; initialize; end; constructor TTextfilename.create; begin inherited create; initialize; Ffilename := aFilename; end;
function Ttextfilename.getfilename: string; begin
if ffilename = '' then begin result:= 'unbenannte Datei';
end else begin result := ffilename; end;
function Ttextfilename.gethasbeensaved: Boolean; begin result:= ffilename <> ''; end;
procedure TTextfilename.Initialize; begin Isdirty := true; ffilename := ''; end;
procedure TTextfilename.setfilename(const value : string); begin ffilename :=value; end; procedure TTextfilename.setisdirty(const value : boolean); begin Fisdirty:=value; end;
function ttextfilename.shouldsave : boolean; var temppromp : string; tempanswer : integer; begin result:= false; if isdirty then begin temppromp := 'Den Scheiß"'+filename +'"haste geändert. willste saven?'; tempanswer:= messagedlg(temppromp, mtconfirmation, [mbYes, mbNo, mbCancel], 0); if tempanswer = mrno then begin isdirty := false; end; Result:= tempanswer = mryes; end;
end;
end. |
Moderiert von
Christian S.: Topic aus Sonstiges (Delphi) verschoben am Sa 18.04.2009 um 23:54
GTA-Place - Sa 18.04.09 22:29
Ich formatiere mal einen Teil deines Sources, dann erledigt sich die Frage von allein:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| function TTextFileName.getFilename: String; begin if fFileName = '' then begin Result := 'unbenannte Datei'; end else begin Result := fFileName; end;
function TTextFileName.getHasBeenSaved: Boolean; begin Result := fFileName <> ''; end; |
Na, fällt dir auf was fehlt?
crossit - Sa 18.04.09 22:57
hmmm so auf die schnelll nicht-.-
jakobwenzel - Sa 18.04.09 23:02
Ich löse auf:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| function TTextFileName.getFilename: String; begin if fFileName = '' then begin Result := 'unbenannte Datei'; end else begin Result := fFileName; end; end; function TTextFileName.getHasBeenSaved: Boolean; begin Result := fFileName <> ''; end; |
crossit - Sa 18.04.09 23:23
ahhh stimmt gleich geändert danke!habe jedoch festgestellt, dasss
es trozdem angezeigt das bei dem wert function ttextfilename.gethasbeensaved: boolean; die deklination falsch ist welches ja mein hauptproblem war
SvenAbeln - So 19.04.09 00:00
Deine Klasse besitzt gar keine Funktion gethasbeensaved.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| TTextfilename= class(TObject) private FFilename: string; afilename : string; Fisdirty: boolean; function gethasbeensaved : boolean; procedure setfilename(const Value: string); |
Xentar - So 19.04.09 01:25
crossit hat folgendes geschrieben : |
ahhh stimmt gleich geändert danke!habe jedoch festgestellt, dasss
es trozdem angezeigt das bei dem wert function ttextfilename.gethasbeensaved: boolean; die deklination falsch ist welches ja mein hauptproblem war |
Das Ding heißt übrigens Deklaration.. abschreiben sollte man schon können :P
Edit: OK, ich hätte mir die Links von Christian ansehen sollen, sry.
crossit - So 19.04.09 01:50
| Zitat: |
Das Ding heißt übrigens Deklaration.. abschreiben sollte man schon können :P
Edit: OK, ich hätte mir die Links von Christian ansehen sollen, sry. |
keiner ist perfekt :wink: aber stimmt hast recht
nun noch meine letzte frage: wieso wird der dateiname den hier von '' nicht auf 'unbenannteDatei' geändert?? stimmt was in dem code nicht?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| function Ttextfilename.getfilename: string; begin
if ffilename = '' then begin result:= 'unbenannteDatei';
end else begin result := ffilename; end; end;
function Ttextfilename.getHasbeensaved: boolean; begin result:= ffilename <> ''; end;
procedure TTextfilename.Initialize; begin Isdirty := true; ffilename := ''; end; |
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| function ttextfilename.shouldsave : boolean; var temppromp : string; tempanswer : integer; begin result:= false; if isdirty then begin temppromp := 'Den Scheiß"'+ ffilename +'"haste geändert. willste saven?'; tempanswer:= messagedlg(temppromp, mtconfirmation, [mbYes, mbNo, mbCancel], 0); if tempanswer = mrno then begin isdirty := false; end; Result:= tempanswer = mryes; end; |
jaenicke - So 19.04.09 02:29
Wofür deklarierst du aFileName nochmal? Das sollte doch eigentlich der Parameter des Konstruktors sein. Aber fällt dir etwas auf?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| constructor TTextfilename.createwithfilename(afilename : string); begin inherited create; initialize; end;
constructor TTextfilename.create; begin inherited create; initialize; Ffilename := aFilename; end; |
In dem ersten Konstruktor übergibst du den Parameter, im zweiten verwendest du ihn... :shock:
Zum Problem: Setz doch einfach einen Haltepunkt auf die if-Abfrage und schau was passiert.
crossit - So 19.04.09 03:08
also hatte einen haltepunkt gesetzt jedoch hat sich nichts verändert
jaenicke - So 19.04.09 03:09
Naja, aber dort müsste das Programm dann ja ankommen, und dann kannst du schauen was passiert, wenn du schrittweise weiterlaufen lässt.
crossit - Mo 20.04.09 16:07
also hatte das mit dem haltepunkten die letzten 35 mins gemacht und den fehler nicht gefunden-.-
kann mir keiner nen anderen tip geben?
jaenicke - Mo 20.04.09 16:58
Dann zeig doch mal den soweit korrigierten Quelltext inkl. Verwendung, also dem Code, mit dem du das aufrufst.
crossit - Mo 20.04.09 17:20
ok also als erstes die mainform
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212: 213: 214: 215:
| unit frmmainform;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus, StdCtrls, ActnList, StdActns,ufilename, ImgList, ComCtrls, ToolWin;
type TMainform = class(TForm) MainMenu1: TMainMenu; bermich1: TMenuItem; aboutme1: TMenuItem; Datei1: TMenuItem; Exit1: TMenuItem; ActionList1: TActionList; Memo1: TMemo; FileOpen1: TFileOpen; N1: TMenuItem; ffnen1: TMenuItem; FileSaveAs1: TFileSaveAs; Speichernals1: TMenuItem; Speichern1: TMenuItem; saveaction: TAction; newAction1: TAction; neu1: TMenuItem; Bearbeitung1: TMenuItem; EditCut1: TEditCut; EditCopy1: TEditCopy; EditPaste1: TEditPaste; EditSelectAll1: TEditSelectAll; EditUndo1: TEditUndo; EditDelete1: TEditDelete; Ausschneiden1: TMenuItem; Kopieren1: TMenuItem; Lschen1: TMenuItem; Rckgngig1: TMenuItem; N2: TMenuItem; N3: TMenuItem; Allesmarkieren1: TMenuItem; SearchFind1: TSearchFind; SearchFindNext1: TSearchFindNext; SearchReplace1: TSearchReplace; SearchFindFirst1: TSearchFindFirst; Suchen1: TMenuItem; Weitersuchen1: TMenuItem; N4: TMenuItem; Ersetzen1: TMenuItem; ToolBar1: TToolBar; ToolButton1: TToolButton; ToolButton2: TToolButton; ToolButton3: TToolButton; ToolButton4: TToolButton; ToolButton5: TToolButton; ImageList1: TImageList; ToolButton6: TToolButton; ToolButton7: TToolButton; ToolButton8: TToolButton; ToolButton9: TToolButton; ToolButton10: TToolButton; ToolButton11: TToolButton; ToolButton12: TToolButton; ToolButton13: TToolButton; ToolButton14: TToolButton; Fo1: TMenuItem; Zeichenumbruch: TMenuItem; WordWrapAction: TAction; FontEdit1: TFontEdit; Schriftartwhlen1: TMenuItem; Action1: TAction; einfgenDatumtime1: TMenuItem; procedure Exit1Click(Sender: TObject); procedure aboutme1Click(Sender: TObject); procedure FileOpen1Accept(Sender: TObject); procedure Formcreate(Sender: TObject);
procedure Formdestroy(Sender: TObject); procedure Filesaveas1accept(Sender: TObject); procedure newaction1execute(Sender: TObject); procedure saveactionexecute(Sender: TObject); procedure Memo1Change(Sender: TObject); procedure WordWrapActionExecute(Sender: TObject); procedure FontEdit1Accept(Sender: TObject); procedure Action1Execute(Sender: TObject); private ffilename : TTextfilename; function savethefile: boolean; public end; var Mainform: TMainform; implementation
{$R *.dfm} uses frmabout;
procedure TMainform.aboutme1Click(Sender: TObject); begin aboutbox.ShowModal; end;
procedure TMainform.Action1Execute(Sender: TObject); begin memo1.SelText := datetimetostr (Now); end;
procedure TMainform.Exit1Click(Sender: TObject); begin if ffilename.shouldsave then begin if savethefile then ; memo1.Clear; ffilename.Clear; end else begin close; end; end;
procedure TMainform.FileOpen1Accept(Sender: TObject);
begin ffilename.Filename:=fileopen1.dialog.filename; if fileExists(ffilename.Filename) then begin memo1.lines.LoadFromFile(ffilename.Filename) end; Ffilename.isdirty:= false; end; procedure TMainform.Filesaveas1accept(Sender: TObject); begin ffilename.Filename := filesaveas1.Dialog.filename; ffilename.isdirty := false; memo1.Lines.SaveToFile(ffilename.filename); end; procedure TMainform.FontEdit1Accept(Sender: TObject); begin memo1.Font := fontedit1.dialog.Font; end;
procedure TMainform.Formcreate(Sender: TObject); begin Ffilename:= TTextfilename.create; end;
procedure TMainform.Formdestroy(Sender: TObject); begin ffilename.Free; end;
procedure TMainform.Memo1Change(Sender: TObject); begin ffilename.isdirty := true; end;
procedure TMainform.newaction1execute(Sender: TObject); begin if ffilename.shouldsave then begin if savethefile then ; memo1.Clear; ffilename.Clear; end else begin memo1.Clear; ffilename.Clear; end; end; procedure TMainform.saveactionexecute(Sender: TObject); begin memo1.Lines.SaveToFile(ffilename.Filename); end;
function tmainform.savethefile: boolean; var tempfilename : string;
begin result := false; if ffilename.hasbeensaved then begin memo1.Lines.SaveToFile(ffilename.filename); ffilename.isdirty := false; result := true; end else begin filesaveas1.execute ; tempfilename := filesaveas1.Dialog.FileName; if tempfilename <> '' then begin ffilename.Filename := tempfilename; memo1.Lines.SaveToFile(ffilename.Filename); result:= true; end; end; end; procedure TMainform.WordWrapActionExecute(Sender: TObject); begin memo1.WordWrap := not memo1.WordWrap; wordwrapaction.Checked := memo1.WordWrap; if memo1.WordWrap then begin memo1.ScrollBars := ssVertical; end else begin memo1.ScrollBars :=ssboth; end; end;
end. |
und hier dann die ufilename wo die sachen bestimmt sind
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102:
| unit ufilename;
interface TYPE TTextfilename= class(TObject) private FFilename: string; afilename : string; Fisdirty: boolean; procedure setfilename(const Value: string); procedure setisdirty(const value: boolean); procedure Initialize; function getfilename: string; function gethasbeensaved : boolean; public constructor create; procedure clear; constructor createwithfilename(aFilename: string); function shouldsave : boolean; published property hasbeensaved : boolean read gethasbeensaved; property Filename : string read FFilename write setfilename; property isdirty : boolean read Fisdirty write setisdirty; end; implementation uses dialogs,controls; constructor TTextfilename.createwithfilename(afilename : string); begin inherited create; initialize; end; constructor TTextfilename.create; begin inherited create; initialize; Ffilename := aFilename; end; procedure ttextfilename.clear; begin Initialize; end;
function Ttextfilename.getfilename: string; begin
if ffilename = '' then begin result:= 'unbenannteDatei';
end else begin result := ffilename; end; end;
function Ttextfilename.getHasbeensaved: boolean; begin result:= ffilename <> ''; end;
procedure TTextfilename.Initialize; begin Isdirty := true; ffilename := ''; end;
procedure TTextfilename.setfilename(const value : string); begin ffilename :=value; end; procedure TTextfilename.setisdirty(const value : boolean); begin Fisdirty:=value; end;
function ttextfilename.shouldsave : boolean; var temppromp : string; tempanswer : integer; begin result:= false; if isdirty then begin temppromp := 'Den Scheiß"'+ filename +'"haste geändert. willste saven?'; tempanswer:= messagedlg(temppromp, mtconfirmation, [mbYes, mbNo, mbCancel], 0); if tempanswer = mrno then begin isdirty := false; end; Result:= tempanswer = mryes; end;
end;
end. |
jaenicke - Mo 20.04.09 17:28
Du hast den von mir angesprochenen Fehler mit den Konstruktoren z.B.
nicht behoben... :roll:
jaenicke hat folgendes geschrieben : |
Wofür deklarierst du aFileName nochmal? Das sollte doch eigentlich der Parameter des Konstruktors sein. Aber fällt dir etwas auf? Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| constructor TTextfilename.createwithfilename(afilename : string); begin inherited create; initialize; end;
constructor TTextfilename.create; begin inherited create; initialize; Ffilename := aFilename; end; | In dem ersten Konstruktor übergibst du den Parameter, im zweiten verwendest du ihn... :shock: |
Yogu - Mo 20.04.09 18:51
crossit hat folgendes geschrieben : |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| function ttextfilename.shouldsave : boolean; var temppromp : string; tempanswer : integer; begin result:= false; if isdirty then begin temppromp := 'Den Scheiß"'+ ffilename +'"haste geändert. willste saven?'; tempanswer:= messagedlg(temppromp, mtconfirmation, [mbYes, mbNo, mbCancel], 0); if tempanswer = mrno then begin isdirty := false; end; Result:= tempanswer = mryes; end; | |
Du greifst ja auf das
Feld zu - das ist ja auch leer. Die Kontrolle erfolgt ja erst in der Funktion
getfilename:
crossit hat folgendes geschrieben : |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| function Ttextfilename.getfilename: string; begin
if ffilename = '' then begin result:= 'unbenannteDatei';
end else begin result := ffilename; end; end; | |
:arrow: verwende die Funktion anstatt des Feldes :idea:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!