AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Dem Typ TObject eine Property hinzufügen

Ein Thema von s.h.a.r.k · begonnen am 7. Mär 2006 · letzter Beitrag vom 8. Mär 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#1

Dem Typ TObject eine Property hinzufügen

  Alt 7. Mär 2006, 12:58
Hallo.

Ich hätte da ein kleines Problem. Und zwar verwende ich in jedem meiner Programme die Eigenschaft Tag um Proceduren von Komponenten zu bündeln, sodass ich nicht tausende Proceduren in meinem Units habe. Nun habe ich aber einen interessanten Artikel gelesen, wie man eine Anwendung mehrsprachig gestalten kann, allerdings benötigt man dazu die Tag-Eigenschaft.

Nun habe ich die Frage, ob man dem Typen TComponent um eine Eigenschaft wie LanguageTag (bzw. in der FLanguageTag) erweitern kann, sodass diese Eigenschaft bei JEDER verfügbaren Komponente die ich verwende sichtbar und nutzbar ist! Ich habe das schon mal getestet nur war ich bisher noch nicht erfolgreich. Ich denke ich muss erst ads Package, in dem die Classes-Unit steckt compilieren, nur wie?!

Vielen Dank schon mal für eure Antworten

mfg armin
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von Boombuler
Boombuler

Registriert seit: 14. Mär 2003
Ort: Osnabrück
244 Beiträge
 
Delphi 2009 Professional
 
#2

Re: Dem Typ TObject eine Property hinzufügen

  Alt 7. Mär 2006, 13:09
Alternativ könntest du im Tag den Tag zweitteilen wenn du nich die kompletten 4 Byte brauchst...

Ich denke da an sowas wie
HighWord = Sprache
LowWord = Das was du vorhast

so könntest du die Zahlen 3 und 21 einfach so Umwandeln:
3 => 00000000 00000011
21 => 00000000 00010101
3 + 21 => 00000000 00000011 00000000 00010101 => 196629

Oder Auch:
Delphi-Quellcode:
Sprache := blub.Tag and $FFFF0000;
RestTag := blub.Tag and $0000FFFF;
Oder du kompilierst eben TComponent bzw TObject neu...
allerdings kannst du dann davon ausgehen das einige Komponenten von denen du den Quelltext nicht hast sondern nur die DCU's nicht mehr laufen!


Nur noch eine Frage was machst du mit deinem Tag atm? wenn ich dich richtig verstanden habe kann man das auch anders lösen!

Greetz
Boombuler
"Look at you, Hacker. A pathetic creature of meat and bone, panting and sweating as you run through my corridors. How can you challenge a perfect, immortal machine?"
SwapIt Highscore:
  Mit Zitat antworten Zitat
Frickeldrecktuxer_TM
(Gast)

n/a Beiträge
 
#3

Re: Dem Typ TObject eine Property hinzufügen

  Alt 7. Mär 2006, 13:47
du kannst auch einfach eine objektreferenz oder einen pointer auf ein record in dem tag ablegen:
Delphi-Quellcode:
var
  SomeThing: TSomeThing;
  Data1: PDataRec;
  Data2: TDataClass;

// ...

New(Data1);
Data1^.Language := 'Deutsch';
SomeThing.Tag := Integer(Data1);
// ...
PDataRec(SomeThing.Tag)^.Language;

// bzw
Data2 := TDataClass.Create;
Data2.Language := 'Deutsch';
SomeThing.Tag := Integer(Data2);
// ...
TDataClass(SomeThing.Tag).Language;
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#4

Re: Dem Typ TObject eine Property hinzufügen

  Alt 7. Mär 2006, 14:08
@Boombuler:
Dass manche Komponenten dann nicht mehr funktionieren hab ich mir fast gedacht, daher hab ich bisher auch nur ein "bisschen" getestet und nicht zu sehr in die Units eingegriffen.
Was ich im Moment mit dem Tag anstelle: Und zwar hab ich zum Bleistift 10 MainMenu Einträge. Jeder Eintrag bekommt einen unterschiedlichen Tag zugewiesen, also von 0-9. Dann schreibe ich eine Procedure, die bei den OnClicks der 10 Einträge ausgeführt wird und frage dann per case-Anweisung ab, um welches Item es sich handelt, also wie folgt:
Delphi-Quellcode:
procedure TForm1.MainMenuTestClick(Sender: TObject);
begin
  case (Sender as TMenuItem).Tag of
    0: { OnClick beim ersten Eintrag }
    begin
      // Do Anthing
    end;

    1: { OnClick beim zweiten Eintrag }
    begin
      // Do Anthing
    end;

    // etc..

  end;
end;
Was du mit dem HighWord und LowWord meinst, weiß ich bisher zwar noch nicht, aber ich werd mich dieser Sache mal genauer annehmen...

