Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Memos und Buttons (https://www.delphipraxis.net/174110-memos-und-buttons.html)

deppen 4. Apr 2013 23:14

AW: Memos und Buttons
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1209994)
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. :D

ich hoffe das ist irwie möglich :/

Jumpy 5. Apr 2013 07:45

AW: Memos und Buttons
 
#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;

deppen 6. Apr 2013 00:12

AW: Memos und Buttons
 
Zitat:

Zitat von Jumpy (Beitrag 1210045)
#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 :?

Bummi 6. Apr 2013 07:10

AW: Memos und Buttons
 
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.

Der schöne Günther 6. Apr 2013 11:23

AW: Memos und Buttons
 
Zitat:

Zitat von deppen (Beitrag 1210234)
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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:08 Uhr.
Seite 3 von 3     123   

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