AGB  ·  Datenschutz  ·  Impressum  







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

Logisches problem

Ein Thema von SaFu · begonnen am 27. Jan 2007 · letzter Beitrag vom 28. Jan 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von SaFu
SaFu

Registriert seit: 8. Nov 2006
1.360 Beiträge
 
Delphi 10.3 Rio
 
#1

Logisches problem

  Alt 27. Jan 2007, 13:59
Hallo

Hab gerade ein Problem und komm einfach nicht drauf.

Und zwar bei meinen Abfragen hier unten.
Mein Problem habe ich mit der Combobox4, wenn der Name in den Items vorhanden ist soll der eingebene Name nicht in die Items übernommen werden und es soll bei der 1. weitergehen und wenn der name nicht vorhanden ist soll er übernommen werden und es soll ebenfalls bei der 1.weitergehen
Kann mir da mal jemand helfen habe gerade ein Denk Problen

Delphi-Quellcode:

procedure TForm7.Button2Click(Sender: TObject);
var x,y:integer;
begin
if ComboBox4.Text <> 'then
 begin
   if ComboBox3.Items.IndexOf(ComboBox4.text)> -1 Then
  begin
   Application.MessageBox(' Vertretungsplan Existiert ','Speicherinformation',48);
     begin // bis hierhin funkioniert es wunderbar
      if not ComboBox4.Items.IndexOf(ComboBox4.Text)> -1 Then
        begin
         Combobox4.Items.Add(ComboBox4.Text);
        end;
         end
         else
         begin //1.
          Combobox3.Items.Add(ComboBox4.Text);// Text in die ComboBox3 List übergeben
          Vertrpl:= TStringlist.Create; // Stringliste erzeugen
          Vertrpl.Add(IntToStr(StringGrid1.Colcount));
          Vertrpl.Add(IntToStr(StringGrid1.Rowcount));
          for x:= 0 to StringGrid1.ColCount-1 do
          for y:= 0 to StringGrid1.RowCount-1 do
          Vertrpl.Add(StringGrid1.Cells[x,y]);
          for x:= 0 to StringGrid1.ColCount-1 do
          Vertrpl.Add(IntToStr(StringGrid1.ColWidths[x]));
          for x:= 0 to StringGrid1.RowCount-1 do
          Vertrpl.Add(IntToStr(StringGrid1.RowHeights[x]));
          Vertrpl.Add(IntToStr(StringGrid1.Clientwidth));
          Vertrpl.Add(IntToStr(StringGrid1.Clientheight));
          Vertrpl.Add(IntToStr(Ord(StringGrid1.ScrollBars)));
          plan:= ExtractFilePath(ParamStr(0))+'Vertretungspläne\'+ ComboBox4.Text +'.txt';
          Vertrpl.SaveToFile(plan);
          Showmessage('Datei wurde in:' + sLineBreak + plan + ' gespeichert');
          Vertrpl.Free;
         end;
          begin
           lehrerl:= ExtractFilePath(ParamStr(0)) +'\Lehrer Liste\'+ 'liste.txt';
           ComboBox3.Items.SaveToFile(lehrerl);
           Form8.ListBox1.Clear;
           lehrerl2:= ExtractFilePath(ParamStr(0)) +'\Lehrer Liste\'+ 'alleLehrer.txt';
           Combobox4.Items.SaveToFile(lehrerl2);
           lehrerl:= ExtractFilePath(ParamStr(0)) +'\Lehrer Liste\'+ 'liste.txt';
           Form8.ListBox1.Items.LoadFromFile(lehrerl);
           Button7.click;
          end;
          end;
        end
     else
    Application.MessageBox('Bitte Name eingeben','Speicherinformation',48);
end;
Danke sascha
"... Wie gesagt, die Nutzer von 10, 12, 14 Zoll Display's werden deine Seite nicht in voller Pracht sehen können, ...

Surft Ihr mit dem Taschenrechner?"
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#2

Re: Logisches problem

  Alt 27. Jan 2007, 14:13
Hallo Sascha,

ich weigere mich, so einen Quelltext zu untersuchen. Korrigiere doch bitte alle Einrückungen, sodass jedes begin am Anfang eines Teilstücks steht, der darin enthaltene Text exakt 2 Zeichen eingerückt ist und jedes end exakt unter dem dazugehörigen begin steht. Genauso sollten alle if-then-else sauber positioniert werden.

