AGB  ·  Datenschutz  ·  Impressum  







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

TaskDialog in globaler Unit?

Ein Thema von HCB · begonnen am 30. Dez 2022 · letzter Beitrag vom 31. Dez 2022
Antwort Antwort
HCB

Registriert seit: 12. Feb 2020
177 Beiträge
 
Delphi 12 Athens
 
#1

TaskDialog in globaler Unit?

  Alt 30. Dez 2022, 09:26
Delphi-Version: 10.4 Sydney
Hallo, ich frage mich ob es möglich ist, eigene Dialoge in einer globalen Unit unterzubringen. Ich versuche TTaskDialog als procedure aufzurufen. Aber schon beim Anlegen von
with TTaskDialog.Create(Self) do ... kommt die Fehlermeldung dass Self ein unbekannter Bezeichner ist.

Frage funktioniert das überhaupt ohne eine Form im Hintergrund zu haben?

Für Tipps wäre ich sehr dankbar.

LG Harry
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.960 Beiträge
 
Delphi 12 Athens
 
#2

AW: TaskDialog in globaler Unit?

  Alt 30. Dez 2022, 10:05
Hallo,

1. Hast du eine Ahnung, was Self bedeutet? Dein Post lingt leider nicht danach.
Self ist eine Referenz auf die eigene Objektinstanz. Nur: hast du eine Objektinstanz
wenn du das in eine Prozedur packst?

2. Da Self so nicht geht, was ist denn die Alternative zu einer Objektinstanz?
Nil! Damit hat der Taskdialog halt keinen "Owner" und du musst dich selber um dessen
Freigabe kümmern. Ist ja aber machbar.

Grüße
TurboMagic
  Mit Zitat antworten Zitat
HCB

Registriert seit: 12. Feb 2020
177 Beiträge
 
Delphi 12 Athens
 
#3

AW: TaskDialog in globaler Unit?

  Alt 30. Dez 2022, 10:38
Hallo TurboMagic,

jawoll ich habe keine Ahnung was Self bedeutet (bin Dilletant), aber ich bedanke mich für deinen wertvollen Hinweis mit"NIL".
Ich habe es jetzt so am Laufen:

procedure errorMessage(Message:String);
begin
with TTaskDialog.Create(NIL) do
begin
try
MainIcon := tdiWarning;
Caption := 'WARNUNG';
Title := Message;
CommonButtons := [tcbClose];
Execute;
finally
Free;
end;
end;

LG Harry
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: TaskDialog in globaler Unit?

  Alt 30. Dez 2022, 11:17
Ich hole meine Antwort mal von deiner anderen Frage hier her.
https://www.delphipraxis.net/212172-...aler-unit.html

Du weißt was Self ist?
Und du weißt wofür man dort diesen Parameter an Create übergibt?

Lösungen:
* Nimm etwas anderes, anstatt Self,
* oder nimm Nichts (nil).
Self ist, innerhalb von Methoden einer Klasse (oder eines Records) die aktuelle Instanz der Klasse.

zum Owner:
Wenn du selbst etwas freigibsts (Free), dann kümmerst du dich darum und es es muß niemand Anderes angegeben werden, welcher das macht.

PS: es gibt CODE-Tags ala [DELPHI]...[/DELPHI], für deinen Quellcode, damit man ihn besser lesen kann.

Und noch ein Tipp: wenn möglich, dann wollte man besser kein WITH benutzen.
Es macht mehr Probleme, als man denkt sich damit Arbeit zu sparen, und irgendwann wirst du es bestimmt mal schmerzlich bereuen.
$2B or not $2B

Geändert von himitsu (30. Dez 2022 um 11:20 Uhr)
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.960 Beiträge
 
Delphi 12 Athens
 
#5

AW: TaskDialog in globaler Unit?

  Alt 30. Dez 2022, 16:30
Hallo TurboMagic,

jawoll ich habe keine Ahnung was Self bedeutet (bin Dilletant), aber ich bedanke mich für deinen wertvollen Hinweis mit"NIL".
Ich habe es jetzt so am Laufen: (snip)

LG Harry
Noch so'n paar Tips gratis:

1. Ja, Himitsu hat recht, besser kein with benutzen.
2. Wenn du vor dem Eingeben deines Codebeispiels den Delphi Helm über dem Texteditor hier im
Forum anklickst und du deinen Codee dann zwischen die dadurch eingefügten Tags schreibst, wird
der passend formatiert (jedenfalls so, wie du das einrückst etc.), sieht z. B. so aus:

Delphi-Quellcode:
procedure errorMessage(Message:String);
begin
 with TTaskDialog.Create(NIL) do
 begin
   try
     MainIcon := tdiWarning;
     Caption := 'WARNUNG';
     Title := Message;
     CommonButtons := [tcbClose];
     Execute;
   finally
     Free;
   end;
 end;
end;
3. Hier noch eine Variante ohne with:

Delphi-Quellcode:
procedure errorMessage(Message:String);
var
  Dlg: TTaskDialog;
begin
 Dlg := TTaskDialog.Create(NIL);
 try
   Dlg.MainIcon := tdiWarning;
   Dlg.Caption := 'WARNUNG';
   Dlg.Title := Message;
   Dlg.CommonButtons := [tcbClose];
   Dlg.Execute;
 finally
   Dlg.Free;
 end;
end;
Grüße und weiter Erfolg

TurboMagic
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: TaskDialog in globaler Unit?

  Alt 30. Dez 2022, 23:41
Ich würde dennoch den Owner übergeben (kann ja "Self" als parameter sein) um bei solchen Dingen auch Modal nutzen zu können. Oder war es Parent... eins von beiden, ich nutz meist beides
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: TaskDialog in globaler Unit?

  Alt 31. Dez 2022, 00:01
So hier...
Delphi-Quellcode:
unit Unit8;

interface

uses
  Winapi.Windows,
  System.Classes,
  Vcl.Forms, Vcl.Dialogs;

procedure errorMessage(const AOwner: TComponent; const AMessage: string);

implementation

procedure errorMessage(const AOwner: TComponent; const AMessage: string);
var
  Dlg: TTaskDialog;
begin
  Dlg := TTaskDialog.Create(AOwner);
  try
    Dlg.MainIcon := tdiWarning;
    Dlg.Caption := 'WARNUNG';
    Dlg.Title := AMessage;
    Dlg.CommonButtons := [tcbClose];
    Dlg.ModalResult := MB_OK;
    Dlg.Execute;
  finally
    Dlg.Free;
  end;
end;

end.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Antwort Antwort


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 19:45 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