Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Koordinaten als Datei speichern (https://www.delphipraxis.net/100686-koordinaten-als-datei-speichern.html)

-lx- 2. Okt 2007 14:37


Koordinaten als Datei speichern
 
Hallo.


Ein Programm liest die Zeigerkoordinaten der Maus alle 0,03 Sekunden. Dabei werden Koordinatenpaare, die doppelt vorkommen, nicht mit aufgenommen.
Ich hab lange (relativ) überlegt wie ich die ganzen Koordinaten speichern soll.
Da ohnehin etwas Übung in OOP nicht schaden konnte, habe ich dis TList-Klasse gewählt und eine eigene TFeld-Klasse geschrieben.

Delphi-Quellcode:
unit Unit2;

interface

type
  TFeld = class
    private
      X : Integer;
      Y : Integer;
    public
      constructor create;
      procedure SetzeX (x : integer);
      procedure SetzeY (y : integer);
      function GibX : Integer;
      function GibY : Integer;
      destructor destroy;
    end;

implementation

constructor TFeld.create;
begin
x:= 0;
y:= 0;
end;

procedure TFeld.SetzeX (x : Integer);
begin
  self.X:= x;
end;

procedure TFeld.SetzeY (y : integer);
begin
  self.Y:= y;
end;

function TFeld.GibX : integer;
begin
  result:= X;
end;

function TFeld.GibY : integer;
begin
  result:= Y;
end;

destructor TFeld.destroy;
begin
  self.Free;
end;

end.
In din Objekten von TFeld werden die X- und Y-Koordinaten geschrieben.
Jene Objekte werden wiederum von einem Objekt der Klasse TList verwaltet. Über diese wird auch auf den Inhalt zugegriffen.


1. Frage: Ist dies eine sinnvolle Art der Datenspeicherung?

2. Frage: Wenn 1. Frage = true, wie kann ich die ermittelten Daten in eine externe Datei schreiben und diese speichern bzw. dann auch wieder laden, ohne dass ich die ganzen Daten einzeln wieder in die Elemente eintragen muss?
Also ich will quasi das gesamte TList-Objekt mit all seinen TFeld-Objekten und deren Inhalten speichern und diese wieder mit den gleichen Inhalten laden.




Mit freundlichen Grüßen

xZise 2. Okt 2007 14:53

Re: Koordinaten als Datei speichern
 
Obwohl du OOP testen willst ;) empfehle ich dir den sogenannten TPoint:
Delphi-Quellcode:
TPoint = record
  X, Y : Integer;
end;
Aber ansonsten wäre nur das Delphi spezifische Attribut "property" dort erwähnenswert.

Delphi-Quellcode:
TProperty = class(TObject) // Dies wird standardmäßig gesetzt, aber der besseren übersichtlichkeit halber schreibe ich immer "(TObject)" ;)
private
  FAttribut : TAttributTyp;
  procedure SetAttribut(Value : TAttributTyp);
  function SetAttribut : TAttributTyp;
public // Wenn der Eintrag nicht im Objekt Inspektor erscheinen soll!
  property Attribut : TAttributTyp read FAttribut write FAttribut;
  property AttributProcs : TAttributTyp read GetAttribut write SetAttribut
published // Wenn der Eintrag im OI erscheinen soll
  { aus public hier rein kopieren }
end;
Ansonsten Delphi/DP-Hilfe ;)

MfG
xZise

-lx- 2. Okt 2007 15:17

Re: Koordinaten als Datei speichern
 
Hallo und Danke für deine Antwort.


Also die Klasse TPoint bietet die möglichkeit, 2dimensionale Koordinaten zu speichern. Das wäre genau das was ich bräuchte.

Aber wo besteht der Unterschied zu meiner OOP Lösung und zu der Vorgefertigten ?
Wenn ich zum Beisiel noch die Pixelgröße und die Farbe der jeweiligen Koordinate speichern will, ist TPoint ungeeignet.

Oder bietet TPoint auch die Möglichkeit beliebig viele Elemente zu beherbergen ?


Worauf bezieht sich dein zweiter Quelltext? Auf das Problem der Speicherung oder auf TPoint ?

jjep 2. Okt 2007 15:29

Re: Koordinaten als Datei speichern
 
Also ich würde das ganze mit einer String-Liste realisieren.

Delphi-Quellcode:
 
  Liste: TStrings;

  //du kannst die Liste z.B. als TXT-Datei speichern
  Liste.SaveToFile('c:\meineKoordinaten.txt');
 
  //und wieder öffnen
  Liste.LoadFromFile('c:\meineKoordinaten.txt');

  //Die Datenpaare kannst du mit ".add" einfügen und die verschiedenen Parameter z.B. mit einem Strichpunkt trennen
  Liste.Add(IntToStr(x)+';'+IntToStr(y));
Der Nachteil ist, dass du die Datenpaare einfach wieder mit String befehlen auseinander schnippseln must.

Gruss jjep

DeddyH 2. Okt 2007 15:29

Re: Koordinaten als Datei speichern
 
Was ist denn die Pixelgröße einer Koordinate? :gruebel:

KPBecker 2. Okt 2007 15:37

Re: Koordinaten als Datei speichern
 
Hallo, Deddy,

eine Koordinate (besser: ein Koordinatenpaar oder -tripel) kennzeichnet einen Punkt in einem Koordinatensystem und hat mit einer Pixelgröße zunächst einmal gar nichts zu tun.
Wenn ein Punkt z.B. auf einem Bildschirm angesprochen wird, hat der dann eine konkrete Pixelgröße.