Vielleicht fällt Dir dann ja selbst schon ein Fehler auf. Jürgen
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#3

Re: Logisches problem

  Alt 27. Jan 2007, 14:19
Zitat von Jürgen Thomas:
Hallo Sascha,

ich weigere mich, so einen Quelltext zu untersuchen. Korrigiere doch bitte alle Einrückungen, sodass jedes begin am Anfang eines Teilstücks steht, der darin enthaltene Text exakt 2 Zeichen eingerückt ist und jedes end exakt unter dem dazugehörigen begin steht. Genauso sollten alle if-then-else sauber positioniert werden.

Vielleicht fällt Dir dann ja selbst schon ein Fehler auf. Jürgen


...wie wäre es damit die Komponenten richtig zu benennen ?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Logisches problem

  Alt 27. Jan 2007, 14:22
Das End an Zeile 13 scheint überflüssig zu sein.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von SaFu
SaFu

Registriert seit: 8. Nov 2006
1.360 Beiträge
 
Delphi 10.3 Rio
 
#5

Re: Logisches problem

  Alt 27. Jan 2007, 14:23
wie wäre es damit die Komponenten richtig zu benennen ? Was meinst du damit
"... Wie gesagt, die Nutzer von 10, 12, 14 Zoll Display's werden deine Seite nicht in voller Pracht sehen können, ...

Surft Ihr mit dem Taschenrechner?"
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#6

Re: Logisches problem

  Alt 27. Jan 2007, 14:23
Zitat von fuknersascha:
Hab gerade ein Problem und komm einfach nicht drauf.
Hi,
das eigentliche Problem ist kein Logisches! Sorry, aber ich glaube dein eigentliches Problem ist deine Code-Formatierung. Die solltest Du mal ganz dringend überdenken! Sehe ich das richtig, dass Du einzelne begin end; Blöcke verwendest, die nicht weiter zu einer Bedingung/Strucktur gehören? Warum?
Dann solltest Du auch tunlichst die begins und ends korrekt einrücken. An sich solltest Du die 1. auch ruhig in eine eigene Prozedur auslagern. Erhöht einfach die Lesbarkeit!

Ja, für die Lesbarkeit solltest Du immer Einiges tun! Gute Lesbarkeit hilft Fehler zu vermeiden und sollten doch welche drin sein, findest Du die leichter. Form7, Button2, ComboBox4, ... keine guten Namen.

Versuche es mal so:
Delphi-Quellcode:
procedure TForm7.Button2Click(Sender: TObject);
var x,y:integer;
begin
  if ComboBox4.Text <> 'then
   begin
     if ComboBox3.Items.IndexOf(ComboBox4.text)> -1 Then
     begin
       Application.MessageBox(' Vertretungsplan Existiert ','Speicherinformation',48);

       if not ComboBox4.Items.IndexOf(ComboBox4.Text) > -1 Then
       begin
         Combobox4.Items.Add(ComboBox4.Text);
       end; // if not ComboBox4.Items.IndexOf(ComboBox4.Text) > -1

       //1.
       Combobox3.Items.Add(ComboBox4.Text);// Text in die ComboBox3 List übergeben
       Vertrpl:= TStringlist.Create; // Stringliste erzeugen
       Vertrpl.Add(IntToStr(StringGrid1.Colcount));
       Vertrpl.Add(IntToStr(StringGrid1.Rowcount));
       
       for x:= 0 to StringGrid1.ColCount-1 do
       begin
         for y:= 0 to StringGrid1.RowCount-1 do
         begin
           Vertrpl.Add(StringGrid1.Cells[x,y]);
         end; // for y:= 0 to StringGrid1.RowCount-1

         Vertrpl.Add(IntToStr(StringGrid1.ColWidths[x]));
         Vertrpl.Add(IntToStr(StringGrid1.RowHeights[x]));
       end; // for x:= 0 to StringGrid1.ColCount-1
          
       Vertrpl.Add(IntToStr(StringGrid1.Clientwidth));
       Vertrpl.Add(IntToStr(StringGrid1.Clientheight));
       Vertrpl.Add(IntToStr(Ord(StringGrid1.ScrollBars)));
       plan:= ExtractFilePath(ParamStr(0))+'Vertretungspläne\'+ ComboBox4.Text +'.txt';
       Vertrpl.SaveToFile(plan);
       Showmessage('Datei wurde in:' + sLineBreak + plan + ' gespeichert');
       Vertrpl.Free;
                   
       lehrerl:= ExtractFilePath(ParamStr(0)) +'\Lehrer Liste\'+ 'liste.txt';
       ComboBox3.Items.SaveToFile(lehrerl);
       Form8.ListBox1.Clear;
       lehrerl2:= ExtractFilePath(ParamStr(0)) +'\Lehrer Liste\'+ 'alleLehrer.txt';
       Combobox4.Items.SaveToFile(lehrerl2);
       lehrerl:= ExtractFilePath(ParamStr(0)) +'\Lehrer Liste\'+ 'liste.txt';
       Form8.ListBox1.Items.LoadFromFile(lehrerl);
       Button7.click;
     end; // if ComboBox3.Items.IndexOf(ComboBox4.text)> -1
  end // if ComboBox4.Text <> ''

  else
  begin
    Application.MessageBox('Bitte Name eingeben','Speicherinformation',48);
  end;
