Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Vergabe von ID's und deren Auswirkung (https://www.delphipraxis.net/160576-vergabe-von-ids-und-deren-auswirkung.html)

EWeiss 20. Mai 2011 15:51


Vergabe von ID's und deren Auswirkung
 
Letztens ein seltsames Phänomen
Ich vergebe meine Id's spontan und in verbindung stehend mit der Funktion für die Sie gedacht ist.
So wie diese hier.

Delphi-Quellcode:
  ID_LABEL_INTRO          = 100; // Informations Label
  ID_AEROBUTTON           = 101; // Aero Button
  ID_FLIPNOTES            = 102; // Noten Umdrehen
  ID_DRUM                 = 103; // Drum Liste
  ID_INSTRUMENT           = 104; // Instrumenten Liste
  ID_VL                   = 105; // VL Liste
  ID_EFFECTS              = 106; // Effects Liste
  ID_LABEL_GENRE          = 107; // Informations Label
  ID_GLASS_OPACITY_LABEL  = 108; // Informations Label
  ID_TRACK_OPACITY        = 109; // Trackbar Transparent
  ID_AEROCRYSTAL          = 110; // Aero Check Button
  ID_AEROBLUR             = 111; // Aero Blur Button
  ID_LINEVERT             = 112; // Einfache Linie
  ID_AERODISABLE          = 113; // Global Aero Disable
  ID_TRACK_BLURLEVEL      = 114; // Trackbar BlurLevel
  ID_VERSION              = 115; // Versions Info
  ID_BTN_ABOUT            = 116; // About Button
Letzten's lasse ich ein Lied laufen und muss feststellen das plötzlich einer meiner
Button anfängt zu blinken jetzt war ich sehr verwundert denn das passierte nur wenn das spezielle aufgerufen wurde.
Bekam schon wieder die Krise da ich einfach nicht lokalisieren konnte woran das liegen könnte.

Nach einiger Überlegung kam ich zu dem Schluss das es unter Umständen mit meiner vergabe der ID's zu tun haben
könnte alles durchsucht ob vielleicht doppelte Einträge vorhanden waren. Na ja nix.
Dann bin ich hingegangen und habe einfach mal alle ID's um ein 1000 faches höher gesetzt.
Und siehe da plötzlich war das problem beseitigt.
Kein Blinken mehr.

Wie laßt ihr euch leiten bei der vergabe der ID's habe immer wieder ein.. zwei kleine Probleme hier.
Noch ein Beispiel..

Erster Eintrag.
Delphi-Quellcode:
PROP_IMAGE_BACK    = 1;
SkinEngine.SetImageProperty(FHPanel, PROP_IMAGE_BACK, Img);
Delphi-Quellcode:
GRID_IMAGE = 1;
SKAERO_SetImageProperty(FHGrid, GRID_IMAGE, Img);
Wohl bemerkt die zweite ist nicht global ausgelegt.
Und Funktioniert nicht.Kein Object wird gezeichnet.

Das hingegen funktioniert einwandfrei
Delphi-Quellcode:
PROP_IMAGE_BACK    = 1;
GRID_IMAGE = PROP_IMAGE_BACK;
Also ehrlich das ist schon sehr konfus das ganze.
Die übergabe von ID's macht das Programm meines erachtens extrem anfällig für Fehler
vor allem dann wenn man sie wie in dem Beispiel oben nicht identifizieren kann.

Wer garantiert das nicht just in dem Moment meine Message mit denen der WindowsAPI kollidieren?

Meine Frage nochmal wie Handhabt ihr das mit der vergabe von ID's und wo steht man auf
der sicheren Seite?

gruss

jfheins 20. Mai 2011 16:00

AW: Vergabe von ID's und deren Auswirkung
 
Welche ID's?
Windows Message.ID's? Dann guck dir mal WM_USER an.

EWeiss 20. Mai 2011 16:02

AW: Vergabe von ID's und deren Auswirkung
 
Zitat:

Zitat von jfheins (Beitrag 1101996)
Welche ID's?
Windows Message.ID's? Dann guck dir mal WM_USER an.

Du verstehst schon auf was ich hinaus will oder?
Besonders den Sinn hinter meiner Frage.

gruss

Phoenix 20. Mai 2011 16:10

AW: Vergabe von ID's und deren Auswirkung
 
Du verstehst schon die Antwort? Besonders den Sinn hinter dem Hinweis auf WM_USER?

