Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Memory in Delphi (https://www.delphipraxis.net/9018-memory-delphi.html)

Deven 16. Sep 2003 18:57


Memory in Delphi
 
Hallo ihr alle!

Ich habe eine Frage :)

hat schonmal jemand von euch ein Memory in Delphi programmiert?

Ich soll das als Schulprojekt machen und weiss noch nicht so direkt wie ich das machen soll :)

Gruss Deven

Phoenix 16. Sep 2003 20:39

Re: Memory in Delphi
 
Ich würde mit TImages auf Panels arbeiten, die sichtbar werden, wenn man auf das panel klickt und wieder unsichtbar, wenn zwei gleichzeitig sichtbar sind und sie nicht übereinstimmen.

Zur Kontrolle würde ich ein zweidimensionales array nehmen (4x4 reicht anfangs), das mit jeweils zwei identischen werten randomized gefüllt wird.

Anhand des Arrays würde ich dann auch die TImages mit den Bildern befüllen.

Deven 17. Sep 2003 16:57

Re: Memory in Delphi
 
huhu :)

danke das is schonmal ne gute idee!

Aber was meinst du mit zweidimensionales Array?

nene einfaches Array kenne ich ...

Achja... und wie soll ich es machen wenn die anzahl der Karten variable sein soll?

Matze 17. Sep 2003 16:59

Re: Memory in Delphi
 
Dann musst du die Panels/Images zur Laufzeit erstellen, sonst wird es nicht gehen. Das array muss auch in der Größe variabel sein.

Alexander 17. Sep 2003 18:59

Re: Memory in Delphi
 
Stell dir ein zweidimensionales Array wie eine Tabelle vor, halt mit 2 Spalten...

Deven 17. Sep 2003 19:26

Re: Memory in Delphi
 
ok
eine tabelle ...

mehrere Spalten und mehrere Zeilen schätze ich meint ihr
und was bringt mir das im zusammenhang mit memory?

Alexander 17. Sep 2003 19:33

Re: Memory in Delphi
 
Genau.
Du könntest dort die Karten usw. reinschieben.
Dann kannst du es im Programm besser verarbeiten...

Phoenix 17. Sep 2003 19:56

Re: Memory in Delphi
 
Das sieht dann in etwa so aus:

Array:
Code:
     0   1   2   3
0   [a] [h] [c] [e]
1   [c] [g] [h] [b]
2   [f] [d] [a] [d]
3   [g] [b] [e] [f]
Du hast dann die Zeile und Spalte von dem Panel, wo der User draufklickt - wie in einem Koordinatensystem - oben links ist 1,1.

Das Array geht dann von 0 - 3 wie Spalten auch bezeichnet sind.
Du kannst dann z.B. das erste c mit (0,2) ansprechen.

Deven 18. Sep 2003 16:43

Re: Memory in Delphi
 
hallo :)

kann mir noch jemand sagen wie man ein zweidimensionales array programmiert ?_? :oops:

Phoenix 18. Sep 2003 16:55

Re: Memory in Delphi
 
Delphi-Quellcode:
type zweidim = array of array of integer;

procedure MakeMatrix;
var
   matrix: zweidim;
   x,y: Integer;
begin
   x := 5; // länge erste dimension
   y := 5; // länge zweite dimension

   setLength(matrix, x, y); // array initilisieren
   
   // der einzelne x/y - Wert wird dann so angesprochen
   x := 0;
   y := 4;
   matrix[x,y] := 1;
   // dies würde dem 'untersten' Element in der ersten spalte eine 1 zuweisen
end;

Deven 18. Sep 2003 21:01

Re: Memory in Delphi
 
Und noch eine Frage :)

wenn ich jetzt ein image1 habe

und möchte diesem image1 per button druck eine bilddatei zuweisen ... wie mach ich das?

im Objectinspector geht man da uf picture und dann auf (TBitmap) aber wie programmiert man das?

Deven 19. Sep 2003 14:25

Re: Memory in Delphi
 
Zitat:

Zitat von Phoenix
Delphi-Quellcode:
type zweidim = array of array of integer;

wo im quellcode muss das hingeschrieben werden?

Tpercon 19. Sep 2003 14:29

Re: Memory in Delphi
 
