Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Byte to int (https://www.delphipraxis.net/182329-byte-int.html)

Kuehter 17. Okt 2014 08:36

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]]

DeddyH 17. Okt 2014 08:41

AW: Byte to int
 
Was soll ByteToInt denn tun? Ein Byte passt immer in einen Integer, da gibt es nichts umzuwandeln.

Kuehter 17. Okt 2014 08:42

AW: Byte to int
 
kann das byte aber nicht in einen case benutzen aber er sagt mir Ordinaltyp erforderlich

DeddyH 17. Okt 2014 08:44

AW: Byte to int
 
Byte ist ein Ordinaltyp, zeig doch mal den fehlerverursachenden Code.

Kuehter 17. Okt 2014 08:45

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;

DeddyH 17. Okt 2014 08:47

AW: Byte to int
 
middlesafer ist ein Array of Byte? Eigentlich sollte das funtionieren.

Kuehter 17. Okt 2014 08:48

AW: Byte to int
 
Kein direkte Array of byte ein ByteDynArray

DeddyH 17. Okt 2014 08:55

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;

Kuehter 17. Okt 2014 09:05

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;

DeddyH 17. Okt 2014 09:14

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;

Kuehter 17. Okt 2014 09:21

AW: Byte to int
 
Ihc würde mal sagen Delphi 7 war da noch nicht so weit:-D

DeddyH 17. Okt 2014 09:23

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.

Kuehter 17. Okt 2014 09:26

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

DeddyH 17. Okt 2014 09:28

AW: Byte to int
 
Kein Problem, allerdings hab ich Delphi 7 nur zu Hause installiert und kann daher erst nach 17:30 Uhr testen.

Kuehter 17. Okt 2014 09:30

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.

himitsu 17. Okt 2014 09:33

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:

Zitat von DeddyH (Beitrag 1276341)
Da mein XE kein TByteDynArray kennt,

Types :zwinker:
http://docwiki.embarcadero.com/Libra....TByteDynArray

Kuehter 17. Okt 2014 09:36

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

himitsu 17. Okt 2014 09:43

AW: Byte to int
 
Zitat:

Zitat von Kuehter (Beitrag 1276355)
[Fehler] Unit1.pas(274): Inkompatible Typen: 'Smallint' und 'TByteDynArray'

Da hat wohl jemand vergessen das Array aufzulösen.
Ganzes Array ... obwohl man bestimmt nur einen der Werte daraus haben wollte.


function numberdissect(numbers: Cardinal): TByteDynArray; :stupid:

DeddyH 17. Okt 2014 09:48

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];

Kuehter 17. Okt 2014 09:54

AW: Byte to int
 
es funktioniert :coder2::oops:

DeddyH 17. Okt 2014 09:57

AW: Byte to int
 
Wo gibst Du eigentlich die ganzen TPicture-Instanzen aus dem Array wieder frei?

Kuehter 17. Okt 2014 10:02

AW: Byte to int
 
"noch" nirgends

habe mich noch nicht damit auseinander gesetzt wie man das wieder frei gibt:oops:

DeddyH 17. Okt 2014 10:10

AW: Byte to int
 
Ungetestet:
Delphi-Quellcode:
procedure ClearPictures(var Pictures: Tpicarray);
var
  i: integer;
begin
  for i := Low(Pictures) to High(Pictures) do
    Pictures[i].Free;
  Pictures := nil;
end;
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)?

mkinzler 17. Okt 2014 10:14

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.

Kuehter 17. Okt 2014 10:16

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:
type
Allrounder : TImage


Allrounder := TImage(Objekte.Items[index]);
Allrounder.Pcture.LoadfromFile(Symbolspeicher[0]);
hat das nicht funktioniert weil er meinte das mit dem TImage das nicht funktioniert

DeddyH 17. Okt 2014 10:22

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;

himitsu 17. Okt 2014 14:57

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)

DeddyH 17. Okt 2014 14:58

AW: Byte to int
 
Das sagen wir zwar schon die ganze Zeit, aber: richtig :roll:

mkinzler 17. Okt 2014 15:00

AW: Byte to int
 
Du kannst doch von Frank nichr verlangen, die vorigen Antworten durchzulesen :mrgreen:

DeddyH 17. Okt 2014 15:02

AW: Byte to int
 
Kommt nicht wieder vor :mrgreen: (ich pin halt ein Widerporst, chleudert mich zu Poden)

himitsu 17. Okt 2014 15:16

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 00:57 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