AGB  ·  Datenschutz  ·  Impressum  







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

text-string aus 2. klasse aufrufen

Ein Thema von danku · begonnen am 14. Apr 2007 · letzter Beitrag vom 16. Apr 2007
Antwort Antwort
Seite 3 von 3     123   
Benutzerbild von danku
danku

Registriert seit: 9. Apr 2006
Ort: 32-bit Adressbus
181 Beiträge
 
Delphi 7 Enterprise
 
#21

Re: text-string aus 2. klasse aufrufen

  Alt 15. Apr 2007, 12:48
der shortcutarray ist vielleicht von der bezeichnung her nicht treffend gewählt.

man übergibt der funktion den gewünschten wert (bspw. 1 und der rest wir halt ausgegeben)
unitlog.log(unitlog.getMemo,unitlog.getdiag,1, clblack);

das ist aber nicht das problem.

der fehler kommt bei der memoeigenschaft color.
Miniaturansicht angehängter Grafiken
fehler_128.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#22

Re: text-string aus 2. klasse aufrufen

  Alt 15. Apr 2007, 13:02
Der Fehler deutet darauf hin, dass tsbboxsender nicht instanziert ist.
Machs, wie ich es dir vorgeschlagen hat, und du wirst die Probleme nicht mehr haben. In deinem Code geht einfach nicht klar hervor, wann du auf welche memo Komponente zugreifst.
  Mit Zitat antworten Zitat
Benutzerbild von danku
danku

Registriert seit: 9. Apr 2006
Ort: 32-bit Adressbus
181 Beiträge
 
Delphi 7 Enterprise
 
#23

Re: text-string aus 2. klasse aufrufen

  Alt 16. Apr 2007, 15:59
Zitat von Jelly:
Ich hab das Gefühl, du hast das Konzept der OO Programmierung nicht ganz verstanden. Sinn ist es, dass Objekte eigenständig arbeiten sollen. In deinem Fall ist die Klasse TLoadSave. Und so wie es aussieht, soll die Texte in einem Memo wegloggen. Es macht dann keinen Sinn, bei jedem Aufruf deiner Log Methode das Memo mitzuübergeben. So Sachen macht man einmal, in deinem Fall würd ich es im Constructor machen. Und um bischen flexibel zu bleiben, würde ich mich nicht auf ein Memo beschränken, sondern würde im Constructor einfach eine TStrings Instanz übergeben.

Delphi-Quellcode:
unit uLoadSave;

interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls ;

type
  TLoadSave = class
  private
     FStringList: TStrings;
  public
     constructor Create (AStringList : TStrings) ; reintroduce ;
     property StringList : TStrings read FStringList write FStringList ;

     procedure Log (What : string) ;
  end;

implementation

{ TLoadSave }

constructor TLoadSave.Create(AStringList: TStrings);
begin
     inherited Create ;
     assert (assigned(AStringList) and (AStringList is TStrings),'Bitte StringList Objekt im Constructor übergeben') ;

     FStringList := AStringList ;
end;

procedure TLoadSave.Log(What: string);
begin
     FStringList.Add (What) ;
end;

end.
Der Aufruf erfolgt dann so:

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
     LS := TLoadSave (memo1.lines) ; // LS als Variable in deiner Form deklarieren
end;

procedure TForm1.Button1Click (Sender : TObject) ;
begin
    LS.Log ('Halleluja') ;
end ;
nimms mir nicht übel aber mit dem LS kann ich nichts anfangen. dieser dient doch als klassenbezeichner (punkt-notation) um damit die methoden aufzurufen. es gehört trotzdem noch get und set mit in die unit oder? bei procedure TLoad.Log(What: string); kommt eine EAccessViolation Meldung
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#24

Re: text-string aus 2. klasse aufrufen

  Alt 16. Apr 2007, 16:17
