AGB  ·  Datenschutz  ·  Impressum  







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

Memos und Buttons

Ein Thema von deppen · begonnen am 4. Apr 2013 · letzter Beitrag vom 6. Apr 2013
Antwort Antwort
Der schöne Günther

Registriert seit: 6. Mär 2013
6.199 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

AW: Memos und Buttons

  Alt 4. Apr 2013, 14:01
Ich versteh ehrlich gesagt auch nicht, wo jetzt auf einmal geklickt wird.

Was soll das Programm tun - Der Benutzer gibt fest 15 Kommazahlen ein und das Programm druckt dann nochmal alle 15 Zahlen und den Durchschnitt in eine Memo, richtig? Wenn ja, wie gibt der Benutzer das ein? Habt ihr fest mehrere Buttons erstellt die für jede Note stehen sollen?
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.739 Beiträge
 
Delphi 6 Enterprise
 
#2

AW: Memos und Buttons

  Alt 4. Apr 2013, 15:26
Ist doch ein schönes Beispiel mal was über Array's zu lernen. Hier mal ein Ansatz, aber ohne Gewähr, da nur hier in den Editor grtippt:

Delphi-Quellcode:
interface

Type
 TNotenliste = array of integer;

 TForm1=class(TForm)
    //alles was man so auf der Form hat
  private
    //...
    Notenliste:TNotenliste;
    function NotenAnzahl:integer;
    function NotenSumme:integer;
    function NotenDurschnitt:Float;
  public
    //...
    procedure NoteHinzu(Note:integer);
    procedure NoteWeg;
    procedure MemoSchreiben;
  end;

implementation

procedure TForm1.NoteHinzu(Note:integer);
begin
  //Hier ggf. erst prüfen, ob Note zw. 1 und 6
  //Hier ggf. erst prüfen, ob maximale Notenzahl (z.B. 15) schon voll ist
  SetLength(Notenliste,High(Notenliste)+2) //Array um einen Platz vergrößern
                                           //High(Array)+2=Length(array)+1
  Notenliste[High(Notenliste)]:=Note;
end;

procedure TForm1.NoteWeg;
begin
  //Einfach Array mit SetLength um 1 verkleinern und so das letzte Element löschen
end;

procedure TForm1.MemoSchreiben;
var i:integer;
begin
  Memo1.Clear;
  for i:=Low(Notenliste) To High(Notenliste) do
    Memo1.Lines.Add(IntToStr(Notenliste[i]));
  Memo1.Lines.Add('Durschnitt: '+FloatToStr(Notendurschnitt));
end;

function TForm1.NotenAnzahl:integer;
begin
  //Funktion Length benutzen
end;

function TForm1.NotenSumme:integer;
begin
  //Über das Array iterieren wie bei MemoSchreiben
end;

function TForm1.NotenDurschnitt:Float;
begin
  if NotenAnzahl>0 then
    Result:=NotenSumme/NotenAnzahl //ggf. noch runden
  else
    Result:=0;
end;
Ralph

Geändert von Jumpy ( 4. Apr 2013 um 15:28 Uhr)
  Mit Zitat antworten Zitat
deppen

Registriert seit: 11. Mär 2013
18 Beiträge
 
#3

AW: Memos und Buttons

  Alt 4. Apr 2013, 23:14
Ich versteh ehrlich gesagt auch nicht, wo jetzt auf einmal geklickt wird.

Was soll das Programm tun - Der Benutzer gibt fest 15 Kommazahlen ein und das Programm druckt dann nochmal alle 15 Zahlen und den Durchschnitt in eine Memo, richtig? Wenn ja, wie gibt der Benutzer das ein? Habt ihr fest mehrere Buttons erstellt die für jede Note stehen sollen?
Also:

Wir haben 16 Button mit den zahlen 0 bis 15, wenn irgendeine angeklickt wird, so erscheint diese im Memo. Nun kann der Nutzer seine Noten "eintragen". Es erscheint dann bspw. : 13 14 15 7 4 (untereinander). Dann haben wir einen Button, wo die letzte Aktion rückgängig gemacht wird und einen, wo das komplette Memo gelöscht wird, also der Inhalt.

Nun zum Ziel der Sache. Mit den Noten, die in das Memo eingetragen wurden, soll nun die Summer ermittelt werden, wenn ein weiterer Button geklickt wird. Um nun den Mittelwert zuerrechnen. Also das kann ja gleich passieren. also Summe berechnen und dann gleich den Mittelwert. Dieser Mittelwert soll dann in einem Edit-Feld ausgegeben werden.

So haben wir uns das vorgestellt.

ich hoffe das ist irwie möglich :/
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.739 Beiträge
 
Delphi 6 Enterprise
 
#4

AW: Memos und Buttons

  Alt 5. Apr 2013, 07:45
#20 schon gesehen?

