AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Bookmark and DisableControls - ein kleiner Trick mit Interfaces

Bookmark and DisableControls - ein kleiner Trick mit Interfaces

Ein Thema von hschmid67 · begonnen am 1. Feb 2017 · letzter Beitrag vom 2. Feb 2017
Antwort Antwort
Benutzerbild von himitsu
himitsu

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

AW: Bookmark and DisableControls - ein kleiner Trick mit Interfaces

  Alt 1. Feb 2017, 16:55
Pssst, per Class-Helper als Funktion and TDataSet hängen, anstatt als irgendwo rumliegende eigenständige Funktion.
So hat man auch mehr Spaß am CodeInsigt/CodeVervollständigung.

Und nein, man kann sich auch das Interface speichern, um schon vor Prozedurende das Freizugeben.

Also das läuft ja bis zum END.
Delphi-Quellcode:
begin
  DataSet.BookmarkAndDisable;
  ...machwas
end;
Aber hier ist vorher Schluss.
Delphi-Quellcode:
var
  Bookmark: IDBTool; // oder IInterface
begin
  Bookmark := DataSet.BookmarkAndDisable;
  try
    ...machwas
  finally
    Bookmark := nil; // alternativ kann man auch ein Bookmark.EnableBookmark; anbieten
  end;
  ...machnochwas
end;
Da wir hier ein Interface haben, können wir das Try-Finally auch weglassen, denn Delphi baut implizit ein Try-Finally für solche lokalen Variablen ein, um sie freizugeben/finalisieren.
Delphi-Quellcode:
var
  Bookmark: IDBTool; // oder IInterface
begin
  Bookmark := DataSet.BookmarkAndDisable;
  ...machwas
  Bookmark := nil;
  ...machnochwas
end;
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 1. Feb 2017 um 16:57 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.199 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Bookmark and DisableControls - ein kleiner Trick mit Interfaces

  Alt 1. Feb 2017, 16:59
Bookmark := nil;
Tut also genau das Gegenteil vom dem was es sagt: Es stellt ein Bookmark auf einem DataSet wieder her. Intuitiv ist das nicht.

Mir ist die (potentielle) Verwirrung die zwei gesparten Zeilen echt nicht wert.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.643 Beiträge
 
Delphi 12 Athens
 
#3

AW: Bookmark and DisableControls - ein kleiner Trick mit Interfaces

  Alt 1. Feb 2017, 17:05
Tut also genau das Gegenteil vom dem was es sagt: Es stellt ein Bookmark auf einem DataSet wieder her. Intuitiv ist das nicht.
Eventuell kann man das auch nach dem Muster von TRecall aufbauen - mit anderer Implementierung halt.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.199 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Bookmark and DisableControls - ein kleiner Trick mit Interfaces

  Alt 1. Feb 2017, 17:07
Wieder was neues kennengelernt, danke!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Bookmark and DisableControls - ein kleiner Trick mit Interfaces

  Alt 1. Feb 2017, 17:09
Mir ist die (potentielle) Verwirrung die zwei gesparten Zeilen echt nicht wert.
OK, aber da muß man ja nur einfach die Variale anders "benamsen".
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
hschmid67

Registriert seit: 2. Jul 2012
Ort: Weilheim i. Obb.
75 Beiträge
 
Delphi 12 Athens
 
#6

AW: Bookmark and DisableControls - ein kleiner Trick mit Interfaces

  Alt 1. Feb 2017, 18:25
Hallo Leute,
vielen Dank für Eure Diskussion. In letzter Zeit finde ich Interfaces an manchen Stellen ganz Klasse, weil ich mir die vielen try...finally...end-Blöcke spare, die meinen Code manchmal ganz schon unübersichtlich machen.

@Günther: Danke aber für den Hinweis, dass man besser erkennt, was getan wird, wenn man alles schön ausschreibt. Das sollte ich sicherlich berücksichtigen, wenn ich weiter mit Interfaces und dem damit möglichen Aufräumen experimentiere. Sieht man noch, was getan wird, oder verwirrt es nur, weil man vielleicht versucht doppelt aufzuräumen?

@Zacherl: Ja, auch die Überlegung mit anonymen Prozeduren hatte ich, als ich mir das Ganze überlegte. Ist sicher eine Möglichkeit, aber der Code wird nicht so schön aufgeräumt dadurch. Eine Prozedur in der Procedure lohnt im vorliegenden Fall wohl nicht wirklich. Aber für andere Konstrukte, wo man was umgeben, umklammern möchte, ist das sicher eine Option.

Vielleicht lässt sich der Gefahr der Unübersichtlichkeit hier wirklich durch einen besseren Namen übergeben. Wenn ich schreibe:

Delphi-Quellcode:
  ProtectDatasetCursor(Dataset); // statt BookmarkAndDisable
  { tu hier irgendwas }
Dann könnte das - zumindest in meinen Augen - dem Ganzen näher kommen und wäre damit möglicherweise intuitiver. Aber das ist vielleicht auch Ansichtssache.

Viele Grüße
Harald
Harald Schmid
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Bookmark and DisableControls - ein kleiner Trick mit Interfaces

  Alt 2. Feb 2017, 09:22
Das "sparen" ist aber nicht so wichtig ... darüber Nachdenken sollte man dennoch, ob und wo sowas nötig wäre.

Aber falls es mal vergessen wurde, dann wird es im Notfall dennoch immer freigegeben und es gibt keinen Deadlock.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort

 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 08:05 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