s.h.a.r.k 20. Mai 2011 16:12

AW: Vergabe von ID's und deren Auswirkung
 
Deine IDs definieren ja Messages oder? Wenn ja, dann sollten diese tunlichst überhalb von der Konstante WM_USER angesiedelt werden, da es eben sonst zu Kollisionen kommt. Macht das halt so:
Delphi-Quellcode:
  ID_LABEL_INTRO = WM_USER + 100; // Informations Label
  ID_AEROBUTTON = WM_USER + 101; // Aero Button
  ID_FLIPNOTES = WM_USER + 102; // Noten Umdrehen
  ID_DRUM = WM_USER + 103; // Drum Liste
Alles was kleiner als WM_USER ist, gehört einfach Windows :)

jfheins 20. Mai 2011 16:18

AW: Vergabe von ID's und deren Auswirkung
 
Zitat:

Zitat von EWeiss (Beitrag 1101998)
Du verstehst schon auf was ich hinaus will oder?
Besonders den Sinn hinter meiner Frage.

gruss

Nein, ich habe keine Ahnung, welche ID's du da hast und wofür du die brauchst. Und erst recht nicht warum auf einmal irgendwelche Buttons blinken. Deshalb habe ich ja auch nachgefragt.

Aber gut, ich will natürlich gerne auf deine Frage antworten:
Zitat:

Meine Frage nochmal wie Handhabt ihr das mit der vergabe von ID's und wo steht man auf
der sicheren Seite?
Ich lasse meine ID's meistens automatisch vergeben. Dazu lege ich grundsätzlich in jeder MySQL Tabelle als erstes eine Spalte "id" mit einem Integertypen an. Diese wird dann auf auto_increment gesetzt, sodass beim Einfügen neuer Datensätze automatisch eine neue ID generiert wird.
Kollisionen hatte ich bisher keine, das mit dem incrementieren funktioniert zuverlässig. :stupid:

Aus den blinkenden Buttons habe ich aber geschlossen, dass es sich um Windows Message ID's handeln könnte. Und in diesem Fall ist der Hinweis auf WM_USER ernstzunehmen ;)

Union 20. Mai 2011 16:25

AW: Vergabe von ID's und deren Auswirkung
 
MSDN-Library durchsuchenWM_USER

Range Meaning
0 through WM_USER–1 Messages reserved for use by the system. [/MSDN]

Luckie 20. Mai 2011 16:30

AW: Vergabe von ID's und deren Auswirkung
 
Es geht hier wohl nicht um die IDs von Datensätzen, sondern von die IDs von Windowssteuerlementen. Ich denke, der Hinweis mit WM_USER dürfte hier nicht zutreffend sein, da mit den IDs Steuerelemente benannt werden und keine Nachrichten. Warum dieses Steuerelement jetzt aber "geblinkt" hat, kann ich mir aber auch nicht so recht erklären und wenn dann nur mit einer ziemlich schrägen Erklärung und so schräg kann man eigentlich gar nicht programmieren, so dass für mich diese Erklärung eigentlich ausscheidet.

Ich persönlich fange eigentlich bei hundert an zu zählen. Und wenn ich mehrere toplevel Fenster habe, dann bekommt das Hauptfenster die ID 100 und die Steuerelemente auf diesem die IDs 101 bis 199. Das zweite Fenster bekommt die ID 200 und die Steuerelemente auf diesem die IDs 201 bis 299 und so weiter.

Union 20. Mai 2011 16:34

AW: Vergabe von ID's und deren Auswirkung
 
Vielleicht werden diese IDs ja auch irgendwo in seinem Eventhandler-Code abgefragt. Und dort kann dann sehr wohl was schieflaufen.

EWeiss 20. Mai 2011 16:34

AW: Vergabe von ID's und deren Auswirkung
 
Zitat:

Zitat von Union (Beitrag 1102005)
MSDN-Library durchsuchenWM_USER

Range Meaning
0 through WM_USER–1 Messages reserved for use by the system. [/MSDN]

Das ist mir schon klar.
Wer garantiert dir aber das die Messagen übrigends WM_USER ist FALSCH
dann nicht doch mit anderen kollidieren.

Das ist wenn ihr es schon so genau nehmt Korrekt!
Ein vielfaches von ...
WM_USER and WM_APP

gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:28 Uhr.
Seite 1 von 3  1 23      

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 by Thomas Breitkreuz