AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Komplexere Variante Records für Linie, Kreis und Rechteck
Thema durchsuchen
Ansicht
Themen-Optionen

Komplexere Variante Records für Linie, Kreis und Rechteck

Ein Thema von Wasserratte · begonnen am 17. Mai 2004 · letzter Beitrag vom 24. Mai 2004
Antwort Antwort
Benutzerbild von Wasserratte
Wasserratte

Registriert seit: 25. Apr 2004
Ort: Hildesheim
6 Beiträge
 
#1

Komplexere Variante Records für Linie, Kreis und Rechteck

  Alt 17. Mai 2004, 17:36
Bonjour!

Unser Klassenlehrer hatte uns folgende Aufgabe gegeben:

Wir sollten eine Linie, einen Kreis und ein Rechteck Zeichnen und diese dann in einem komplexeren Variante Record speichern und wieder abrufen können, dabei sollten wir auch eine case Anweisung benutzen. Aus der Delpi-Hilfe wurde ich dann bei: "Variante Teile in Record-Typen" fündig, aber mir fehlt noch der Zugriff auf den Record, wer kann mir da helfen?

Delphi-Quellcode:
unit Unit1;

{

        Programmname            Variante_Records.exe
        Autor                  Christian S.
        Datei                  Variante_Records.dpr
        Dokumentation          --

        Datum                  2004-05-10
        Stand                  ok!
        Version                1.1.0
        Build                  001

        Modifis                2004-05-17 v1.1.0.1
                                1. Angefangen mit Variante Records.

        Last Mod                2004-05-17

}


interface

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

type
  TMain = class(TForm)
    Btn_Linie: TButton;
    Btn_Rechteck: TButton;
    Btn_Kreis: TButton;
    Btn_Clear: TButton;
    Splitter1: TSplitter;
    L_X: TLabel;
    Ed_X: TEdit;
    L_Y: TLabel;
    Ed_Y: TEdit;
    L_X2: TLabel;
    Ed_X2: TEdit;
    L_Y2: TLabel;
    Ed_Y2: TEdit;
    Btn_Record: TButton;
    
    procedure Btn_LinieClick(Sender: TObject);
    procedure Btn_KreisClick(Sender: TObject);
    procedure Btn_RechteckClick(Sender: TObject);
    procedure Btn_ClearClick(Sender: TObject);
    procedure Btn_RecordClick(Sender: TObject);

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

var
  Main: TMain;

type
  TShapeList = (Linie, Kreis, Rechteck);
    TFigure = record
      case TShapeList of
        Linie : ( X1, Y1, X2, Y2: Integer); // Linie
        Kreis : ( A1, B1, A2, B2: Integer); // Kreis
        Rechteck : ( P1, Q1, P2, Q2: Integer); // Rechteck
      end;

implementation

{$R *.dfm}

{------------------------------------------------------------------------------}

procedure TMain.Btn_LinieClick(Sender: TObject);
var
  X1, Y1, X2, Y2 : Integer;

begin
  X1 := strtoint( Ed_X.Text);
  Y1 := strtoint( Ed_Y.Text);
  X2 := strtoint( Ed_X2.Text);
  Y2 := strtoint( Ed_Y2.Text);
  Canvas.MoveTo( X1,Y1);
  Canvas.LineTo( X2,Y2);
end;

{------------------------------------------------------------------------------}

procedure TMain.Btn_KreisClick(Sender: TObject);
var
  A1, B1, A2, B2 : Integer;

begin
  A1 := strtoint( Ed_X.Text);
  B1 := strtoint( Ed_Y.Text);
  A2 := strtoint( Ed_X2.Text);
  B2 := strtoint( Ed_Y2.Text);
  Canvas.Brush.Style := bsClear;
  Canvas.Ellipse( A1, B1, A2, B2);
end;

{------------------------------------------------------------------------------}

procedure TMain.Btn_RechteckClick(Sender: TObject);
var
  P1, Q1, P2, Q2 : Integer;

begin
  P1 := strtoint( Ed_X.Text);
  Q1 := strtoint( Ed_Y.Text);
  P2 := strtoint( Ed_X2.Text);
  Q2 := strtoint( Ed_Y2.Text);
  Canvas.Brush.Style := bsClear;
  Canvas.Rectangle( P1, Q1, P2, Q2);
end;

{------------------------------------------------------------------------------}

procedure TMain.Btn_ClearClick(Sender: TObject);
begin
  Refresh;
end;

{------------------------------------------------------------------------------}

procedure TMain.Btn_RecordClick(Sender: TObject);
begin
  //
end;

end.
Gruss Chris
Nur Nixen konnte nach China gehn!
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#2

Re: Komplexere Variante Records für Linie, Kreis und Rechtec

  Alt 17. Mai 2004, 18:01
also, mit variants habbich noch nix gemacht, aber es sollte mich wundern wenn es andres wäre als bei normal

[Edit]Normal heisst für mich ein record "ohn" variant, also sowat
Delphi-Quellcode:
figur=record
   x1, x2, y1, y2:integer; end;
[/Edit]

bei normalen kommt einfach das:

typ.procedure; und so

also einfach ein punkt dazwischen

also bei dir

Figur.x1
Figur.p2
usw
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Benutzerbild von Wasserratte
Wasserratte

