Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi verkettungsproblem (https://www.delphipraxis.net/37415-verkettungsproblem.html)

Florian_ 5. Jan 2005 17:01


verkettungsproblem
 
hallo!

:) bin neu hier, also erst mal hallo

hab aber auch gleich ne frage...
versuche eine record variable mit einem normalen string zu verketten...
ist das überhaupt möglich?gibts da vieleicht ne funktion für?

Delphi-Quellcode:
[Fehler] main.pas(118): Inkompatible Typen: 'String' und 'recordvariable'

vielen dank schon mal

Christian Seehase 5. Jan 2005 17:21

Re: verkettungsproblem
 
Moin Florian,

erst einmal herzlich willkommen hier in der Delphi-PRAXiS.

Du solltest mal die Deklarationen zeigen, und dann auch mal kommentieren, was Du vorhast, denn so kann man nur sagen:
Wenn die Typen nicht zueinander passen kann man sie auch nicht verknüpfen.
Vielleicht brauchst Du ja nur einen Typecast.

Florian_ 5. Jan 2005 17:58

Re: verkettungsproblem
 
hi!

danke danke :P

Zitat:

Vielleicht brauchst Du ja nur einen Typecast.
könntest du bitte erklären typecast?

also...

ich habe einen record TFahrzeug und davon eine variable Fahrzeug abgeleitet

desweitern

Code:
list :array[0..8] of string = ('Hersteller', 'Typ', 'Baujahr', 'Farbe',
                                   'Türzahl', 'Motor', 'Hubraum', 'Leistung', 'Preis');


und hier wo ich hänge...


Code:
for i := 0 to 8 do
  begin
  SG_AUSGABE.Cells[i,puffer] := Fahrzeug + list[i];
  end;

mfg florian

paresy 5. Jan 2005 18:11

Re: verkettungsproblem
 
wenn ich richtig rate... ist 'Fahrzeug' dein Record TFahrzeug.... wäre auch gut wenn du diese hier mal zeigst.

wenn sie so aufgebaut ist wie dein string array und ich erahne was du suchst:

Delphi-Quellcode:
for i:=0 to 8 do
 case i of
  0: SG_AUSGABE.Cells[i,puffer] := list[i] + Fahrzeug.Hersteller;
  1: SG_AUSGABE.Cells[i,puffer] := list[i] + Fahrzeug.Typ;
...
 end;
war nur soeine idee... paresy

Florian_ 5. Jan 2005 19:26

Re: verkettungsproblem
 
hoi!

zum verständniss
diese liste

Code:
list :array[0..8] of string = ('Hersteller', 'Typ', 'Baujahr', 'Farbe',
                               'Türzahl', 'Motor', 'Hubraum', 'Leistung', 'Preis');
sollte eigentlich zuerst nur dafür da sein um die stringgridbeschriftung nicht von hand zu fuss zu machen sondern mithilfe einer schleife

Code:
for i := 0 to 8 do
  begin
  SG_AUSGABE.Cells[i,0] := list[i];
  end;
dies sind also die überschriften und werden so übernommen

nun sieht mein record so aus:

Code:
type
  TFahrzeug = record
    Hersteller : string;
    Typ       : string;
    Baujahr   : integer;
    Farbe     : string;
    Tuerzahl  : integer;
    Motor     : string;
    Hubraum   : real;
    Leistung  : real;
    Preis     : real;
  end;

und so gehts weiter

Code:
with Fahrzeug do
  begin
  Hersteller := ED_HER.Text;
  Typ       := ED_TYP.Text;
  Baujahr   := StrToInt(ED_BAU.Text);
  Farbe     := ED_FARB.Text;
  Tuerzahl  := StrToInt(ED_TUER.Text);
  Motor     := ED_MOTOR.Text;
  Hubraum   := StrToFloat(ED_HUB.Text);
  Leistung  := StrToFloat(ED_LEISTUNG.Text);
  Preis     := StrToFloat(ED_PREIS.Text);

da die namen gleich sind (record und liste) wollte ich mir ersparen 9 mal zu schreiben


Code:
SG_AUSGABE.Cells[0,puffer] := Fahrzueg.Hersteller;
SG_AUSGABE.Cells[1,puffer] := Fahrzueg.Typ;
usw.

sondern wollte es mit hilfe einer stringverknüpfung lösen

Code:
for i := 0 to 8 do
  begin
  SG_AUSGABE.Cells[i,puffer] := Fahrzeug + list[i];
  end;
dadurch ist auch der erwähnte fehler verursacht worden der mich zu dem posting gebracht hat
habe jetzt mit hilfe von deiner version paresy folgendes hinbekommen:
Code:
  for i := 0 to 8 do
    begin
    case i of
    0: SG_AUSGABE.Cells[i,puffer] := Hersteller;
    1: SG_AUSGABE.Cells[i,puffer] := Typ;
    2: SG_AUSGABE.Cells[i,puffer] := IntToStr(Baujahr);
    3: SG_AUSGABE.Cells[i,puffer] := Farbe;
    4: SG_AUSGABE.Cells[i,puffer] := IntToStr(Tuerzahl);
    5: SG_AUSGABE.Cells[i,puffer] := Motor;
    6: SG_AUSGABE.Cells[i,puffer] := FloatToStr(Hubraum);
    7: SG_AUSGABE.Cells[i,puffer] := FloatToStr(Leistung);
    8: SG_AUSGABE.Cells[i,puffer] := FloatToStr(Preis);
    end;
funtzt auch ist aber vom schreibaufwand eigentlich genauso wie wenn ich die cells einzeln fülle würde
hoffe das wa jetzt relativ verständlich :pale:

mfg

Christian Seehase 5. Jan 2005 22:58

Re: verkettungsproblem
 
Moin Florian,

geht aber nicht anders, ausser Du nimmst statt Feldnamen, was meiner Meinung nach prinzipiell vorzuziehen ist, ein array of string, wie bei der Konstanten.
Dann müssten natürlich auch die Float-Werte schon als string gespeichert werden.

Typecast meint übrigens Typumwandlung.

Z.B. wird einer Ereignisprozedur ja ein Sender vom Typ TObject übergeben.
TObject ist aber die Basis für alle Objekte.
Willst Du nun, z.B., in einer OnClick Routine eines Button (TButton) an Daten des Button ran, die in TObject nicht deklariert sind, musst Du den Typ umwandeln.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  // erst einmal prüfen, ob es sich überhaupt um einen TButton handelt
  if sender is TButton then begin
    ShowMessage((Sender as TButton).Caption); // Typecast von TObject auf TButton
  end;
end;


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