@Frickeldrecktuxer_TM:
Hm.. hatte mit Pointer bisher noch nie wirklich viel am Hut, hätte auch gedacht, dass das vielleicht etwas einfacher geht. Finde deine Lösung etwas kompliziert, vor allem weil ich verdammt viele Komponenten auf meiner Form habe!
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von Boombuler
Boombuler

Registriert seit: 14. Mär 2003
Ort: Osnabrück
244 Beiträge
 
Delphi 2009 Professional
 
#5

Re: Dem Typ TObject eine Property hinzufügen

  Alt 7. Mär 2006, 14:22
Deine Aktion mit den Prozeduren könntest du auch so abfragen:

Delphi-Quellcode:
procedure TForm1.MainMenuTestClick(Sender: TObject);
begin
  If (Sender as TMenuItem) = MenuEintrag1 then
    begin
      // Do Anything
    end
  else If (Sender as TMenuItem) = MenuEintrag2 then
    begin
      // Do Anything else
    end;
end;
"Look at you, Hacker. A pathetic creature of meat and bone, panting and sweating as you run through my corridors. How can you challenge a perfect, immortal machine?"
SwapIt Highscore:
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#6

Re: Dem Typ TObject eine Property hinzufügen

  Alt 7. Mär 2006, 15:19
Ja, das weiß ich, hatte ich auch schon mal gemacht, finde es aber einfacher, das über meine Case-Anweisung zu machen. Vor allem ist das nicht so viel zum schreiben! Daher suche ich ja nach einer Alternativen Lösung zu meinem Problem. Hatte auch schon mal an vorher angelegt Konstanten gedacht, aber das macht die Sache auch nur noch schwieriger zu verwalten... Daher war meine eigentliche Idee einen zweiten "Tag" (d.h. eine weitere Eigenschaft) einzuführen.

Nachdem das im Allgemeinen aber nicht so einfach geht wie ich mir das gedacht habe, werde ich mir wohl etwas anderes einfallen lassen müssen, aber über weitere Hinweise wäre ich sehr erfreut!

mfg armin
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von Boombuler
Boombuler

Registriert seit: 14. Mär 2003
Ort: Osnabrück
244 Beiträge
 
Delphi 2009 Professional
 
#7

Re: Dem Typ TObject eine Property hinzufügen

  Alt 7. Mär 2006, 15:49
Wie gesagt guck dir das mit dem Hi und Lo Word an!
Dabei teilst du einfach deinen Tag in 2 Teile...

Delphi-Quellcode:
Function GenerateTag(SprachCode, OrginalTag:Word):Integer;
begin
  result := (SprachCode shl 16) + OrginalTag;
end;

function GetOrginalTag(aComponent:TComponent):Integer;
begin
  result := aComponent.Tag and $0000FFFF;
end;

function GetSprachCode(aComponent:TComponent):Integer;
begin
  result := aComponent.Tag and $FFFF0000;
end;
Die einizge Bedingung dabei ist eben, dass du bei keiner der Zahlen den Wert 65535 überschreitest!

Greetz
Boombuler
"Look at you, Hacker. A pathetic creature of meat and bone, panting and sweating as you run through my corridors. How can you challenge a perfect, immortal machine?"
SwapIt Highscore:
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: Dem Typ TObject eine Property hinzufügen

  Alt 7. Mär 2006, 16:05
Kleiner Fehler:
Delphi-Quellcode:
function GetSprachCode(aComponent:TComponent):Integer;
begin
  result := (aComponent.Tag and $FFFF0000) shr 16;
end;
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von Boombuler
Boombuler

Registriert seit: 14. Mär 2003
Ort: Osnabrück
244 Beiträge
 
Delphi 2009 Professional
 
#9

Re: Dem Typ TObject eine Property hinzufügen

  Alt 7. Mär 2006, 16:06
Ups

Ich wusste ich hab was vergessen

Greetz
Boombuler
"Look at you, Hacker. A pathetic creature of meat and bone, panting and sweating as you run through my corridors. How can you challenge a perfect, immortal machine?"
SwapIt Highscore:
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#10

Re: Dem Typ TObject eine Property hinzufügen

  Alt 7. Mär 2006, 16:50
Zitat von Boombuler:
Die einizge Bedingung dabei ist eben, dass du bei keiner der Zahlen den Wert 65535 überschreitest!
Also das sollte nun weniger das Problem sein, aber das ganze find ich gar nicht mal so schlecht! Muss ich mal an einem kleinen Programm testen. Habe bisher leider noch nie was mit multilingualen Programm gemacht, aber irgendwann muss ich damit halt mal anfangen Vielen Danke für eure Hilfe!
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 04:44 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