Ich ergänze das noch. Jedem eurer 15 Buttons im Obejekt-Inspektor noch den entsprechenden Wert (1-15) in der Eigenschaft Tag eintragen und im OnClick-Ereignis folgende (noch zu erstellende) Prozedur eintragen: "AllButtonClick".

Die könnte dann so aussehen:

Delphi-Quellcode:
TForm1.AllButtonClick(Sender:TObject)
begin
  if Sender is TButton then
    NoteHinzu(TButton(Sender).Tag);
end;
Ralph
  Mit Zitat antworten Zitat
deppen

Registriert seit: 11. Mär 2013
18 Beiträge
 
#5

AW: Memos und Buttons

  Alt 6. Apr 2013, 00:12
#20 schon gesehen?

Ich ergänze das noch. Jedem eurer 15 Buttons im Obejekt-Inspektor noch den entsprechenden Wert (1-15) in der Eigenschaft Tag eintragen und im OnClick-Ereignis folgende (noch zu erstellende) Prozedur eintragen: "AllButtonClick".

Die könnte dann so aussehen:

Delphi-Quellcode:
TForm1.AllButtonClick(Sender:TObject)
begin
  if Sender is TButton then
    NoteHinzu(TButton(Sender).Tag);
end;

okay, und was erreiche ich nun damit
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#6

AW: Memos und Buttons

  Alt 6. Apr 2013, 07:10
Ich hätte noch einen kleinen Vorschlag ...
Delphi-Quellcode:
program NotenAVG;

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

Type
  TNoteArray = Array [0 .. 15] of Integer;

  TWorker = Class
  private
    FNoteArray: TNoteArray;
    function GetAvg: Double;
  public
    procedure AddNote(Sender: TObject);
    procedure ListViewData(Sender: TObject; Item: TListItem);
  End;

var
  Worker: TWorker;
  NoteArray: TNoteArray;
  F: TForm;
  LV: TListView;
  i: Integer;

  { TWorker }

procedure TWorker.AddNote(Sender: TObject);
begin
  FNoteArray[TControl(Sender).Tag] := FNoteArray[TControl(Sender).Tag] + 1;
  LV.Invalidate;
end;

Function TWorker.GetAvg: Double;
var
  i, cnt: Integer;
begin
  cnt := 0;
  Result := 0;
  for i := 0 to 15 do
  begin
    cnt := cnt + FNoteArray[i];
    Result := Result + FNoteArray[i] * i;
  end;
  if cnt > 0 then
    Result := Result / cnt;
end;

procedure TWorker.ListViewData(Sender: TObject; Item: TListItem);
begin
  if Item.Index = 16 then
  begin
    Item.Caption := 'AVG';
    Item.SubItems.Add(FormatFloat('0.00', GetAvg));
  end
  else
  begin
    Item.Caption := Format('%d Punkte', [Item.Index]);
    Item.SubItems.Add(IntToStr(FNoteArray[Item.Index]));
  end;
end;

begin
  Worker := TWorker.Create;
  try
    F := TForm.Create(Application);
    F.ClientHeight := 16 * 24;
    F.ClientWidth := 230;
    F.DoubleBuffered := true;
    LV := TListView.Create(F);
    LV.Parent := F;
    LV.Width := 200;
    LV.ViewStyle := vsReport;
    LV.Font.Style := [fsBold];
    With LV.Columns.Add do
    begin
      Caption := 'Note';
      Width := 100;
    end;
    With LV.Columns.Add do
    begin
      Caption := 'Anzahl';
      Width := 96;
    end;
    LV.Align := alLeft;
    LV.OwnerData := true;
    LV.Items.Count := 17;
    LV.OnData := Worker.ListViewData;
    for i := 0 to 15 do
    begin
      With TButton.Create(F) do
      begin
        Parent := F;
        Tag := i;
        Left := 200;
        Height := 24;
        Width := 30;
        Top := i * Height;
        Caption := IntToStr(i);
        OnClick := Worker.AddNote;
      end;
    end;
    F.ShowModal;
  finally
    Worker.Free;
  end;

end.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.199 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: Memos und Buttons

  Alt 6. Apr 2013, 11:23
okay, und was erreiche ich nun damit
Jeder Button (und auch eine Menge mehr) haben eine "Tag"-Eigenschaft, das ist nur eine Zahl die jedes vom Benutzer anklickbare Element auf einem Formular hat. Ihr gebt jedem Button in seiner Tag-Eigenschaft einmal die Anzahl der Punkte die er hinzufügen soll (genauso wie z.B. eine Caption) und braucht jetzt nur einmal diese zweizeilige Prozedur die mit allen Button funktioniert - Ihr müsst nicht für jeden Button eine eigene Prozedur machen.
  Mit Zitat antworten Zitat
Antwort Antwort


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 20:06 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz