AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

in Tag Integer oOder TObject schreiben

Ein Thema von hoika · begonnen am 6. Jan 2016 · letzter Beitrag vom 6. Jan 2016
Antwort Antwort
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#1

in Tag Integer oOder TObject schreiben

  Alt 6. Jan 2016, 12:33
Hallo,
ich versuche in ein Tag (also Integer) eine Zahl oder ein Objekt zu schreiben.
Hier meine Versuche (i ist dann mal das Tag).
Leider schmiert er mir immer ab.

Hintergrund:
Bisher standen im Tag wirklich nur Integer-Zahlen drin,
jetzt sollen es aber auch zusätzlich mal Objekte sein.

Der alte "Integer in Tag"-Code soll aber trotzdem noch laufen.

Wie mache ich das am Besten?


Danke
Heiko


Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
  O: TObject;
  P: Pointer;
begin
  O:= TObject.Create;

  i := 33;
  P := Pointer(i);
  if TObject(P) is TObject then
  begin
    O := TObject(P);
    if O is TObject then
    begin
      if O.ClassName='TObjectthen <<-- Puff
      begin

      end;
    end;
  end;


  i := Integer(O);
  P := Pointer(i);
  O := TObject(P);
  if O is TObject then
  begin
    if O.ClassName='TObjectthen
    begin

    end;
  end;

end;
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
10.993 Beiträge
 
Delphi 12 Athens
 
#2

AW: in Tag Integer oOder TObject schreiben

  Alt 6. Jan 2016, 12:43
Deine Abfragen, ob es sich um ein TObject handelt sind allesamt obsolet, da du im einen Fall einen HardCast durchführst und im anderen Fall O asl TOBject deklariert ist. Grundsätzlich ist es auch nicht möglich, einen beliebigen Integer von einer Objekt-Instanz zu unterscheiden. Einzig wenn die erlaubten Integer-Werte eine geeignete Obergrenze nicht überschreiten, kann das vielleicht was werden. Dann solltest du aber vor dem Cast auf TObject den Integer-Wert auf diese Grenze hin abprüfen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.111 Beiträge
 
Delphi 12 Athens
 
#3

AW: in Tag Integer oOder TObject schreiben

  Alt 6. Jan 2016, 12:58
IS prüft, ob die Objektinstanz (das muß zwingend eine gültige Instanz oder NIL sein) dem angegebenen Typen (hier TObjekt) entspricht.

Man kann damit nicht prüfen ob es ein "Objekt" ist oder irgendwas Anderes.


Alles zwischen 0 und 65535 kann niemals ein Objekt sein, da UserMode-Anwendungen im Windows auf diesen Speicherbereich keinen Zugriff haben und somit dort auch nie eine Objektinstanz liegen kann.


PS: In NextGen kann/sollte man objekte garnicht von/nach Integer casten,
aber dafür hat FMX noch weitere Tag-Property und Einer ist sogar als TObjekt deklariert.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 6. Jan 2016 um 13:04 Uhr)
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: in Tag Integer oOder TObject schreiben

  Alt 6. Jan 2016, 13:10
Hallo,
danke an Euch zwei, dass mit dem 0-65535 rettet mich

Danke


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: in Tag Integer oOder TObject schreiben

  Alt 6. Jan 2016, 13:11
*Pfh* und ich hatte Dir extra eine PM mit "Super Duper Code" geschrieben.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.111 Beiträge
 
Delphi 12 Athens
 
#6

AW: in Tag Integer oOder TObject schreiben

  Alt 6. Jan 2016, 13:14
"Ordentlich" wäre z.B. eine Lösung mit entsprechenden Daten-Objekten.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: in Tag Integer oOder TObject schreiben

  Alt 6. Jan 2016, 13:45
Wer XE4 sein Eigen nennt muss sich mit solchen Unarten doch nicht mehr herumschlagen. Da baut man sich einen class Helper und gut ist:
Delphi-Quellcode:
HelperForComponent = class helper for TComponent
private
  procedure SetTagObject( const Value: TObject );
  function GetTagObject: TObject;
public
  function TagObjectAs<T:class>: T;
  property TagObject: TObject read GetTagObject write SetTagObject;
end;

function HelperForComponent.TagObjectAs<T>:T;
begin
  if TagObject is T then
    Result := TagObject as T
  else
    Result := nil;
end;
Die TagObject-Referenzen selber speichert man in einem Dictionary ab.

Freundlicherweise kann man sich von einem TComponent informieren lassen, wenn dieses aus dem Speicher fliegt, um das Dictionary auch entsprechend zu bereinigen.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: in Tag Integer oOder TObject schreiben

  Alt 6. Jan 2016, 18:48
Hallo,
XE4 ist in Vorbereitung ... (wann? -> offen )

DeddyH:
den Code der PN habe ich überflogen aber einfach noch nicht verstanden ...
PS: Das passiert mit eigentlich fast nie ...
Morgen früh, 2. Versuch.

LG
Heiko
Heiko
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 17:56 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