Registriert seit: 25. Apr 2004
Ort: Hildesheim
6 Beiträge
 
#3

Re: Komplexere Variante Records für Linie, Kreis und Rechtec

  Alt 17. Mai 2004, 18:48
NO SIR

So was einfaches hatten wir schon letztes Jahr gemacht
Nur Nixen konnte nach China gehn!
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#4

Re: Komplexere Variante Records für Linie, Kreis und Rechtec

  Alt 17. Mai 2004, 19:55
äh, wie jetzt

aber es geht doch darum, wie man einen variant-record anspricht, oder?

weil das hab ich hier

http://www.delphipraxis.net/internal...variant+record

im 4. beitrag eindeutig gefunden (vorrausgesetzt natürlich, der qt funzt)

oder was meinst du genaumit "zugriff auf den record"?
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Benutzerbild von Wasserratte
Wasserratte

Registriert seit: 25. Apr 2004
Ort: Hildesheim
6 Beiträge
 
#5

Re: Komplexere Variante Records für Linie, Kreis und Rechtec

  Alt 18. Mai 2004, 18:13
Vielen Dank glkbkk!

Aber irgendwie gehts immer noch nicht?
Der Variante Record soll jetzt noch zusätzlich mit einem Array laufen!
Wer hat ne Ahnung was in meinem Quelltext noch fehlt?

Delphi-Quellcode:
type
  TShapeList = (Linie, Kreis, Rechteck);
    TFigure = record
      case TShapeList of
        Linie : ( X1, Y1, X2, Y2: Real); // Linie
        Kreis : ( A1, B1, A2, B2: Real); // Kreis
        Rechteck : ( P1, Q1, P2, Q2: Real); // Rechteck
      end;

implementation

{$R *.dfm}

var
  vr : TFigure;
  PListe : array [0..10] of TFigure;

{------------------------------------------------------------------------------}

procedure TMain.Btn_LinieClick(Sender: TObject);
var
  X1, Y1, X2, Y2 : Integer;

begin
  PListe[0].X1 := StrToInt( Ed_X.Text);
  PListe[0].Y1 := StrToInt( Ed_Y.Text);
  PListe[0].X2 := StrToInt( Ed_X2.Text);
  PListe[0].Y2 := StrToInt( Ed_Y2.Text);
  X1 := Round ( PListe[0].X1);
  Y1 := Round ( PListe[0].Y1);
  X2 := Round ( PListe[0].X2);
  Y2 := Round ( PListe[0].Y2);
  Canvas.MoveTo( X1, Y1);
  Canvas.LineTo( X2, Y2);
end;
Delphi-Quellcode:
procedure TMain.Btn_Record_LinieClick(Sender: TObject);
begin
  vr.X1 := StrToFloat(Ed_X.Text);
  vr.Y1 := StrToFloat(Ed_Y.Text);
  vr.X2 := StrToFloat(Ed_X2.Text);
  vr.Y2 := StrToFloat(Ed_Y2.Text);
end;
Ich werd mal in meiner dicken Schwarte nachschlagen
Nur Nixen konnte nach China gehn!
  Mit Zitat antworten Zitat
Benutzerbild von Wasserratte
Wasserratte

Registriert seit: 25. Apr 2004
Ort: Hildesheim
6 Beiträge
 
#6

Re: Komplexere Variante Records für Linie, Kreis und Rechtec

  Alt 24. Mai 2004, 15:25
Der Variante Record müsste so vollständig sein
Delphi-Quellcode:
type
  TLinie = record
             X1, Y1,
             X2, Y2,
             Width : Integer;
           end;

  TFormList = (Linie, Kreis, Rechteck);
  TFigure = record
               Status : TFormList;
               case TFormList of
                 Linie : ( TLinie : Integer); // Linie
                 Kreis : ( Xm, Ym, Radius : Integer); // Kreis
                 Rechteck : ( P1, Q1, P2, Q2 : Integer); // Rechteck
               end;

implementation

{$R *.dfm}

var
  Zeichnungsdaten : array [0..10] of TFigure;
  F1, F2, F3, F4 : TFigure;
Ist meine Procedure auch richtig? Da muss noch was fehlen

Delphi-Quellcode:
procedure TMain.Btn_LinieClick(Sender: TObject);
var
  X1, Y1, X2, Y2 : Integer;

begin
  Btn_Linie.Enabled := False;
  with Zeichnungsdaten[0] do
    case Status of

    Linie : begin
                 F1.TLinie := 22;
               end;

    Kreis : begin
                 F1.Xm := 10;
                 F2.Ym := 20;
                 F3.Radius := 30;
               end;

    Rechteck : begin
                 F1.P1 := 20;
                 F2.Q1 := 30;
                 F3.P2 := 40;
                 F4.Q2 := 50;
               end;
  end;
  Btn_Linie.Enabled := true;
end;
  X1 := StrToInt( SpEd_X1.Text);
  Y1 := StrToInt( SpEd_Y1.Text);
  X2 := StrToInt( SpEd_X2.Text);
  Y2 := StrToInt( SpEd_Y2.Text);

  with Main.Image.Canvas do
    begin
      MoveTo( X1, Y1);
      LineTo( X2, Y2);
    end;
Nur Nixen konnte nach China gehn!
  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 06:32 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