end;
Ich hoffe Du siehst hier schon einen Fortschritt in der Lesbarkeit. Das ist aber nur ein Anfang! Du solltest wie gesagt noch mehr kleine Prozeduren (mit sprechendem Namen!) einführen, so dass man schnell siehst, was genau gemacht wird.

Gruß Der Unwissende

[edit]
Wo war der rote Kasten?!
[/edit]
  Mit Zitat antworten Zitat
Benutzerbild von SaFu
SaFu

Registriert seit: 8. Nov 2006
1.360 Beiträge
 
Delphi 10.3 Rio
 
#7

Re: Logisches problem

  Alt 27. Jan 2007, 14:30
Danke für diesen Tip.

Also muss euch mal sagen das ich es gut finde das ihr mir diese Tips gibt. daraus Kann man nur lernen. Aber das problem liegt einfach daran das ich:

1. Noch nicht so gut bin in Programmierung ( mach das erst seit 1 jahr)
2. Mir das nie richtig gezeigt wurde

Deshalb bin ich froh über jeden Tip denn ich bekomme. mir ist das ja auchunangenehm.

ich bitte euch etwas rücksicht zunehmen Danke

Gruss Sascha

P.S. man erkent einen Grossen Unterschied
"... Wie gesagt, die Nutzer von 10, 12, 14 Zoll Display's werden deine Seite nicht in voller Pracht sehen können, ...

Surft Ihr mit dem Taschenrechner?"
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: Logisches problem

  Alt 27. Jan 2007, 14:36
Hallo Sascha,

das hier sieht seltsam aus:

Delphi-Quellcode:
// ...
      if not ComboBox4.Items.IndexOf(ComboBox4.Text)> -1 Then
        begin
         Combobox4.Items.Add(ComboBox4.Text);
        end;
// ...
So wird ein Eintrag nur dann in die Liste aufgenommen, wenn er bereits in der Liste ist. Macht das Sinn?

Um den Hinweis von Jürgen doch noch aufzugreifen: Programmieren ist soviel mehr als nur ein paar Komponenten auf eine Form zu ziehen und einen Quelltext ohne Fehlermeldungen zu übersetzen. Du wirst bereits nach einer Woche Urlaub deinen eigenen Quelltext nicht mehr verstehen, wenn du keine sinnvollen (sprechenden) Bezeichner verwendest - TForm1 und ähnliches sind Notlösungen, die von der IDE verwendet werden, weil sie es nicht besser weiß. Du aber kannst einen Button PrintButton nennen und eine Form MainForm oder so ähnlich. Solange du nur Zweizeiler postest wird sich niemand an einer fehlenden Namenskonvention stören, aber ein Code-Auszug mit 10 Komponenten und 30 Zeilen ist dann kaum noch in vernünftiger Zeit zu analysieren.

Freundliche Grüße

PS: Bin ich ein Opfer der Zeitdilatation? Da wurden doch glatt fünf Beiträge eingestellt, während ich meinen Beitrag zurecht gefeilt habe...
  Mit Zitat antworten Zitat