Schreib im private Teil folgendes:
Delphi-Quellcode:
private
  zweidim = array of array of integer;
Fürs dynamische Laden eines Bildes in ein Image solltest du mal die Suche benutzen.

Deven 19. Sep 2003 14:36

Re: Memory in Delphi
 
danke :)

aber leider bekomme ich dann immer ne fehlermeldung :

';' oder ':' erwartet aber '=' gefunden

wenn ich dann : nehme geht es soweit ...

aber dann sagt er:

'[' erwartet aber 'OF' gefunden...

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
  TForm1 = class(TForm)

procedure FormCreate(Sender: TObject);
  private
  zweidim : array of array of integer;
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
var
   matrix: zweidim;
   x,y: Integer;
begin
   x := 5; // länge erste dimension
   y := 5; // länge zweite dimension

   setLength(matrix, x, y); // array initilisieren
   
   // der einzelne x/y - Wert wird dann so angesprochen
   x := 0;
   y := 4;
   matrix[x,y] := 1;
   // dies würde dem 'untersten' Element in der ersten spalte eine 1 zuweisen
end;
end;

end.

flomei 19. Sep 2003 14:39

Re: Memory in Delphi
 
Wo steht denn
Delphi-Quellcode:
type
in deinem Source??? Vielleicht solltest du da mal
Delphi-Quellcode:
  zweidim : array of array of integer;
hinschreiben. Vielleicht hilft es?!

MfG Florian :hi:

Tpercon 19. Sep 2003 14:41

Re: Memory in Delphi
 
Hau die lokale deklaration von
Delphi-Quellcode:
  matrix: zweidim;
mal raus und nenne zweidim in matrix um.
Oder die andere Möglichkeit wäre:
Delphi-Quellcode:
type
  zweidim : array of array of integer;
  TForm1 = class(TForm)
zu schreiben.


Außerdem ist das vorletzte end zu viel!

Phoenix 19. Sep 2003 14:44

Re: Memory in Delphi
 
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
  zweidim = array of array of integer; // <== hier musses hin!
  TForm1 = class(TForm)

procedure FormCreate(Sender: TObject);
  private
                // weil hier kommen membervariablen hin, keine typdefinitionen
                // da hat TPercon was verwechselt
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

[hier wie gehabt weiter...]

Deven 19. Sep 2003 20:51

Re: Memory in Delphi
 
Zitat:

Zitat von Deven
danke :)

aber leider bekomme ich dann immer ne fehlermeldung :

';' oder ':' erwartet aber '=' gefunden

wenn ich dann : nehme geht es soweit ...

aber dann sagt er:

'[' erwartet aber 'OF' gefunden...

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
  TForm1 = class(TForm)

procedure FormCreate(Sender: TObject);
  private
  zweidim : array of array of integer;
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
var
   matrix: zweidim;
   x,y: Integer;
begin
   x := 5; // länge erste dimension
   y := 5; // länge zweite dimension

   setLength(matrix, x, y); // array initilisieren
   
   // der einzelne x/y - Wert wird dann so angesprochen
   x := 0;
   y := 4;
   matrix[x,y] := 1;
   // dies würde dem 'untersten' Element in der ersten spalte eine 1 zuweisen
end;
end;

end.

die Frage steht noch aus ;)

Daniel B 19. Sep 2003 21:12

Re: Memory in Delphi
 
Du hast zwei end; untereinander, eins davon musst Du löschen weil es zuviel ist.

Deven 19. Sep 2003 21:23

Re: Memory in Delphi
 
Zitat:

Zitat von Deven
danke :)

aber leider bekomme ich dann immer ne fehlermeldung :

';' oder ':' erwartet aber '=' gefunden

wenn ich dann : nehme geht es soweit ...

aber dann sagt er:

'[' erwartet aber 'OF' gefunden...

der fehler mit dem Of ist geblieben ...

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
  TForm1 = class(TForm)
  procedure FormCreate(Sender: TObject);

  private
    zweidim : array of array of integer;
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
var
   matrix: zweidim;
   x,y: Integer;
begin
   x := 5; // länge erste dimension
   y := 5; // länge zweite dimension

   setLength(matrix, x, y); // array initilisieren
   
   // der einzelne x/y - Wert wird dann so angesprochen
   x := 0;
   y := 4;
   matrix[x,y] := 1;
   // dies würde dem 'untersten' Element in der ersten spalte eine 1 zuweisen