Zitat von danku:
nimms mir nicht übel aber mit dem LS kann ich nichts anfangen. dieser dient doch als klassenbezeichner (punkt-notation) um damit die methoden aufzurufen. es gehört trotzdem noch get und set mit in die unit oder? bei procedure TLoad.Log(What: string); kommt eine EAccessViolation Meldung
Verwechsle Klasse nicht mit Objekt=Instanz einer Klasse

Aber natürlich müsstest du den Code anpassen, damit deine Klasse auch vom OpenDialog Bescheid weiss. Würd ich ebenfalls entweder über den Konstruktor mit übergeben, oder im bestehenden Konstruktor eine eigenen TOpenDialog Instanz erzeugen. Ich tendiere zu letzterem, aber das ist wirklich Geschmackssache. Deshalb, weils jetzt wohl schneller so geht, doch erste Möglichkeit:

constructor Create (AStringList : TStrings; AOpenDialog : TOpenDialog) ; reintroduce ; und die dazu gehörende Implementierung:
Delphi-Quellcode:
constructor TLoadSave.Create(AStringList: TStrings);
begin
     inherited Create ;
     assert (assigned(AStringList) and (AStringList is TStrings),'Bitte StringList Objekt im Constructor übergeben') ;
     assert (assigned(AOpenDialog) and (AOpenDialog is TOpenDialog),'Bitte OpenDaialog Objekt im Constructor übergeben') ;


     FStringList := AStringList ;
     FOpenDialog := AOpenDialog ;
end;
und die erweiterte Log Methode:
Delphi-Quellcode:
procedure TLoadSave.Log(What: string);
    function shortcutarray(erlaeut:LongInt):string;
    var
      count:integer;
    begin
       count:= FOpenDialog.Files.Count;

       case erlaeut of
           1 : Result:= inttostr(count)+' Datei(en) geladen';
           2 : Result:= 'test22';
       end;
    end;


var
  log_dat:string;
  count,i:integer;
begin
    FStringList.lines.add('['+TimeToStr(now)+'] : '+ shortcutarray((erlaeuterung)));

    for i:=0 to FOpenDialog.files.count -1 do
    begin
           FStringList.lines.add(' -> '+ Extractfilename(FOpenDialog.files.Strings[i]));
    end;
end ;
Soll nun wirklich die Farbe mit in der Log Methode übergeben werden, so sollte eventuell wirklich anstatt einer TStringList ein TMemo im Konstruktor übergeben werden, und auch im restlichen Code daran angepasst werden.
  Mit Zitat antworten Zitat
Benutzerbild von danku
danku

Registriert seit: 9. Apr 2006
Ort: 32-bit Adressbus
181 Beiträge
 
Delphi 7 Enterprise
 
#25

Re: text-string aus 2. klasse aufrufen

  Alt 16. Apr 2007, 16:42
ja die farbe sollte mit übernommen werden.
muss alles in den konstruktor rein, was an die mainform übergeben wird?
das ist mir ein wenig konfus. in c# gefällt mir das ein wenig besser, da hab ich nicht soviel schreibarbeit
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#26

Re: text-string aus 2. klasse aufrufen

  Alt 16. Apr 2007, 21:04
Zitat von danku:
muss alles in den konstruktor rein, was an die mainform übergeben wird?
Nö, müssen nicht. Aber das ist eine Methode die sicherstellt, dass der Anwender nichts vergisst. Deine Klasse ist auf 2 Parameter angewiesen, um überhaupt arbeiten zu können: Ein OpenDialog und ein Memo. Also würd ichs in den Constructor packen. Das erspart dir in den restlichen Methoden das Prüfen, ob auch ein Memo und ein Opendialog zugewiesen ist.
Zitat von danku:
in c# gefällt mir das ein wenig besser, da hab ich nicht soviel schreibarbeit
Das musst Du mir erklären. Denn da funktioniert das genauso. Da hast du auch constructor und Methoden, und properties die du mit setter- und getter Methoden ausrüsten kannst. Was erspart dir da Tipparbeit.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 05:06 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