![]() |
Komplexere Variante Records für Linie, Kreis und Rechteck
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:
Gruss Chris
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. |
Re: Komplexere Variante Records für Linie, Kreis und Rechtec
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:
[/Edit]
figur=record
x1, x2, y1, y2:integer; end; bei normalen kommt einfach das:
Delphi-Quellcode:
und so
typ.procedure;
also einfach ein punkt dazwischen also bei dir Figur.x1 Figur.p2 usw |
Re: Komplexere Variante Records für Linie, Kreis und Rechtec
NO SIR :!:
So was einfaches hatten wir schon letztes Jahr gemacht :witch: |
Re: Komplexere Variante Records für Linie, Kreis und Rechtec
äh, wie jetzt :gruebel:
aber es geht doch darum, wie man einen variant-record anspricht, oder? weil das hab ich hier ![]() im 4. beitrag eindeutig gefunden (vorrausgesetzt natürlich, der qt funzt) oder was meinst du genaumit "zugriff auf den record"? |
Re: Komplexere Variante Records für Linie, Kreis und Rechtec
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:
Ich werd mal in meiner dicken Schwarte nachschlagen :angle:
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; |
Re: Komplexere Variante Records für Linie, Kreis und Rechtec
Der Variante Record müsste so vollständig sein :drunken:
Delphi-Quellcode:
Ist meine Procedure auch richtig? Da muss noch was fehlen :gruebel:
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;
Delphi-Quellcode:
:angle2:
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:52 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