![]() |
Problem bei Erstellung eigener Unit
Hi @ all,
bin neu hier deswegen erstmal ein herzliches hallo Smile Ich habe ein Problem beim erstellen einer eigenen Unit (Delphi 10 bzw. 2006) Da es viele proceduren und funktion gibt die ich häufig benötige, habe ich mir gedacht ich bastle mir meine eigene Unit. Diese kann ich dann einfach in meine zukünftigen Projekte einbinden etc... Dazu habe ich folgende Ordnerstruktur: C:\eklassen\delphi\units C:\eklassen\delphi\VerwaltungsProjekt Unter "Verwaltungsprojekt" habe ich eine VLC-Anwendung erstellt unter der ich meine selbst erstellen Units verwalten/testen möchte. in c:\eklassen\delphi\units erstell ich mit diesem Projekt die Units. Den Ordner Units habe ich auch unter Optionen zum Suchpfad für Units eingetragen. Nun habe ich mal eine Unit erstellt, deren pas Datei liegt im Ordner "units":
Delphi-Quellcode:
unit akcode;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Registry; type TAkCode = class function ReadRegStr(Rootkey:Cardinal; Subkey:String; Entry:String):String; function ReadRegInt(Rootkey:Cardinal; Subkey:String; Entry:String):Integer; function WriteRegValue(Rootkey:Cardinal; Subkey:String; Entry:String; What:String):boolean; overload; function WriteRegValue(Rootkey:Cardinal; Subkey:String; Entry:String; What:Integer):boolean; overload; function GetUVersion:String; private public end; type TAkTaskMgr=class function LockTaskMgr:boolean; function UnlockTaskMgr:boolean; function IsLocked:boolean; private public end; var pAkCode:TAkCode; pAkTaskMgr:TAkTaskMgr; implementation function TAKCode.GetUVersion; begin Result :='1.1'; end; function TAkCode.ReadRegStr(Rootkey: Cardinal; Subkey: string; Entry: string):String; var Reg:TRegistry; begin Result:=''; Reg:=nil; try Reg:=TRegistry.Create; Reg.RootKey:=Rootkey; if Reg.OpenKey(Subkey,true) then Result:=Reg.ReadString(Entry) else Result:='ERROR'; finally Reg.Free; end; end; function TAkCode.ReadRegInt(Rootkey: Cardinal; Subkey: string; Entry: string):Integer; var Reg:TRegistry; begin Result:=-1; Reg:=nil; try Reg:=TRegistry.Create; Reg.RootKey:=Rootkey; if Reg.OpenKey(Subkey,true) then Result:=Reg.ReadInteger(Entry) else Result:=-1; finally Reg.Free; end; end; function TAkCode.WriteRegValue(Rootkey: Cardinal; Subkey: string; Entry: string; What: string):boolean; var Reg:TRegistry; begin Result:=false; Reg:=nil; try Reg:=TRegistry.Create; Reg.RootKey:=Rootkey; if Reg.OpenKey(SubKey,true) then begin Reg.WriteString(Entry,What); Result:=true end; finally Reg.Free; end; end; function TAkCode.WriteRegValue(Rootkey: Cardinal; Subkey: string; Entry: string; What: Integer):boolean; var Reg:TRegistry; begin Result:=false; Reg:=nil; try Reg:=TRegistry.Create; Reg.RootKey:=Rootkey; if Reg.OpenKey(SubKey,true) then begin Reg.WriteInteger(Entry,What); Result:=true end; finally Reg.Free; end; end; function TAkTaskMgr.LockTaskMgr; begin Result := pAKCode.WriteRegValue(HKEY_CURRENT_USER,'Software\Microsoft\Windows\CurrentVersion\Policies\System','DisableTaskMgr',1); end; function TAkTaskMgr.UnlockTaskMgr; begin Result := pAKCode.WriteRegValue(HKEY_CURRENT_USER,'Software\Microsoft\Windows\CurrentVersion\Policies\System','DisableTaskMgr',0); end; function TAkTaskMgr.IsLocked; var x:Integer; begin x:= pAkCode.ReadRegInt(HKEY_CURRENT_USER,'Software\Microsoft\Windows\CurrentVersion\Policies\System','DisableTaskMgr'); if x=1 then Result:=true else Result:=false; end; end. Diese Unit bzw. das Projekt "Verwaltungsprojekt" habe ich compiliert und alles läuft. Nun erstelle ich ein neues Projekt und binde die Unit AkCode ein. Dies funktioniert auch, d.h. er findet die pas datei. Wenn ich nun aber hergehe und in meinem neuen Projekt z.B. folgenden Aufruf mache:
Delphi-Quellcode:
Dann kann ich das Projekt zwar compilieren und es läuft auch alles wie es soll, er zeigt mir aber dennoch im Struktur Bildschirm unter Fehler an, dass sowohl die Variablen pAkTaskMgr etc. als auch die FUnktionen Nicht deklarierte Bezeichner seien und unterstreicht auch alles rot.
procedure TForm2.Button1Click(Sender: TObject);
begin if pAkTaskMgr.IsLocked then pAkTaskMgr.UnLockTaskMgr else pAkTaskMgr.LockTaskMgr; end; Blickt er nicht dass die Sachen in der Unit sind? Wie kann ich ihm das weis machen? Bitte helft mir Undecided Es läuft zwar alles ist aber trozdem nervig wenn alles rot ist und anscheinend voller Fehler. Danke mal im Vorab bigmama |
Re: Problem bei Erstellung eigener Unit
-das war Quatsch - hab' es gelöscht.
Klaus |
Re: Problem bei Erstellung eigener Unit
Zitat:
Bye Christian Edit: Verdammt, er hats gemerkt bevor ich gepostet hab... :zwinker: |
Re: Problem bei Erstellung eigener Unit
Eben wollte ich auch gerade schreiben -zwecks klassen-
ich blick nicht was das Problem sein soll, weil aufrufen kann ich ja alles, Funktionieren tut es auch aber unterstreichen und meckern tut er trotzdem :( |
Re: Problem bei Erstellung eigener Unit
Also für mich sieht das auch alles korrekt aus, soll ja auch funktionieren...
Aber da ich mich nicht mit Delphi 2006 auskenne, kann ich dazu nichts sagen... Bin noch nicht höher als Delphi 7 gekommen :cyclops: Bye Christian |
Re: Problem bei Erstellung eigener Unit
ja ich sag ja das ist etwas Krotesk
Es scheint irgendwie als würde sich delphi nur direkt beim Ausführen des Programmes die aktuelle Unit "saugen" und während dem arbeiten irgend eine alte Dateiversion die im Speicher liegt oder so. Wenn ich mein Projekt compiliere/erstelle/debugge arbeitet er mit der aktuellsten Version zurück im Entwicklungsmodus tut er wieder so als würde er die Funktionen nicht kennen. HILFE :gruebel: |
Re: Problem bei Erstellung eigener Unit
Stört es dich wirklich so sehr?
Auch bei mir löst er es manchmal nicht richtig auf, aber er kompiliert ja trotzdem. |
Re: Problem bei Erstellung eigener Unit
ja weil er löst nicht manchmal korrekt auf...
er macht es mit der ganzen Unit von mir bzw. allen anderen Units wo ich erstelle und wenn mal der ganze Source rot unterstrichen ist, dann ist das wirklich extrem störend. |
Re: Problem bei Erstellung eigener Unit
nimm' doch mal die Unit direkt in das Projekt auf (per Datei hinzufügen oder "drag and drop")
übrigens sind globale Variablen kein guter Programmierstil :wink: das was Du gepostet hast, könntest Du alles mit class procedures / functions lösen, dann benötigst Du keine Instanzen mr2 |
Re: Problem bei Erstellung eigener Unit
sorry ich fürchte ich kann dir gerade nicht ganz folgen
was meist du mit class procedure/functions? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:40 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-2025 by Thomas Breitkreuz