Markstrom, in his eighth consecutive start, made difficult saves on Derek Grant at 1:22 of the third and Dominik Simon at 3:33 to maintain the one-goal lead.
The Ducks then went on a power play at 5:35 and Markstrom made three more saves during the penalty kill.
"Really good at the end," Markstrom said. "That's what you want to see as a goalie. That we are playing in their end and not just chipping the puck out and changing."
Calgary extended its lead to 3-1 at 10:28. Stone, who has served primarily as a healthy scratch this season, scored on a slap shot from the point for his first goal in his seventh game this season.
"The first thing I always think is, hit it as hard as I can, because that's what I'm halfway decent at," Stone said. "I don't want to say I close my eyes and shoot it because I do try to find a lane, but on that one, there weren't many bodies in front, so I just hit it."
Anaheim ended an 0-for-21 drought on the power play when Henrique scored at 11:53 to make it 3-2.
"Overall, our game was better than it has been getting to the front of the net, getting to our forecheck, winning more puck battles," Henrique said. "Simply playing more as a group."
Tkachuk scored into an empty net with 35 seconds left for the 4-2 final.
"They're battling it out for a top spot," Henrique said of the Flames. "There's a lot of talk about them making a deep run and being one of the teams you have to go through to win the Stanley Cup.
NOTES:Gaudreau leads the NHL in even-strength points with 76 (28 goals, 48 assists). He has 47 primary assists this season, second to Kent Nilsson (61, 1980-81) for the most in Calgary/Atlanta Flames history, and his 63 assists this season tie his NHL career high from 2018-19. … Flames forward Trevor Lewis played his 800th NHL game. … Terry played 20:28 after missing the 6-1 loss to the Oilers on Sunday because of swelling near his left eye. ... Zegras has seven points (two goals, five assists) in the past eight games. … The Flames won the season series from the Ducks 3-0-1. … Calgary plays at the San Jose Sharks on Thursday.