![]() |
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:
Letzten's lasse ich ein Lied laufen und muss feststellen das plötzlich einer meiner
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 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:
Wohl bemerkt die zweite ist nicht global ausgelegt.
GRID_IMAGE = 1;
SKAERO_SetImageProperty(FHGrid, GRID_IMAGE, Img); Und Funktioniert nicht.Kein Object wird gezeichnet. Das hingegen funktioniert einwandfrei
Delphi-Quellcode:
Also ehrlich das ist schon sehr konfus das ganze.
PROP_IMAGE_BACK = 1;
GRID_IMAGE = PROP_IMAGE_BACK; 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 |
AW: Vergabe von ID's und deren Auswirkung
Welche ID's?
Windows Message.ID's? Dann guck dir mal WM_USER an. |
AW: Vergabe von ID's und deren Auswirkung
Zitat:
Besonders den Sinn hinter meiner Frage. gruss |
AW: Vergabe von ID's und deren Auswirkung
Du verstehst schon die Antwort? Besonders den Sinn hinter dem Hinweis auf WM_USER?
|
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:
Alles was kleiner als WM_USER ist, gehört einfach Windows :)
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 |
AW: Vergabe von ID's und deren Auswirkung
Zitat:
Aber gut, ich will natürlich gerne auf deine Frage antworten: Zitat:
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 ;) |
AW: Vergabe von ID's und deren Auswirkung
|
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. |
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.
|
AW: Vergabe von ID's und deren Auswirkung
Zitat:
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. |
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