KP

DeddyH 2. Okt 2007 15:44

Re: Koordinaten als Datei speichern
 
Was ich meinte, ist, dass eine (Screen-)Koordinate einen genau definierten Punkt (und somit ein Pixel) auf dem Bildschirm definiert. Und ein Pixel ist immer ein Pixel, da kenn ich keine Größenagaben. Oder denke ich falsch?

KPBecker 2. Okt 2007 15:59

Re: Koordinaten als Datei speichern
 
Hallo, Deddy,

Was ich meinte, ist, dass eine (Screen-)Koordinate einen genau definierten Punkt (und somit ein Pixel) auf dem Bildschirm definiert. --> richtig

Und ein Pixel ist immer ein Pixel, --> richtig

da kenn ich keine Größenagaben. --> Bei einem konkreten Gerät hat ein Pixel schon eine definierte Größe (aus Pixel per inch z.B. zu errechnen)

Oder denke ich falsch? --> richtig

DeddyH 2. Okt 2007 16:02

Re: Koordinaten als Datei speichern
 
Du meinst die Auflösung. Wozu sollte man die speichern wollen, die ist doch sowieso vom Ausgabemedium abhängig.

KPBecker 2. Okt 2007 16:12

Re: Koordinaten als Datei speichern
 
Zitat:

Zitat von DeddyH
Du meinst die Auflösung. Wozu sollte man die speichern wollen, die ist doch sowieso vom Ausgabemedium abhängig.

richtig, frag lx

KP

-lx- 2. Okt 2007 18:04

Re: Koordinaten als Datei speichern
 
Wenn ich in Delphi etwas zeichnen will, kann ich das ja über die Klasse TPaintBox realisieren.
Wenn ich dort etwas zeichne/male färbe ich ja Koordinaten ein. Jedoch kann ich bestimmen, wie weit die Farbe um den Mittelpunkt herum laufen soll. Also statt einem dünnen blauen Punkt, einen dicken blauen Punkt. Ihr versteht?

Wenn ich also nun was gezeichnet habe, habe ich eine Liste von x/y-Koordinaten mit eventuell unterschiedlichen Farb- und Größenangaben. Und genau diese Liste mit den Inhalten X,Y,Farbe und Größe will ich speichern und laden können.


Bis dato beschäftige ich mich mit dem Abgreifen von Mausbewegungen und deren Speicherung. Darauf wollte ich dann dass Malprogramm aufbauen.

Also erst klein anfangen und dann die Baustelle erweitern. Daher wollte ich beim Erstellen von Listen flexibel bleiben um ggf. weitere Attribute leicht aufnehmen zu können.




Das mit der String-Liste wäre eine weitere Möglichkeit und die Auswertung der Daten (ob nun mit STrich oder ohne) ist nicht das Problem. Ich denke mir halt dass es vll. noch eine bessere und konfortablere Möglichkeit gibt - sprich OOP.

xZise 2. Okt 2007 20:18

Re: Koordinaten als Datei speichern
 
Zitat:

Zitat von -lx-
Also die Klasse TPoint bietet die möglichkeit, 2dimensionale Koordinaten zu speichern. Das wäre genau das was ich bräuchte.

Genau. Allerdings ist es Hier im Forum suchenrecord und muss deshalb nicht initalisiert werden.

Zitat:

Zitat von -lx-
Aber wo besteht der Unterschied zu meiner OOP Lösung und zu der Vorgefertigten ?

Du hast eine Klasse mit Prozeduren und zwei Variablen. Der TPoint nur die Variablen (als würdest du die Variablen public setzen).
Zitat:

Zitat von -lx-
Wenn ich zum Beisiel noch die Pixelgröße und die Farbe der jeweiligen Koordinate speichern will, ist TPoint ungeeignet.

Jap ;) Aber die Pixelgröße ist generell überall gleich groß :)
Delphi-Quellcode:
TlxPoint = record
  X, Y : Integer;
  pixelSize : Integer;
  clr : TColor;
end;
Zitat:

Zitat von -lx-
Worauf bezieht sich dein zweiter Quelltext? Auf das Problem der Speicherung oder auf TPoint ?

Auf deine Klasse ;) In Delphi schreibt man nicht einzelne Prozeduren sondern eine Property mit Variablen und Prozeduren.

MfG
xZise

-lx- 3. Okt 2007 14:23

Re: Koordinaten als Datei speichern
 
Hallo.

ich werde mich ab Donnerstag mit dem TPoint Record näher befassen. Mich hat das nur etwas verwundert weil ich bei Wikipedia gelesen habe, dass Records nur 3 Spalten beinhalten dürfen - was für mich wenig Sinn gemacht hat.

Records sind doch, so weit ich das verstanden habe, vergleichbar mit Tabellen, oder ? Und dementsprechend kann ich auf das TPoint-Objekt verzichten und mein eigenes Record schreiben, oder ?

Delphi-Quellcode:
type
    TOwnRecord : record
            X : integer;
            Y : integer;
            Size : integer;
            Color : TColor;
Wie gesgat, ich werde mich erstmal mit Records beschäftigen und sollte das mit der Speicherung in Records funktionieren, melde ich ich mich wieder um ggf. Fragen zur Speicherung in Dateien zu stellen. ;)



Vielen Dank für Eure Hilfe. Wäre sonst nie auf den Gedanken gekommen, Records zu verwende bzw. mich damit zu beschäftigen.






Mit freundlichen Grüßen

lx


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