![]() |
Byte to int
hallo will ein Dynbytearray in ein intArray eintragen, aber die zahlen sollen alle so bleiben,
nur leider funktioniert das nicht so
Delphi-Quellcode:
B[counter] := Bytetoint[c[counter]]
|
AW: Byte to int
Was soll ByteToInt denn tun? Ein Byte passt immer in einen Integer, da gibt es nichts umzuwandeln.
|
AW: Byte to int
kann das byte aber nicht in einen case benutzen aber er sagt mir Ordinaltyp erforderlich
|
AW: Byte to int
Byte ist ein Ordinaltyp, zeig doch mal den fehlerverursachenden Code.
|
AW: Byte to int
Delphi-Quellcode:
repeat for counter := 0 to 3 do begin middlesafer[counter] := (numberdissect(rec[oneup])); end; inc(oneup); until oneup = 9; for counter := low(middlesafer) to high(middlesafer) do begin case (middlesafer[counter]) of 0: picload[0]; else end; end; |
AW: Byte to int
middlesafer ist ein Array of Byte? Eigentlich sollte das funtionieren.
|
AW: Byte to int
Kein direkte Array of byte ein ByteDynArray
|
AW: Byte to int
Da mein XE kein TByteDynArray kennt, hab ich mir das mal schnell selbst deklariert. Das hier tut bei mir:
Delphi-Quellcode:
uses Generics.Collections;
type TByteDynArray = TArray<Byte>; procedure TFormTest.Button1Click(Sender: TObject); var TheArray: TByteDynArray; counter: integer; begin SetLength(TheArray, 3); TheArray[0] := 42; TheArray[1] := 100; TheArray[2] := 255; for counter := Low(TheArray) to High(TheArray) do case TheArray[counter] of 42: ShowMessage('Ultimative Antwort'); else ShowMessage(IntToStr(TheArray[counter])); end; end; |
AW: Byte to int
der will den ja auch nicht in ein smallint schreiben
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject); type Allrounder = TImage; var rec : TIntegerarray; pics : Tpicarray; saferend: TByteDynArray; firstIcon: Tstringarray; counter, oneup: integer; middlesafer : array[0..26] of Smallint; nein : array[0..26] of String; begin oneup := 0; SetLength(saferend,3); rec := bedingung; firstIcon := Symbolspeicher; Pics := picload; repeat for counter := 0 to 3 do begin middlesafer[counter] := (numberdissect(rec[oneup])); end; inc(oneup); until oneup = 9; for counter := low(middlesafer) to high(middlesafer) do begin case middlesafer[counter] of 0: picload[0]; else end; end; |
AW: Byte to int
Auch kein Problem:
Delphi-Quellcode:
uses Generics.Collections;
type TByteDynArray = TArray<Byte>; procedure TFormTest.Button1Click(Sender: TObject); var TheArray: TByteDynArray; counter: integer; middlesafer : array[0..26] of Smallint; begin SetLength(TheArray, Length(middlesafer)); for counter := Low(TheArray) to High(TheArray) do TheArray[counter] := counter; for counter := Low(TheArray) to High(TheArray) do middlesafer[counter] := TheArray[counter]; for counter := Low(middlesafer) to High(middlesafer) do case middlesafer[counter] of 42: ShowMessage('Ultimative Antwort'); else ShowMessage(IntToStr(middlesafer[counter])); end; end; |
AW: Byte to int
Ihc würde mal sagen Delphi 7 war da noch nicht so weit:-D
|
AW: Byte to int
Leider kann ich Deinen Originalcode nicht testen, da er zuviel globales Zeugs enthält, dessen Datentypen ich nicht einmal kenne. Ich glaub aber kaum, dass es an Delphi 7 liegen soll.
|
AW: Byte to int
wenn du möchtest kann ich den ein mal ganz hoch loaden wird nur etwas länger
und wenn du die zeit dazu erübrigen kannst |
AW: Byte to int
Kein Problem, allerdings hab ich Delphi 7 nur zu Hause installiert und kann daher erst nach 17:30 Uhr testen.
|
AW: Byte to int
Ja ich nehm Arbeitslaptop Wochenende jetzt auch mit nach hause, um das zu testen sonst denkt man da die ganze zeit dran.
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, ImgList, jpeg, Types, Contnrs; type Tintegerarray = array of integer; Tpicarray = array of TPicture; Tstringarray = array of String; TForm1 = class(TForm) Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Button1: TButton; Edit4: TEdit; Edit5: TEdit; Edit6: TEdit; Edit7: TEdit; Edit8: TEdit; Edit9: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label7: TLabel; Label8: TLabel; Label9: TLabel; Label10: TLabel; Label11: TLabel; Label12: TLabel; Image1: TImage; Image2: TImage; Image3: TImage; Image4: TImage; Image5: TImage; Image6: TImage; Image7: TImage; Image8: TImage; Image9: TImage; Image10: TImage; Image11: TImage; Image12: TImage; Image13: TImage; Image14: TImage; Image15: TImage; Image16: TImage; Image17: TImage; Image18: TImage; Image19: TImage; Image20: TImage; Image21: TImage; Image22: TImage; Image23: TImage; Image24: TImage; Image25: TImage; Image26: TImage; Image27: TImage; Label13: TLabel; Label14: TLabel; Label15: TLabel; Label16: TLabel; Label17: TLabel; Label18: TLabel; Label19: TLabel; Label20: TLabel; Label21: TLabel; Label22: TLabel; Label23: TLabel; Label24: TLabel; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} function numberdissect(numbers: Cardinal): TByteDynArray; var safer: integer; i: integer; begin safer := 0; SetLength(Result,2); while numbers <> 0 do begin Result[safer] := numbers mod 10; numbers := numbers div 10; inc(safer); end; If Result[2] = not(null) then begin i := Result[0]; Result[0] := Result[2]; Result[2] := i; end else begin i := Result[1]; Result[1] := Result[0]; Result[0] := i; end; end; function Symbolspeicher: Tstringarray; var counter: integer; swap : String; merker1, merker2: integer; begin SetLength(Result,9); for counter := low(Result) to high(Result) do begin Result[counter] := 'Symbolik_' + intToStr(counter) + '.jpg'; end; for counter := low(Result) to high(Result) do begin merker1 := trunc(random(high(Result)))+Low(result); merker2 := trunc(random(high(Result)))+Low(result); swap := Result[merker1]; Result[merker1] := Result[merker2]; Result[merker2] := swap; end; end; function picload: Tpicarray; var counter: integer; picPath: Tstringarray; begin picPath := Symbolspeicher; SetLength(result,10); for counter := Low(result) to high(Result) do begin Result[counter] := TPicture.Create; Result[counter].LoadFromFile(picPath[counter]); end; end; function bedingung: Tintegerarray; var Generierer: array[0..3] of integer; max, max2: integer; begin repeat Generierer[0] := trunc(random(899))+100; max := 999 - Generierer[0]; Generierer[1] := trunc(random(max))+10; Generierer[2] := trunc(random(max))+10; max := 999 - Generierer[1]; max2 := 999 - Generierer[2]; if max > max2 then Generierer[3] := trunc(random(max2))+10 else Generierer[3] := trunc(random(max))+10; SetLength(result,9); result[0] := Generierer[0]; result[1] := Generierer[1]; result[2] := Generierer[2]; result[3] := Generierer[3]; result[4] := Generierer[0] + Generierer[1]; //A2 + A1 = C1 result[5] := Generierer[2] + Generierer[0]; //B1 + A1 = C2 result[6] := Generierer[1] + Generierer[3]; //A2 + B2 = D1 result[7] := Generierer[2] + Generierer[3]; //B1 + B2 = D2 result[8] := Result[5]+Result[6]; //engergebnis until(result[8] <= 999); if (Result[8] = Result[4] + Result[7]) then ShowMessage('Die Zahlen Stimmen ') else ShowMessage('Die Zahlen stimmen nicht'); end; procedure TForm1.Button1Click(Sender: TObject); type Allrounder = TImage; var rec : TIntegerarray; pics : Tpicarray; saferend: TByteDynArray; firstIcon: Tstringarray; counter, oneup: integer; middlesafer : array[0..26] of Smallint; nein : array[0..26] of String; begin oneup := 0; SetLength(saferend,3); rec := bedingung; firstIcon := Symbolspeicher; Pics := picload; Edit1.Text := InttoStr(rec[0]); Edit2.Text := InttoStr(rec[1]); Edit3.Text := InttoStr(rec[4]); Edit4.Text := InttoStr(rec[2]); Edit5.Text := InttoStr(rec[3]); Edit6.Text := InttoStr(rec[7]); Edit7.Text := InttoStr(rec[5]); Edit8.Text := InttoStr(rec[6]); Edit9.Text := InttoStr(rec[8]); repeat for counter := 0 to 3 do begin middlesafer[counter] := (numberdissect(rec[oneup])); (*[Fehler] Unit1.pas(274): Inkompatible Typen: 'Smallint' und 'TByteDynArray' *) end; inc(oneup); until oneup = 9; for counter := low(middlesafer) to high(middlesafer) do (* WEnn ich aus dem smallint ein ByteDynArray mache *) begin case middlesafer[counter] of 0: picload[0]; else end; end; end; procedure TForm1.FormCreate(Sender: TObject); begin Randomize; end; end. |
AW: Byte to int
In welcher Zeile knallt es nun genau?
Und wie war die genaue Fehlermeldung? PS: Man kann nahezu alles per Strg+C als Text kopieren. (Compilermeldungen, Fehlerdialoge, ...) PPS: Zitat:
![]() |
AW: Byte to int
[Fehler] Unit1.pas(274): Inkompatible Typen: 'Smallint' und 'TByteDynArray'
Bei umbennen in TByte Dyn Array [Fehler] Unit1.pas(282): Ordinaltyp erforderlich |
AW: Byte to int
Zitat:
Ganzes Array ... obwohl man bestimmt nur einen der Werte daraus haben wollte. function numberdissect(numbers: Cardinal): TByteDynArray; :stupid: |
AW: Byte to int
Ein paar Zwischenvariablen täten dem Verständnis gut. War vielleicht eher so etwas gemeint?
Delphi-Quellcode:
middlesafer[counter] := numberdissect(rec[oneup])[counter];
|
AW: Byte to int
es funktioniert :coder2::oops:
|
AW: Byte to int
Wo gibst Du eigentlich die ganzen TPicture-Instanzen aus dem Array wieder frei?
|
AW: Byte to int
"noch" nirgends
habe mich noch nicht damit auseinander gesetzt wie man das wieder frei gibt:oops: |
AW: Byte to int
Ungetestet:
Delphi-Quellcode:
Allerdings würde ich ohne Not keine Arrays von Objektinstanzen verwenden, sondern stattdessen lieber eine TObjectList hernehmen, die verwaltet die enthaltenen Instanzen selbstständig (hatte ich das nicht woanders schon einmal erwähnt)?
procedure ClearPictures(var Pictures: Tpicarray);
var i: integer; begin for i := Low(Pictures) to High(Pictures) do Pictures[i].Free; Pictures := nil; end; |
AW: Byte to int
Ich hatte ihn wieder favon abgebracht, da er Problemen mit den Casts gehabt hat.
Das eigentlich Problem scheint aber mangelndes Grundlagenwissen zu sein. |
AW: Byte to int
doch das mit der objectlist habe auch schon ausprobiert nur ich weiß nicht wie ich das hin bekomme das ich wenn ich die Objectlist Objekte habe und dann sagen
Delphi-Quellcode:
hat das nicht funktioniert weil er meinte das mit dem TImage das nicht funktioniert
type
Allrounder : TImage Allrounder := TImage(Objekte.Items[index]); Allrounder.Pcture.LoadfromFile(Symbolspeicher[0]); |
AW: Byte to int
Hätte aber eigentlich funktionieren müssen.
Delphi-Quellcode:
procedure TDingens.LoadPicture;
var Picture: TPicture; begin Picture := TPicture.Create; Picture.LoadFromFile('Irgendeine Datei'); Objekte.Add(Picture); end; procedure TDingens.DisplayPicture(idx: integer); var Picture: TPicture; begin Picture := Objekte[idx] as TPicture; SomeImage.Picture.Assign(Picture); end; |
AW: Byte to int
Wenn man für die Verwaltung, statt des Array eine TObjectList verwendet, dann kann man der Objektliste das Freigeben überlassen. (OwnsObjects)
|
AW: Byte to int
Das sagen wir zwar schon die ganze Zeit, aber: richtig :roll:
|
AW: Byte to int
Du kannst doch von Frank nichr verlangen, die vorigen Antworten durchzulesen :mrgreen:
|
AW: Byte to int
Kommt nicht wieder vor :mrgreen: (ich pin halt ein Widerporst, chleudert mich zu Poden)
|
AW: Byte to int
Man kann von der RedBox auch nicht verlangen einem Bescheid zu geben wenn zwischendrin wer geantwortet hat. (grade eben hatte die mal auch wieder gepennt)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:05 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