Delphi-PRAXiS

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 12:41

Memos und Buttons
 
Hi,

haben mal eine frage. Wir möchten mit einem Button die zahl 15 in ein memo feld eintragen. wie macht man das :D

es wird kein fehler angezeigt, aber auch keine Zahl.

hoffen auf schnelle hilfe vielen dank im Vorraus.

Gruß deppen

DeddyH 4. Apr 2013 12:42

AW: Memos und Buttons
 
Wie sieht denn Euer Code aus? Wenn es keinen gibt, werden auch keine Fehlermeldungen ausgegeben :stupid:

deppen 4. Apr 2013 12:49

AW: Memos und Buttons
 
procedure TForm1.Button15Click(Sender: TObject);
type tZahlen=array[0..15] of integer;

var i: integer;

Begin

i:= 15
Memo_anzeige_noten.Lines.add(IntToStr(i));
end;
end.



naja wir wollten das halt mit meheren buttons machen und damit einen Notendurchschneitsrechner programieren bei dem die einzelnen zahlen in das memo geschrieben werden und dann automatisch zusammengerechnet werden.
das war jedenfalls der plan :D

DeddyH 4. Apr 2013 12:51

AW: Memos und Buttons
 
Benutzt doch bitte Delphi-Tags für Code, das ist die "Helm"-Schaltfläche im Beitragseditor. Vom unbenutzten Typ und einem fehlenden Semikolon abgesehen fällt mir nichts Besonderes auf, eigentlich sollte die 15 im Memo erscheinen. Ist der Button denn auch im Objektinspektor mit der Methode verknüpft?

deppen 4. Apr 2013 12:54

AW: Memos und Buttons
 
naja das haben wir ja alles so aber da kommt trotzdem nix

DeddyH 4. Apr 2013 12:54

AW: Memos und Buttons
 
Habt ihr mal einen Haltepunkt in die Methode gesetzt und geschaut, ob dort auch angehalten wird?

deppen 4. Apr 2013 12:58

AW: Memos und Buttons
 
ok wir haben es aber wie bekommt man in Form1 den text aus dem Memofeld raus?

DeddyH 4. Apr 2013 13:00

AW: Memos und Buttons
 
Wie meinen? :gruebel:

deppen 4. Apr 2013 13:01

AW: Memos und Buttons
 
ok wir habens :D
wir melden uns in 15 minuten beim nächsten problem ok? :P

Der schöne Günther 4. Apr 2013 13:03

AW: Memos und Buttons
 
Jetzt hätte mich eigentlich interessiert, wo nun der Fehler war :|

Und was ist eigentlich aus eurem Sudoku geworden? Ich habe mich so darauf gefreut, ich weiß bis heute nicht, wie das Spiel eigentlich abläuft... :oops:

deppen 4. Apr 2013 13:08

AW: Memos und Buttons
 
wir haben das program einfach neu gestartet und dann ging das :D

naja und das hier machen wir eigentlich nur weil uns das sudoku zu kopliziert war.

und nun zur nächsten fragen wir wollen wissen wie man die letzte zahl die man eingegeben hat wieder weg machen kann aber nur die letzte?

Der schöne Günther 4. Apr 2013 13:12

AW: Memos und Buttons
 
Wenn Ihr eine Zeile mit
Delphi-Quellcode:
.Lines.Add('Text')
hinzugefügt habt, womit entfernt man dann wohl eine?


(Gibt es hier keine Spoiler-Tags?)

Schaut euch mal
Delphi-Quellcode:
.Lines.Delete(index:Integer)
an. Der Index ist die Nummer der Zeile, die ihr wieder entfernen wollt. Probiert mal mit einem zweiten Button aus, beispielsweise fest die dritte Zeile zu entfernen.

deppen 4. Apr 2013 13:17

AW: Memos und Buttons
 
oh danke das ist eine geniale hilfe aber wie bekommen wir die letzte zeile raus und nicht eine bestimmte??
danke nochmal

DeddyH 4. Apr 2013 13:19

AW: Memos und Buttons
 
Die erste Zeile hat den Index 0, die letzte den Index Count - 1.

deppen 4. Apr 2013 13:28

AW: Memos und Buttons
 
danke schön das hätten wir jetzt müssen wir aus den zahlen nur noch den durchschnitt bilden

Der schöne Günther 4. Apr 2013 13:32

AW: Memos und Buttons
 
Und genau deshalb war es vielleicht nicht das geschickteste, die Zahlen erst in ein Textfeld zu schreiben, denn jetzt sind es keine Zahlen mehr, sondern Text. Das könnt ihr zwar genauso wieder umwandeln, aber das ist alles unnötige Arbeit.

Ich denke mal, dazu war euer Zahlen-Array
Delphi-Quellcode:
tZahlen
ursprünglich gedacht? Macht erst die Zahlen da hinein, rechnet damit was das Zeug hält und schreibt dann ganz am Schluss die einzelnen Zahlen und die errechneten Werte wie z.B. Durchschnitt, Standardabweichung in das Memo.

deppen 4. Apr 2013 13:41

AW: Memos und Buttons
 
hmmmm okay verstehe.

dann betrachten iwr dieses Memofenster nur also fenster, wo man schauen kann was man gerade angeklickt hat.

nur wir verstehen nicht ganz wie wir das anstellen sollen :D

Luckie 4. Apr 2013 13:48

AW: Memos und Buttons
 
Zitat:

Zitat von deppen (Beitrag 1209976)
ok wir habens :D
wir melden uns in 15 minuten beim nächsten problem ok? :P

Aber bitte in einem neuen Thread.

Der schöne Günther 4. Apr 2013 14:01

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

Jumpy 4. Apr 2013 15:26

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

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 10:52 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