Welcome to the Tweaking4All community forums!
When participating, please keep the Forum Rules in mind!
Topics for particular software or systems: Start your topic link with the name of the application or system.
For example “MacOS X – Your question“, or “MS Word – Your Tip or Trick“.
Please note that switching to another language when reading a post will not bring you to the same post, in Dutch, as there is no translation for that post!
Some (sloppy) code I threw together when I was playing with "CocoaPromptUser" which shows a macOS correct modal dialog. The idea was to make an overload for MessageDlg (the last parameter, the form, would be the difference). (I've also posted my code also in the official Lazarus forum)
unit Unit1;
{$mode objfpc}{$H+}
{$modeswitch objectivec1}
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls
, CocoaInt, CocoaAll;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
public
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
function MessageDlg( aCaption, aMsg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; HelpCtx: Longint; DefaultButton: TMsgDlgBtn; const Sender:TForm): TModalResult;
var
ButtonArrayPtr : PLongint; // Pointer to the button array
ButtonCount : Integer; // Number of buttons
Counter : integer;
NSParentWindow : NSWindow; // Parent Form that the sheet is attached to
DlgTypeID : longint; // DialogType for conversion from TMsgDlgType
ButtonIDs : array of Longint; // ButtonTypes for conversion from TMsgDlgBtn array
ButtonPressed : longint; // ModalResult which gets converted to TModalResult
aButton : TMsgDlgBtn;
DefaultButtonIndex : integer;
ReversedButtons : TMsgDlgButtons;
begin
// Show regular message dialog if no form assigned or form not showing
if (not Assigned(Sender)) or (not Sender.Visible) then
begin
Result := MessageDlg(aCaption, aMsg, DlgType, Buttons, HelpCtx, DefaultButton, Sender);
exit;
end;
{ Convert array of TMsgDlgBtn to idButtonXYZ (See LCLType) and convert default button (TMsgDlgBtn) to index }
ButtonCount := 0;
DefaultButtonIndex := -1;
ReversedButtons := [];
Result := mrNone;
if Buttons<>[] then
begin
for aButton in Buttons do
ReversedButtons := [aButton] + ReversedButtons;
for aButton in ReversedButtons do
begin
SetLength(ButtonIDs,ButtonCount+1);
case aButton of
mbYes : ButtonIDs[ButtonCount]:= 4;
mbNo : ButtonIDs[ButtonCount]:= 5;
mbOK : ButtonIDs[ButtonCount]:= 1;
mbCancel : ButtonIDs[ButtonCount]:= 2;
mbAbort : ButtonIDs[ButtonCount]:= 7;
mbRetry : ButtonIDs[ButtonCount]:= 8;
mbIgnore : ButtonIDs[ButtonCount]:= 9;
mbAll : ButtonIDs[ButtonCount]:= 10;
mbNoToAll : ButtonIDs[ButtonCount]:= 12;
mbYesToAll : ButtonIDs[ButtonCount]:= 11;
mbHelp : ButtonIDs[ButtonCount]:= 3;
else ButtonIDs[ButtonCount]:= 6; // mbClose
end;
if (aButton=DefaultButton) then
DefaultButtonIndex := ButtonCount;
inc(ButtonCount);
end;
end;
if (ButtonCount>0) then
ButtonArrayPtr:=@{%H-}ButtonIDs[0]{%H+}
else
ButtonArrayPtr:=nil;
{ Convert TMsgDlgType to idDialogXYZ (See LCLType) }
case DlgType of
mtWarning : DlgTypeID := $FF +1;
mtError : DlgTypeID := $FF +2;
mtInformation : DlgTypeID := $FF +3;
mtConfirmation : DlgTypeID := $FF +4;
else DlgTypeID := $FF +5; //mtCustom:
end;
NSParentWindow := nil;
if Assigned(Sender) then
begin
if not Sender.HandleAllocated then Exit;
NSParentWindow := NSView(Sender.Handle).window;
end
else
NSParentWindow := NSApplication.sharedApplication.keyWindow;
if Assigned(NSParentWindow) then
begin
ButtonPressed := CocoaPromptUser(aCaption, aMsg ,DlgTypeID, ButtonArrayPtr, ButtonCount, DefaultButtonIndex, 0, NSParentWindow, true);
case ButtonPressed of
1 : Result := mrOK;
2 : Result := mrCancel;
//3: Result := mrHelp // Help does not return from modal;
4 : Result := mrYes;
5 : Result := mrNo;
6 : Result := mrClose;
7 : Result := mrAbort;
8 : Result := mrRetry;
9 : Result := mrIgnore;
10 : Result := mrAll;
11 : Result := mrYesToAll;
12 : Result := mrNoToAll
else Result := mrNone;
end;
end
else
Result := mrNone;
end;
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
begin
MessageDlg('Caption','',mtInformation,[mbYes,mbNo,mbIgnore],0,mbYes,self);
end;
end.
Kubuntu Kubuntu is a Ubuntu variant that use KDE as it's desktop manager. Fast and well supported.
Security Awareness Tip of the Day Great resource to make you online-life more secure - definitely some great tips here and a recommended read.
PreLoaders Handy little online tool to generate preload images (spinners).
MySolutions.Tech Best DVD/Blu-ray/Video Solutions-Help You to Digitize Your Colorful Life
7-Zip One of the best, free, and most efficient Windows archive and unarchive utilties around. Support quite a few formats as well.
ViMediaManager ViMediaManager is a media manager for Mac OS X, allowing you to gather, store, and manage information, extra art, trailers and television tunes for your movie, television etc for use with for example XBMC.
Links Page These and more of our favorite links can be found on the Links Page.
New Downloads
RenameMyTVSeries-2.3.15-Windows-x64-setup.exeDate: 2025-12-14 - Size: 49.1 MBRename My TV Series, for Windows (Intel 64 bit), a tool to assist in renaming TV Show episode files. Static builds of ffmpeg and ffprobe are included.
squirclenomore-v1.0.2-macos.dmgDate: 2025-11-29 - Size: 5.5 MBmacOS Tahoe applies a very ugly Squircle jail to application icons - SquircleNoMore removes these and resets the normal application icon.
RenameMyTVSeries-2.3.12-GTK-Linux-x64-static-ffmpeg.tar.xzDate: 2025-10-06 - Size: 78.3 MBRename My TV Series, for Linux (64 bit GTK), a tool to assist in renaming TV Show episode files. This bundle comes with (large) static builds of ffmpeg and ffprobe.
RenameMyTVSeries-2.3.12-QT5-Linux-x64-static-ffmpeg.tar.xzDate: 2025-09-28 - Size: 78.3 MBRename My TV Series, for Linux (64 bit QT5), a tool to assist in renaming TV Show episode files. This bundle comews with rather large static builds of ffmpeg and ffprobe.
RenameMyTVSeries-2.3.12-QT5-Linux-x64-shared-ffmpeg.tar.xzDate: 2025-09-28 - Size: 1.9 MBRename My TV Series, for Linux (64 bit QT5), a tool to assist in renaming TV Show episode files. This bundle relies on ffmpeg and ffprobe shared libraries on your system.
Downloads Page Find these and more Downloads on the Downloads Page, where you will also find articles references, operating system requirements and categories.
Amazon Ads
Support us by doing your shopping at Amazon.com, either click the link, or click one of the links below …
You can also sponsor us through these Amazon offerings:
Please consider disabling your ad blocker for our website.We rely on these ads to be able to run our website.You can of course support us in other ways (see Support Us on the left).