end;

end.

fkerber 19. Sep 2003 21:40

Re: Memory in Delphi
 
Hi!

Klinke mich auch mal in das Thema ein :oops:
Habe mal gerade den letzten Code getestet, den Deven gepostet hat!
Wenn ich den so übernehme, bekomme ich folgende Fehler:

Zitat:

Zitat von DELPHI
[Fehler] Unit1.pas(28): Konstante oder Typenbezeichner erwartet
[Fehler] Unit1.pas(34): Inkompatible Typen
[Fataler Fehler] Project1.dpr(5): Verwendete Unit 'Unit1.pas' kann nicht compiliert werden

Ersetze ich dann die folgende Zeile, die er beim ersten Fehler anmeckert

Delphi-Quellcode:
   matrix: zweidim;
sodass sie so aussieht:

Delphi-Quellcode:
   matrix: array of array of integer;
Kann das jemand erklären?

ciao fkerber

anku 20. Sep 2003 00:36

Re: Memory in Delphi
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hiho,

ich bin seit 40 min von wieder zu hause und recht gut angetrunken :roll:

hab mich aber trotzdem mal kurz damit beschäftigt. raugekommen ist ein noch nicht fertiges Memory, dass nur auf verschiedenen Farben beruht.
es wird nicht erkannt wenn alle felder aufgedeckt sind. auch hab ich mir keine gedanken darüer gmeacht ob das so überhaupt für dich nutzbar ist. aber es ist zumindest eine art ansatz.

exe und source im anhang

Tpercon 20. Sep 2003 07:04

Re: Memory in Delphi
 
In dem Code von Phoenix ist alles richtig, genauso wie in der Beschreibung von mir oben. Einfach darauf mal aufbauen.

fkerber 20. Sep 2003 08:20

Re: Memory in Delphi
 
Hi!
Habe meinen Fehler gefunden, also auch die Lösung deines Problems Deven! Es müsste so aussehen:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
  zweidim = array of array of integer;
  TForm1 = class(TForm)



procedure FormCreate(Sender: TObject);
  private

    { Private-Deklarationen } 
  public
    { Public-Deklarationen } 
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM} 

procedure TForm1.FormCreate(Sender: TObject);
var
   matrix: zweidim;
   x,y: Integer;
begin
   x := 5; // länge erste dimension
   y := 5; // länge zweite dimension

   setLength(matrix, x, y); // array initilisieren
   
   // der einzelne x/y - Wert wird dann so angesprochen
   x := 0;
   y := 4;
   matrix[x,y] := 1;
   // dies würde dem 'untersten' Element in der ersten spalte eine 1 zuweisen
end;


end.
Hoffe, das hilft!

ciao fkerber

Deven 20. Sep 2003 16:39

Re: Memory in Delphi
 
also ich habe noch immer den Fehler mit dem OF

kann es daran liegen das ich noch mit Delphi 3 Programmiere?

WhiteStar99 21. Sep 2003 10:32

Re: Memory in Delphi
 
Hallo!

unser Lehrer behandelt das Thema auch, folgende Aufgabenstellung haben wir von ihm:

http://www.bildung.hessen.de/abereic...delphi/memory/

vielleicht hilft dir das ja auch weiter :). Oder evtl kannst du mir da ja auch weiterhelfen, denn ich müsste noch das Mischen der Karten programmieren, wüsste aber nicht wie :(

Gruß

Luckie 21. Sep 2003 10:39

Re: Memory in Delphi
 
D3 kennt noch keien dynamischen Arrays. Hättest du deine Delphi Version mal im Profil eingetragen, hätte das viel zeit und Postings gespart.

Phoenix 21. Sep 2003 10:58

Re: Memory in Delphi
 
*vorkopfpatsch*

Ein "array of array" kann D3 noch nicht. Tja, dann musste wohl (ist wahrscheinlich das einfachste) für jede reihe im Memory ein eigenes Array machen.

Also
Array 1: Felder 1 - 4
Array 2: Felder 5 - 8
Array 3: Felder 9 - 12
Array 4: Felder 13 - 16

Ansonsten bleibt das Prinzip aber gleich.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:03 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