Benutzerbild von SaFu
SaFu

Registriert seit: 8. Nov 2006
1.360 Beiträge
 
Delphi 10.3 Rio
 
#9

Re: Logisches problem

  Alt 27. Jan 2007, 14:45
Was war damit gemeint
Zitat:
Wo war der rote Kasten?!
Zitat:
Marabu

das hier sieht seltsam aus:

Delphi-Quellcode:

if not ComboBox4.Items.IndexOf(ComboBox4.Text)> -1 Then
        begin
         Combobox4.Items.Add(ComboBox4.Text);
        end;
Ja soll natürlich nicht so sein


ja hätte es von Anfang an richtig beschreiben sollen.

Aber ich glaube #6 ist auch nicht so ganz richtig aber es ist aufjedenfall lesbarer
"... Wie gesagt, die Nutzer von 10, 12, 14 Zoll Display's werden deine Seite nicht in voller Pracht sehen können, ...

Surft Ihr mit dem Taschenrechner?"
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#10

Re: Logisches problem

  Alt 27. Jan 2007, 14:57
Hi Sascha...

Mir sind zwei sachen aufgefallen!
  1. Du siehst nicht sofort, was wann und wie oft aufgerufen wird!
    Delphi-Quellcode:
    for x:= 0 to StringGrid1.ColCount-1 do
    for y:= 0 to StringGrid1.RowCount-1 do
    Vertrpl.Add(StringGrid1.Cells[x,y]);
    for x:= 0 to StringGrid1.ColCount-1 do
    Vertrpl.Add(IntToStr(StringGrid1.ColWidths[x]));
    for x:= 0 to StringGrid1.RowCount-1 do
    Vertrpl.Add(IntToStr(StringGrid1.RowHeights[x]));
    Deshalb sollte man immer schön einrücken:
    Delphi-Quellcode:
    for x:= 0 to StringGrid1.ColCount-1 do
      for y:= 0 to StringGrid1.RowCount-1 do
        Vertrpl.Add(StringGrid1.Cells[x,y]); // Dieser Code wird von den beiden for-Schleifen ausgeführt
    for x:= 0 to StringGrid1.ColCount-1 do
      Vertrpl.Add(IntToStr(StringGrid1.ColWidths[x]));
    for x:= 0 to StringGrid1.RowCount-1 do
      Vertrpl.Add(IntToStr(StringGrid1.RowHeights[x]));
  2. wenn man if not myInt = 1 then macht, dann ist es imho so, dass er nicht überprüft ob "myInt" nicht 1 ist.
    Deshalb hier entweder den Vergleichsoperator negieren, oder mit Klammern arbeiten:
    if myInt <> 1 then if not(myInt = 1) then

PS: Die Einrückung beeinflusst nicht die Exe Also kann man einrück wie man will, solange es leserlich bleibt.

Zitat von Jürgen Thomas:
ich weigere mich, so einen Quelltext zu untersuchen. Korrigiere doch bitte alle Einrückungen, sodass jedes begin am Anfang eines Teilstücks steht, der darin enthaltene Text exakt 2 Zeichen eingerückt ist und jedes end exakt unter dem dazugehörigen begin steht. Genauso sollten alle if-then-else sauber positioniert werden.
Du hast zwar recht, aber es bleibt jeden selber überlassen wie ein Einrückt!
Ich habe auch oft "if ... then begin" geschrieben, und das "end" auf Höhe von "if" geschrieben

PS: Es stimmt schon dass der Code sehr unleserlich ist ^^
Zitat von fuknersascha:
Was war damit gemeint
Zitat:
Wo war der rote Kasten?!
Unten in der "Postchronik", werden Posts, die während des schreibens hinzukommen rot markiert (jedenfalls sollten sie es ^^)

Zitat von fuknersascha:
Aber ich glaube #6 ist auch nicht so ganz richtig aber es ist aufjedenfall lesbarer
Editiere doch den Eingangspost

[edit]Wenn ich es richtig verstanden habe, dann überprüft ob "IndexOf(ComboBox4.Text)" "-1" ist. Wenn es so ist, dann kannst du das machen, was gemacht werden soll, wenn ein Eintrag nicht existiert. Ansonsten das andere ausführen ^^[/edit]
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 13:54 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